Обслуживание интернационализации Tomcat - PullRequest
2 голосов
/ 07 октября 2010

Я пытаюсь реализовать интернационализацию в Tomcat.Будут разные текстовые файлы ресурсов.Моя идея состоит в том, чтобы загрузить все ресурсы в память, пока загружается tomcat.Ниже приведен пример кода для загрузки нескольких ресурсов в память.

public class ResourceBundleLoader {


    private static ResourceBundle enResourceBundle;
    private static ResourceBundle frResourceBundle;

    public static void loadBundle(){
        Locale enLocale = new Locale("en", "US");
        enResourceBundle = ResourceBundle.getBundle("MessagesBundle",enLocale);
        enLocale = new Locale("fr", "FR");
        frResourceBundle = ResourceBundle.getBundle("MessagesBundle",enLocale);
    }

    public static ResourceBundle getEnResourceBundle(){
        return enResourceBundle;
    }

    public static ResourceBundle getFrResourceBundle(){
        return frResourceBundle;
    }
}

Метод loadBundle вызывается один раз при запуске сервлета.И getEnResourceBundle () и getFrResourceBundle () вызывается соответственно.Это правильный путь для реализации / поддержания интернационализации в Tomcat?или есть способ получше?

Заранее спасибо.

Ответы [ 2 ]

4 голосов
/ 07 октября 2010

Вам не нужно создавать этот вспомогательный класс, согласно документации java , пакеты уже кешируются для вас в памяти.Это просто сделает ваш код более сложным в обслуживании.т.е. вам придется изменять ваш код каждый раз, когда вы добавляете новый «комплект».

Просто добавьте такой код в свои сервлеты и / или JSP:

//request.getLocale() returns the web browsers locale
bundle = ResourceBundle.getBundle("MessagesBundle",request.getLocale())

Просто убедитесь, что выу вас есть файл пакета сообщений по умолчанию со всем вашим текстом.Затем вы можете просто добавлять дополнительные локали по желанию по мере перевода.

Поддержка UTF-8

Я также настоятельно рекомендую вам создать фильтр сервлетов, который будет применяться ко всем запросам, обеспечивающим UTF-8включен как для html, который выводится, так и для анализа ответов формы, отправленных обратно в ваше приложение:

request.setCharacterEncoding("UTF-8");
response.setCharacterEncoding("UTF-8");
0 голосов
/ 07 октября 2010

Я не буду оптимизировать, пока не узнаю, что i18n работает слишком медленно.

Но если бы я пошел по вашему пути, вместо использования скалярных ResourceBundles, я бы поместил ResouceBundles в карту.Теперь ваш код может использовать любой пакет, зная языковой стандарт, который вы все равно должны выбрать соответствующий ResourceBundle.

Ваш код не будет иметь if locale is this, use English.Вместо этого это будет myResourceBundle = bundleMap.get(myLocale);

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...