Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Кодировка и интернационализация приложения


Автор: Samotnik 2.11.2007, 16:09
Добрый день, есть задание:
Цитата

Изменить аппликацию использую возможности JSTL таким образом, чтобы приветственное сообщение выводилось на языке соответствующем локали браузера (или если таковая не поддерживается приложение на языке по умолчанию).

Есть jstl страница:
Код

<jsp:root version="2.0"
          xmlns:jsp="http://java.sun.com/JSP/Page"
          xmlns:c="http://java.sun.com/jsp/jstl/core">

    <jsp:directive.page contentType="text/html;charset=UTF-8"/>
    <jsp:output doctype-root-element="html"
                doctype-public="-//W3C//DTD XHTML 1.0 Transitional//EN"
                doctype-system="http://www.w3c.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"/>

    <jsp:directive.page contentType="text/html;charset=UTF-8"/>

    <html xmlns="http://www.w3.org/1999/xhtml">
    <head>
        <title>Answer</title>
    </head>
    <body>

    <table>
        <tr>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>

            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>
        </tr>
        <tr>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>
        </tr>
        <tr>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>
        </tr>
    </table>

    </body>
    </html>
</jsp:root>

Не подскажите с чего начинать??

Автор: elkin 2.11.2007, 16:22
http://java.sun.com/j2ee/1.4/docs/tutorial/doc/JSTL6.html#wp63721
http://java.sun.com/docs/books/tutorial/i18n/index.html

Автор: Samotnik 2.11.2007, 16:46
elkin,  Ссылки у меня тоже есть, а что-нибудь по конкретнее, вашими словами, можно услышать (а лучше увидеть)   smile   

Автор: Zamuta 2.11.2007, 17:11
Samotnik, http://forum.vingrad.ru/forum/topic-141523.html  уже обсуждали. С примерами.

Автор: elkin 2.11.2007, 18:37
Вот самый простой пример.
Создаешь jsp:
Код

<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@ taglib uri="http://java.sun.com/jstl/core_rt" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jstl/fmt_rt" prefix="fmt" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/functions" prefix="fn" %>
<c:set var="lang" value="${pageContext.request.locale.language}"/>
<fmt:setLocale value="${lang}_${fn:toUpperCase(lang)}"/>
<fmt:setBundle basename="i18n.Messages" />
<html>
  <head>
      <title>Test</title>
  </head>
  <body>
  <fmt:message key="test" />    
  </body>
</html>

Создаешь пакет, в котором будут лежать файлы локализации.
Например, i18n. В нем создаешь файлы  Messages_en_EN.properties, Messages_ru_RU.properties, ...
Их содержимое:
Messages_en_EN.properties - 
Код

test=Test message!

Messages_ru_RU.properties - 
Код

test=Тестовое сообщение!

И все это запускаешь smile

Автор: Samotnik 5.11.2007, 15:41
elkin,  СПС!!
Хорошо,  а как узнать, на какой язык нужно сообщение переводить (какой файл .properties  загружать) ???

Автор: Kangaroo 5.11.2007, 15:54
Цитата(Samotnik @  5.11.2007,  14:41 Найти цитируемый пост)
Хорошо,  а как узнать, на какой язык нужно сообщение переводить (какой файл .properties  загружать) ???

А эта строка разве не делает этого?
Код

<c:set var="lang" value="${pageContext.request.locale.language}"/>

Автор: Samotnik 5.11.2007, 16:27
Kangaroo,  спс !! 
а что означает строчка  
Код

<fmt:setBundle basename="i18n.Messages" />



Автор: Kangaroo 5.11.2007, 16:32
Цитата(Samotnik @  5.11.2007,  15:27 Найти цитируемый пост)
а что означает строчка  

Разметка HTML
1:

<fmt:setBundle basename="i18n.Messages" />

Я думаю вот это:
Цитата(elkin @  2.11.2007,  17:37 Найти цитируемый пост)
Например, i18n. В нем создаешь файлы  Messages_en_EN.properties, Messages_ru_RU.properties, ...

То есть ты задаешь начало названий файлов - i18n.Messages_en_EN.properies.

А вообще надо просто пробовать! И выкладывать результаты сюда ) мне тоже интересно, просто времени на все не хватает.

Автор: Samotnik 5.11.2007, 17:29
elkin,  на ваш код, броузер мне выдает 
?????test??????
 smile 
Я вот не могу понять, каким образом .jspx     страница видит пакет i18n ?? 

Автор: Samotnik 5.11.2007, 20:03
 smile 
Я не могу понять, почему это не работает?
Код

<c:set var="lang" value="${pageContext.request.locale.language}"/>
<fmt:setLocale value="${lang}_${fn:toUpperCase(lang)}"/>
<fmt:setBundle basename="i18n.Messages" />
    <html xmlns="http://www.w3.org/1999/xhtml">
    
       <table>
        <tr>
            <td><c:out value="${fromServlet}"/>
                <c:out value="${MessageType}"/>
            </td>

Выводит ???fromServlet???   Почему он не получает данные, кот записанны в fromServlet  smile 

Автор: Samotnik 5.11.2007, 20:51
ВСЕ РАБОТАЕТ!!!!
Нужно было в .properties передать параметр дополнительный
Код

gm=Good Morning, {0}
gd=Good Day, {0}
gl=Good Lunch, {0}
ge=Good Evening, {0}
gn=Good night, {0}

а в .jspx вот такой не замысловатый код:
Код

<c:set var="lang" value="${pageContext.request.locale.language}"/>
<fmt:setLocale value="${lang}_${fn:toUpperCase(lang)}"/>
<fmt:setBundle basename="Messages" />
.....
 <fmt:message key="${keySender}">
        <fmt:param value="${name}"/>
    </fmt:message>

И вот и усе !!!!    smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)