Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java: GUI и Java FX приложения > Локализация java приложения ?


Автор: filipp76 21.12.2011, 17:09
Есть задача локализовать приложение на несколько языков, есть какие-то стандартные методы в Java чтоб сделать это быстро ? Понятно можно добавить миллион проверок каких-то настроек отвечающих за язык но это слишком не удобно и долго ( Уверен кто-то сталкивался, как реализовали ?

Автор: mstalker26 21.12.2011, 18:06
Я так понимаю, http://docs.oracle.com/javase/tutorial/i18n/ уже прочитали  smile ?

Автор: filipp76 21.12.2011, 18:32
Цитата(mstalker26 @ 21.12.2011,  18:06)
Я так понимаю, http://docs.oracle.com/javase/tutorial/i18n/ уже прочитали  smile ?

Пытался но тяжело понять без нормальных примеров. Может есть у кого маленький пример ?

Автор: Skynin 21.12.2011, 20:41
http://docs.oracle.com/javase/tutorial/i18n/intro/quick.html

Автор: filipp76 21.12.2011, 22:05
Тонна текста на англ языке и ничего не понятно. Кода бы кусочек -  вот так пишем настройки, вот так читаем, тут храним строки.

Автор: Skynin 21.12.2011, 22:24
Где ж там тонна английского?

Короткий текстик программы до.
Потом после. 
Файлики там прилагаются. Чтобы посмотреть где и как хранятся строки.
Куда уж короче.

Добавлено через 8 минут и 20 секунд
Кстати, задал вопрос гуглу
Локализация java приложения

Он дал шпаргалку, на этом же форуме. На русском.
И еще парочку.
типа http://skipy.ru/technics/localization.html

Вы бы не ленились, а гуглили получше. Тема то избитая много лет.


Автор: filipp76 21.12.2011, 22:57
Цитата(Skynin @ 21.12.2011,  22:24)
Где ж там тонна английского?

Короткий текстик программы до.
Потом после. 
Файлики там прилагаются. Чтобы посмотреть где и как хранятся строки.
Куда уж короче.

Добавлено @ 22:32
Кстати, задал вопрос гуглу
Локализация java приложения

Он дал шпаргалку, на этом же форуме. На русском.
И еще парочку.
типа http://skipy.ru/technics/localization.html

Вы бы не ленились, а гуглили получше. Тема то избитая много лет.

Спасибо попытаюсь понять что к чему но пока вижу что проще добавить свои настройки и хранить строки по своему.

Автор: BoneDragon 25.12.2011, 15:48
Пользуюсь самописной библиотекой GetText (написана на Scala, но думаю несложно перенести в Java).
Не так громоздко как в Яве, плюс удобные инструменты типа xgettext, poedit.

Автор: jk1 25.12.2011, 16:41
Цитата

 пока вижу что проще добавить свои настройки и хранить строки по своему. 

Цитата

Пользуюсь самописной библиотекой GetText


До каких только ведосипедов не доводит людей нежелание слегка почитать доки... smile 

Автор: BoneDragon 25.12.2011, 16:48
давно почитал и сравнил. Поэтому и перешел на Gettext. По сравнению с ним явовский велосипед - кривой самокат, с квадратными колесами, взять хотя бы метод доступа к строкам в бандлах по наименованию и использование громоздкого messages.getString("hello_message") вместо краткого tr("Hello !").

Автор: Amp 10.1.2012, 16:42
После чтения документации я кстати тоже полез искать порт gettext под java. 

Автор: BoneDragon 10.1.2012, 16:54
вот парсер на Scala (примитивный, но работает), может кому-то пригодится: https://bitbucket.org/edartuz/muprog/src/6de5a3a8f67e/src/ul/GetText.scala

Автор: CHEM_Eugene 19.1.2012, 10:44
Моя поделка:

Код

public class CoreLabels {

    private static Locale[] supportedLocales = { Locale.ENGLISH,
            new Locale("ru") };

    public static String FILE;

    public static String OPEN_PROJECTS;

    public static String OPEN_IN_BROWSER;
    
    public static String SHOW_LINKS_OF_URL;

    static {
        resolve(CoreLabels.class);
    }

    protected static void resolve(Class<?> resource) {
        ResourceBundle labels = ResourceBundle.getBundle(
                resource.getSimpleName(), supportedLocales[0]);
        for (Field field : resource.getFields()) {
            try {
                field.set(null, new String(labels.getString(field.getName())
                        .getBytes("ISO-8859-1"), "UTF-8"));
            } catch (IllegalArgumentException e) {
                e.printStackTrace();
            } catch (IllegalAccessException e) {
                e.printStackTrace();
            } catch (UnsupportedEncodingException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
}


Ну и соответственно имеются файлы CoreLabels_ru.properties и CoreLabels_en.properties в каталоге, указанном в classpath. В коде нет никаких messages.getString("hello_message"). Это заменяется на ColreLabels.HELLO_MESSAGE

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