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

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

В конфиг глобального контекста спринга добавляем
Код: 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
i18n javascript
    #38416930
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

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

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

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

ну вот я всё сделал так как вы написали и теперь когда запускаю проект- сайт, то вместо одного из пунктов меню, который я попробовал сделать на нескольких языках, отображается default text..это с этой оперы <spring:message code="welcome.springmvc" text="default text" /> почему такое может быть?
...
Рейтинг: 0 / 0
i18n javascript
    #38417830
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
в 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
i18n javascript
    #38417911
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fyn2013ну вот я всё сделал так как вы написали ...
А если снова перечитать? ;)
Есть application context config, а есть servlet context config - это разные контексты, с разными видимостями (scope). Я даже акцентировал, что messageSource помещается в конфиг глобального контекста (applicationContext.xml или как он там), остальное - в servlet-context.xml. Тут человек задает такой же вопрос.
...
Рейтинг: 0 / 0
i18n javascript
    #38417990
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IDVsbruck,

но у меня нет applicationContext.xml в проекте, мне его создать самому тогда?
...
Рейтинг: 0 / 0
i18n javascript
    #38418012
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Как это - нет? В 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
i18n javascript
    #38418025
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
i18n javascript
    #38418052
Fyn2013
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
точнее там value="classpath:messages" или value="/WEB-INF/views/messages"
не могу понять почему у меня не выходит((
...
Рейтинг: 0 / 0
i18n javascript
    #38418077
IDVsbruck
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я тоже. Перекидываю в Java-раздел.

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


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