Перейти к содержимому
Totoro

I18N

Рекомендуемые сообщения

Я вот тут задумался, а как быть с интернационализацией (и локализацией) программ?

 

i18n-logo-v1-2.png

 

Когда программа становится достаточно большой и популярной, возникает мысль выложить её на каком-нибудь иностранном ресурсе. Ну или просто какой-нибудь чувак приходит и говорит: "I like your program very much, but I don't understand russian at all".

 

Свой голографический редактор, например, я поддерживаю в двух версиях одновременно - русской и английской.

По сути два отдельных клона программы. Это не очень удобно.

 

Отсюда вопрос - как запилить удобную систему локализации программ?

 

 

1) Клоны программы на разных языках

Самый дубовый способ. То как я делал до недавнего времени. Выпускаете программу, делаете несколько копий, каждую переводите на разные языки.

Не очень удобно для вас - потому что надо клонировать и переводить каждую новую версию.

Не очень удобно для тех, кто хотел бы вам помочь с переводом - они не разбираются в вашем коде, и искать в нём, что надо перевести им будет не удобно.

Эту задачу можно облегчить, если вынести все фразы в табличку в начале программы:

local text = {
  greetings = "Приветствую!",
  ...
}

Тогда можно будет не копаться в поисках отдельных строк по всему коду, а только перевести эту табличку.

 

 

2) Файлы локализации

Делаем отдельный файлик, наподобие конфига. В него записываем такие же пары значений, например:

greetings = Приветствую!

И потом считываем его из программы при старте. Можно сделать дефолтные значения, которые прописаны прямо в коде, и будут использоваться, если программа не нашла файлы локализации.

Сами файлики могут лежать рядом с программой, или в папке /etc/my-project/..., или ещё где-то.

 

 

 

Если заливать программу в репозиторий, тоже возникают варианты.

 

Мы может создать несколько пакетов, например: holo-ru, holo-en.

Это как-то немного нелогично. Установка программы будет выглядеть так:

hpm install holo-en

Другой способ - это дублировать версии пакета, и дописывать им языковой суффикс: 0.1.0-en, 0.1.0-fr.

Вроде получше. Установка будет выглядеть так:

hpm install holo@0.7.1-ru

Недостаток - нам всегда придётся указывать версию полностью. То есть нельзя будет как раньше - просто указать название пакета, а репозиторий сам выдаст самую свежую версию.

 

Ещё один способ - это держать файлы локализации отдельными пакетами от основного проекта: проект holo и локализационный пакет holo-lang-en например.

Тогда саму программу можно будет установить как раньше. Но если мы захотим сменить дефолтный язык, придётся указывать дополнительный пакет:

hpm install holo, holo-lang-en

Тоже не совсем юзерфрендли.

 

 

 

Предлагаю обсудить эту тему, и придти к какому-нибудь удобному стандарту.

Какие варианты решения проблемы приходят вам на ум?

Изменено пользователем Totoro

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Всем кота!

 

1367845657_784542124.gif

 

 

Я тоже сегодня думал. Смотря на плохой код нашего голографического редактора.

Нужно просто сделать меню с выбором языков и динамически перегружать лэйблы.

 

 

%D0%B2%D1%8B%D0%B1%D0%BE%D1%80-%D1%8F%D0

 

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Нужно просто сделать меню с выбором языков и динамически перегружать лэйблы.

 

Это уже немного детали UI программы. Но вопрос-то остаётся тем же самым.

Как хранить переводы?

Жёстко забитыми в коде?

А как распространять программу на разных языках?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это уже немного детали UI программы. Но вопрос-то остаётся тем же самым.

Как хранить переводы?

Жёстко забитыми в коде?

А как распространять программу на разных языках?

lang файлы, тут то и нужен сборщик программ, по аналогии с jar, ты пакуешь файлы в один, а потом запускаешь этим же сборщиком, я уже писал программу такую.

А в нём ресурсы всякие, картинки, языковые файлы, библиотеки.

Изменено пользователем NEO

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Мне тоже идея внешних файликов с локализациями нравится больше.

 

В принципе можно заливать в репозиторий программу с набором локализаций, а при старте программы потом просить выбрать язык.

Вроде так довольно многие делают.

 

Например, пишем программу в /usr/bin/holo.lua, а файлы локализации в /etc/holo/lang/ru_RU.lang и т.п.

А потом в /etc/holo/app.conf записываем какой язык выбрал пользователь при первом старте.

 

Минус тут только один - загружаются лишние языковые файлы, которые будут занимать место на диске, и которыми пользователь не будет пользоваться.

Хотя, можно из программы подчищать лишнее потом.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

загружать одним пакетом, спросить при установке язык и запомнить его в конфиге, спросить на втором шаге, следует ли удалить неиспользуемые языки. Реализовать в программе эпический диалоговый модуль настройки, проверку доступности новых языков, их докачку,  проверку обновлений и пр.

 

Правда, это все зачастую, как правило, будет занимать 99.99999% от основного кода наших программок :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Правда, это все зачастую, как правило, будет занимать 99.99999% от основного кода наших программок :)

 

Ну да, как всегда, красивости занимают больше всего  :D

Но всё таки, если программа достаточна большая и сложная, мне кажется имеет смысл этим заниматься.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
Но всё таки, если программа достаточна большая и сложная, мне кажется имеет смысл этим заниматься.

конечно есть смысл. Особенно если это большая программа, много диалогов, настроек, сложный функционал и пр. Это пожалуй одна из самых главных фич любого программного продукта, локализация. Особенно игр.

 

Но в нашем случае большинство программок можно просто жестко захардкодить англ. и русс. таблицей и конфиг проверять. Кто у нас тут будет на испанский или японский с китайским прожки наши локализовать. :)  Тут бывает прожки у нас проскакивают, что и на русском языке ничего не понятно, что прога делает и для чего она и как работает и запустить ее нет никакой возможности, ибо багульки=) А если ее в китайский кто-то локализует, то это будет вообще мама не горюй.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Весь мир давно делает локализацию для своих прог, Тоторо только проснулся.

Если пакет зазипать, то места он будет занимать крайне мало, sfx - тоже не плохо, но в основном пользуют загрузку нужных кишок при установке программы - никаких лишних телодвижений со стороны разработчика.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
мир давно делает локализацию для своих прог, Тоторо только проснулся.

 

скорее всего не Тоторо  проснулся, а как раз-то наоборот  -  Тоторо пытается пробудить нас из глубокого сна  :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

Если пакет зазипать, то места он будет занимать крайне мало, sfx - тоже не плохо, но в основном пользуют загрузку нужных кишок при установке программы - никаких лишних телодвижений со стороны разработчика.

 

Т.е.  предлагаешь разместить lang-файлы в отдельных пакетах, и скачивать их программой, после того, как пользователь выберет язык?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

 

 

скачивать их программой, после того, как пользователь выберет язык?

имхо обновление языковых пакетов с онлайн репозитория - самое правильное решение.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

имхо обновление языковых пакетов с онлайн репозитория - самое правильное решение.

 

Да, в плане использования - это самая гибкая и удобная схема.

Минус только один - будет немного хлопотно обновлять по N пакетов каждый раз, когда изменится интерфейс программы в новой версии.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в тему...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...