Используя встроенную интернационализацию и используя ее по назначению, вы не сможете сделать это без перезагрузки страницы.Встроенный i18n полагается только на загрузку скомпилированной перестановки, которая соответствует выбранной локали.Это означает, что вы не можете просто добавить метатег, вы не можете просто перевернуть настройку и не сможете читать из встроенного класса LocalInfo.
Два варианта, как я вижу,Во-первых, сделайте перезагрузку менее дорогой, чтобы вы могли использовать то, что поставляется с GWT i18n.Для этого выньте оставшуюся часть приложения из входа в систему, создав новое приложение или используя точки разделения, чтобы загружалось как можно меньше кода.Файлы компиляции должны быть кешированными, поэтому они не должны влиять на время загрузки, а только на время, необходимое для запуска приложения.
Второй вариант, если вы не ограничиваете перезагрузку: не используйте встроенный I18n, но найдите другой способ извлечения строк на основе данных времени выполнения (в отличие от обычного подхода во время компиляции).
- GWT документирует один такой способ сделать это с помощью класса Dictionary, позволяя вам читать из строк, загруженных javascript (см. http://code.google.com/webtoolkit/doc/latest/DevGuideI18n.html#DevGuideDynamicStringInternationalization).. Это можно сделать, загрузив файл JS с этимистрок после входа в систему (рассмотрите ScriptInjector для этого, чтобы вы знали, когда он будет готов). Это дает дополнительное преимущество, заключающееся в том, что вам не нужно перекомпилировать для изменения строк, если вы считаете это преимуществом, и недостатком, который необходим длястроки в JS, а не java и файлы свойств (хотя некоторая тщательная работа сервера может позволить вам сгенерировать этот js из java / properties).
- Создайте несколько интерфейсов I18n вместо одного. Вероятно, все они должны реализовывать общийинтерфейс, чтобы вы могли передавать экземпляры всем, что им нужно, виджетам и т. д. Проблема с этим подходом заключается в том, что при использовании встроенного I18n вы компилируете все строки, независимо от того, используются они или нетЧтобы улучшить это, рассмотрим точку разделения для каждоготребуется кейл, и убедитесь, что вы загружаете только один из них.