Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / i18n javascript / 19 сообщений из 19, страница 1 из 1
02.10.2013, 19:25:36
    #38414808
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Подскажите пожалуйста такую вещь - если сайт и в нём много переходов на другие страницы меню, то чтобы сделать i18n этого сайта, надо будет создавать теперь страницы эти все на англ языке, на укр языке и потом джаваскриптом или ангуларом переходы делать на соотв. эти языки при выборе языка в меню?т.е. другого же способа нет легче?
...
Рейтинг: 0 / 0
02.10.2013, 22:32:13
    #38414901
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Легче? Да это самый трудоемкий и сложный способ. Это не интернационализация, а хрен-знает-что-на-разных-языках. Прочти хотя бы в вики, что есть интернационализация (i18n): "технологические приёмы разработки, упрощающие адаптацию продукта". Упрощающие, а не усложняющие! И хотя интернационализация - штука несколько более комплексная, чем просто отображение сайта на нескольких языках, но все же сводится в основном именно к этому. Наиболее универсальный способ - не прописывать намертво строки, а обозначать их способом, определенным в системе. А при смене языка просто подставлять уже строки на другом языке.

Так, для Java есть возможность использование библиотеки JSTL (почти стандарт), которая позволяет настраивать набор хранилищ на разных языках для предоставления интернационализации. Или же использовать более удобную и совершенную систему на основе Spring. На практике это тэги, где описано какое значение брать из хранилища в зависимости от текущей локали. Наверняка есть и другие, но эти однозначно наиболее популярные. Уверен, в других языках есть похожие реализации.
...
Рейтинг: 0 / 0
03.10.2013, 17:27:30
    #38415918
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
IDVsbruck,
а как это сделать "Наиболее универсальный способ - не прописывать намертво строки, а обозначать их способом, определенным в системе. А при смене языка просто подставлять уже строки на другом языке."
Можете скинуть пару ссылок для примера..мне бы надо или на java или на javascript/angular
...
Рейтинг: 0 / 0
03.10.2013, 17:49:13
    #38415955
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Если Java, то Spring/SpringMVC подходит?
...
Рейтинг: 0 / 0
03.10.2013, 17:52:31
    #38415962
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
IDVsbruck,
да, у меня как раз MVC проект
...
Рейтинг: 0 / 0
03.10.2013, 18:30:36
    #38416013
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Тема чуть не для этого раздела, но если чего - перенесу.

В конфиг глобального контекста спринга добавляем
Код: xml
1.
2.
3.
4.
5.
6.
	<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
		<property name="basename" value="/WEB-INF/i18n/messages"/>
		<property name="defaultEncoding" value="UTF-8"/>
		<property name="cacheSeconds" value="2"/>
		<property name="fallbackToSystemLocale" value="false"/>
 	</bean>


(3 последних проперти необязательны - я их в своем проекте использовал)
В конфиг контекста сервлета добавляем
Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
	<mvc:interceptors>
		<bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
			<property name="paramName" value="language"/>
		</bean>
	</mvc:interceptors>
	<bean id="localeResolver" class="org.springframework.web.servlet.i18n.CookieLocaleResolver">
		<property name="defaultLocale" value="en"/>
	</bean>


(либо добавляем бин в уже имеющуюся секцию интерцепторов)
"language" - это параметр в HTTP-запросе, на который будет реагировать данный интерцептор при каждом запросе. Если этот параметр будет иметь локаль, отличную от текущей, локаль контекта поменяется. Бин localeResolver сохраняет текущую локаль в куках - при рестарте локаль пользователя будет прежней.

На клиенте определяем таглиб:
Код: xml
1.
<%@ taglib prefix="spring" uri="http://www.springframework.org/tags" %>


И для вставки локализованной строки используем тэги из указанного таглиба:
Код: html
1.
<spring:message code="page.section.key"/>



Ну, и само собой, определяем файлы пропертей (для моего конфига в папке /WEB-INF/i18n):
messages_en.properties (прописываем параметры в стиле пропертей - key=value, к примеру page.section.key=Example)
messages_ru.properties (page.section.key=Пример)
и т.д.
Только надо учитывать, что если файлы в кодировке UTF-8, то и хранить их так надо, к примеру guest=Гость. Последний эклипс, к примеру, поддерживает данную возможность - видеть локализованные строки, а хранить в виде \uXXXX. Ранее использовался плагин.

При выборе языка на сервере поставил маппинг на метод без реализации - чтобы запрос поступил и спринг его увидел, но действий производить не надо. Хотя любой запрос, имеющий параметр language, будет влиять на язык отображения.

На сервере для получения строк из этих проперти-файлов использую в сервисном слое:
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	@Autowired private MessageSource messages;

	public String getMessage(String key) {
		return messages.getMessage(key, null, RequestContextUtils.getLocale(((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()));
	}
	public String getMessage(String key, Object[] object) {
		return messages.getMessage(key, object, RequestContextUtils.getLocale(((ServletRequestAttributes) RequestContextHolder.currentRequestAttributes()).getRequest()));
	}


При изменении файлов пропертей проект не перекомпилится (если файлы, конечно, не ложить в папку classes) и согласно конфига каждые 2 секунды отслеживает изменения. Это удобный механизм для динамического обновления контекста страниц во время работы веб-сервера вплоть до динамического изменения строк на страницах через админку/вручную.

По любому из классов или по тэгам из таглиба полно информации.
...
Рейтинг: 0 / 0
04.10.2013, 15:09:53
    #38416930
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
IDVsbruck,

спасибо за помощь,а вот каким образом сделана i18n например на этом сайте?и как это узнать
http://www.passport-ua.org/
...
Рейтинг: 0 / 0
04.10.2013, 16:49:51
    #38417168
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Понятия не имею. Но вероятнее всего, что на сервере не Java. Может, как раз так, как ты в первом посте писал. Кто ж их знает?
...
Рейтинг: 0 / 0
04.10.2013, 17:03:58
    #38417201
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
IDVsbruck,

получается просмотр кода страницы или элемента это не показывает?
...
Рейтинг: 0 / 0
04.10.2013, 17:09:06
    #38417211
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
IDVsbruck,

если я правильно вас понял мне в jsp страничке теперь надо все фразы из меню или текста заменить на <spring:message code="page.section.key"/> и в пропертях там уже для каждого языка написать?
...
Рейтинг: 0 / 0
05.10.2013, 00:17:52
    #38417521
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Совершенно верно.
...
Рейтинг: 0 / 0
05.10.2013, 20:42:18
    #38417826
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
IDVsbruck,

ну вот я всё сделал так как вы написали и теперь когда запускаю проект- сайт, то вместо одного из пунктов меню, который я попробовал сделать на нескольких языках, отображается default text..это с этой оперы <spring:message code="welcome.springmvc" text="default text" /> почему такое может быть?
...
Рейтинг: 0 / 0
05.10.2013, 21:08:39
    #38417830
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
в jsp файле:
<a class="navbar-brand" href=""><spring:message code="welcome.springmvc" text="default text"></spring:message></a>

<ul class="dropdown-menu">
<li><a class="vid" href="?language=ru">RU</a></li>
<li><a class="vid" href="#">UA</a></li>
<li><a class="vid" href="?language=en">EN</a></li>
</ul>

в welcome_en.properties:
welcome.springmvc = Main

в welcome_en.properties:
welcome.springmvc = Г\u043Bав\u043Dа\u044F (что означает Главная)

в servlet-context.xml :

Код: xml
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
<beans xmlns="http://www.springframework.org/schema/beans"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://www.springframework.org/schema/beans 
	http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">
 
	<bean id="localeResolver"
		class="org.springframework.web.servlet.i18n.SessionLocaleResolver">
		<property name="defaultLocale" value="en" />
	</bean>
 
	<bean id="localeChangeInterceptor"
		class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor">
		<property name="paramName" value="language" />
	</bean>
 
	<bean class="org.springframework.web.servlet.mvc.support.ControllerClassNameHandlerMapping" >
		<property name="interceptors">
		   <list>
			<ref bean="localeChangeInterceptor" />
		   </list>
		</property>
	</bean>
 
	<!-- Register the bean -->
	<bean class="com.artem.site.HomeController" />
 
	<!-- Register the welcome.properties -->
	<bean id="messageSource"
		class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basename" value="classpath:welcome" />
	</bean>
 
	<bean id="viewResolver"
    	class="org.springframework.web.servlet.view.InternalResourceViewResolver" >
        <property name="prefix">
            <value>/WEB-INF/views/</value>
        </property>
        <property name="suffix">
            <value>.jsp</value>
        </property>
    </bean>
 
</beans>
...
Рейтинг: 0 / 0
06.10.2013, 01:18:58
    #38417911
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Fyn2013ну вот я всё сделал так как вы написали ...
А если снова перечитать? ;)
Есть application context config, а есть servlet context config - это разные контексты, с разными видимостями (scope). Я даже акцентировал, что messageSource помещается в конфиг глобального контекста (applicationContext.xml или как он там), остальное - в servlet-context.xml. Тут человек задает такой же вопрос.
...
Рейтинг: 0 / 0
06.10.2013, 11:24:12
    #38417990
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
IDVsbruck,

но у меня нет applicationContext.xml в проекте, мне его создать самому тогда?
...
Рейтинг: 0 / 0
06.10.2013, 12:44:47
    #38418012
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Как это - нет? В web.xml нет примерно такой строки?
Код: xml
1.
2.
3.
4.
5.
6.
	<context-param>
		<param-name>contextConfigLocation</param-name>
		<param-value>
			/WEB-INF/config/application-config.xml
		</param-value>
	</context-param>


В нем определяются глобальные понятия для проекта - dataSource, sessionFactory, transactionManager, задаем mailSender если есть почта, подключаем task'и если их используем и т.д.

В servlet-config.xml определяются настройки/бины для веб-запроса, обычно это резолверы и интерцепторы. Даже component-scan рекомендуется настроить только для сканирования контроллеров, тогда как глобальный контекст должен сканировать все.

Если так получилось, что файл настройки глобального контекста у тебя не определен, пропиши его в web.xml так как я тебе выше написал и создай его. Пока в нем будет только определение messageSource. А так - читай доку и мануалы, у спринга эти темы (как, впрочем, и остальные) неплохо описаны.
...
Рейтинг: 0 / 0
06.10.2013, 13:23:16
    #38418025
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
IDVsbruck,

есть это у меня в web.xml, только называется он у меня root-context.xml. Я вставил в файл root-context.xml это:
<bean id="messageSource" class="org.springframework.context.support.ReloadableResourceBundleMessageSource">
<property name="basename" value="/WEB-INF/views"/>
<property name="defaultEncoding" value="UTF-8"/>
<property name="cacheSeconds" value="2"/>
<property name="fallbackToSystemLocale" value="false"/>
</bean>
где WEB-INF/views" - путь хранения jsp файлов, всё ж верно? но всё равно при запуске проекта фраза остаётся default text.
...
Рейтинг: 0 / 0
06.10.2013, 14:25:03
    #38418052
Fyn2013
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
точнее там value="classpath:messages" или value="/WEB-INF/views/messages"
не могу понять почему у меня не выходит((
...
Рейтинг: 0 / 0
06.10.2013, 15:12:41
    #38418077
IDVsbruck
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
i18n javascript
Я тоже. Перекидываю в Java-раздел.

Модератор: Тема перенесена из форума "HTML, JavaScript, VBScript, CSS".
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / i18n javascript / 19 сообщений из 19, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]