![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| firedrago |
|
||||||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
Всем привет,
собственно вопрос - кто как реализует мулти-язычность в своих программах. я то одно решение сделал, но если там добавить еще один язык - можно замучаться.... зарание благодарен за идеи! мда у меня сделано так:
Это сообщение отредактировал(а) firedrago - 7.11.2005, 20:32 |
||||||
|
|||||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
изменять легко. Скопировал файл language_eng.lng, переименовал в language_rus.lng и меняй выражения на русские. В самой программе тоже всё наглядно Hashtable.get("hello"); возвратит слово "hello" на предварительно выбранном языке. Хотя удобнее - таблица в базе вместо файла, но не во всех приложениях хочется БД за собой таскать.. |
|||
|
||||
| firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
а хранение всего словаря в памяти - это вроде не самое умное решение... или?
у меня раньше были попытки хранения всей информации в базе, потом в xml.... потом я все на static переделал..... Это сообщение отредактировал(а) firedrago - 7.11.2005, 20:59 |
|||
|
||||
| sergejzr |
|
||||||||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
В твоём коде будет выглядеть без подгрузки файла примерно так:
Добавлено @ 20:49
Это нормальное решение. Весь словарь русского языка займёт в памяти мегов 5, а в твоей программе величина будет настолько ничтожнойб что ей можно просто пренебреч. Да и потом тебе так и так в памяти все слова минимум один раз надо ведь хранить База будет тормозить, если будешь туда за каждым словом лазить. Короче ИМХО оптимальное решение я предложил уже |
||||||||
|
|||||||||
| firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
понял, пасиб!
|
|||
|
||||
| Stampede |
|
|||
![]() Гносеолог ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 963 Регистрация: 25.4.2005 Где: Calgary, Alberta, Canada Репутация: 24 Всего: 144 |
Не глупее, чем зашивать языковые надстройки в код программы и искать среди них перебором. Не обижайся, сам подставился sergej.z тебе все правильно рассказал. Единственная вещь, которую я хотел добавить (почему-то об этом всегда забывают сказать), это вот что: Правильнее использовать параметризованные шаблоны сообщений, потому что в большинстве случаев именно это и требуется. Например, есть такой фрагмент пользовательского диалога: "You have 15 item(s) in the Projects folder you are about to remove. Would you like to keep a copy of them in the Removed folder?" Поскольку мы не знаем наперед, сколько записей и в какой папке там лежит у нашего юзера, то для удобства локализации хорошо бы эти вещи хранить как переменные: "В папке $2, которую вы собираетесь удалить, находится $1 записей. Хотите сохранить их копию в папке Удаленные?" Как именовать переменные, как искейпить комбинации символов и пр. - это уже все не усмотрение разработчиков. Успехов! -------------------- "If you want something done right, do it yourself" По секрету: выучить английский - реально! |
|||
|
||||
| firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
@Stampede
за мысль с шаблонами - спасибо! |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
И мои 5 копеек
Для этих целей предназачен ResourceBundle, например пишем ResourceBundle resourceBundle = ResourceBundle.getBundle("ru.vingrad.util.Hunter") получаем ResourceBundle для текущей системной локали (можно и для произвольной). Повторные вызовы будут возвращать тот же самый ResourceBundle, так что лишняя память использоваться не будет. Получить значени тоже просто: resourceBundle.getString(<key>). ResourceBundle позиционируется Sun-ом как средсво хранения языковых ресурсов и они сами используют его для локализации своих компонент. Локализации можно легко добавлять после разработки приложения, поддержка осуществляется на уровне JDK. В своих приложенияя я использую ResourceBundle и вам советую -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| sergejzr |
|
|||
![]() Un salsero Профиль Группа: Админ Сообщений: 13285 Регистрация: 10.2.2004 Где: Германия г .Ганновер Репутация: 6 Всего: 360 |
LSD хорошая штука
Проблема только с его заполнением, как я понимаю, тут необходимо спецприложение? |
|||
|
||||
| firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
@LSD
это явно то что я хотел услышать..... только как-то оно сильно просто, что аж ничего не понятно.... |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Не совсем. ResourceBundle может быть в виде класса (наследуется от ListResourceBundle), там главное заполнить массив ключ-значение. Или в виде файла properties, эти файлы долны быть в кодировке ISO 8859-1, поэтому все национальные символы надо писать в виде escape-последовательностей (\u0000), но в составе JDK есть утилита native2ascii которая может делать подобные преобразования. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
красота этот ResourceBundle, да еще и в eclipse есть такая удобная штука для него....
а вот еще plugin для eclipse и jbuildera Properties Editor как-раз что б native2ascii не мучать...... эх красота.... вот, что значит знание..... Еще раз всем спасибо! Это сообщение отредактировал(а) firedrago - 8.11.2005, 02:42 |
|||
|
||||
| firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
@LSD,
а как из практики лучше делать один properties файл на class, package или всю программу? |
|||
|
||||
| LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15719 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Загрузка каждого ResourceBundle требует времени и дополнительную память на служебные данные. Так что хранить одну строку в одном ResourceBundle неразумно.
Но и использование одного ResourceBundle на всю программу тоже может иметь негативняе последствия, так если приложение модульное и часть модулей в данный момент не используется, то их ресурсы все равно будут подгружаться, лишняя трата времени и памяти. По возможности надо стараться объединять ресурсы, но не в ущерб модульности. Например один ResourceBundle, на один модуль. Если приложение простенькое то можно обойтись и одним ResourceBundle. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
| firedrago |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 170 Регистрация: 22.9.2005 Репутация: 2 Всего: 3 |
понял, спасибо!
|
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |