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


Фотография

I18N

i18n l12n oc language

  • Авторизуйтесь для ответа в теме
Сообщений в теме: 13

#1 Оффлайн   Totoro

Totoro
  • Хранители Кода
  • Сообщений: 1 750
  • Уровень сигнала: 0,26%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 23 Сентябрь 2017 - 00:34

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

 

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: 23 Сентябрь 2017 - 00:36


#2 Онлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 780
  • Уровень сигнала: 4,24%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 23 Сентябрь 2017 - 00:53

Всем кота!

Спойлер

 

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

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

 

Спойлер


Сообщение отредактировал NEO: 23 Сентябрь 2017 - 00:57


#3 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 750
  • Уровень сигнала: 0,26%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 23 Сентябрь 2017 - 01:02

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

 

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

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

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

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



#4 Онлайн   NEO

NEO
  • Пользователи
  • Сообщений: 1 780
  • Уровень сигнала: 4,24%
  • В игре: 36 час. 25 мин.
  • ГородСолнце

Награды

   3                        

Отправлено 23 Сентябрь 2017 - 01:05

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

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

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

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

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

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


Сообщение отредактировал NEO: 23 Сентябрь 2017 - 01:07


#5 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 750
  • Уровень сигнала: 0,26%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 23 Сентябрь 2017 - 01:10

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

 

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

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

 

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

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

 

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

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



#6 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 785
  • Уровень сигнала: 46,38%
  • В игре: 398 час. 9 мин.

Награды

                 

Отправлено 23 Сентябрь 2017 - 01:32

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

 

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



#7 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 750
  • Уровень сигнала: 0,26%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 23 Сентябрь 2017 - 01:34

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

 

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

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



#8 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 785
  • Уровень сигнала: 46,38%
  • В игре: 398 час. 9 мин.

Награды

                 

Отправлено 23 Сентябрь 2017 - 01:42

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

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

 

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



#9 Оффлайн   Doob

Doob
  • Пользователи
  • Сообщений: 814
  • Уровень сигнала: 17,03%
  • В игре: 146 час. 10 мин.

Награды

                                   

Отправлено 23 Сентябрь 2017 - 04:33

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

#10 Оффлайн   Alex

Alex
  • Администраторы
  • Сообщений: 3 785
  • Уровень сигнала: 46,38%
  • В игре: 398 час. 9 мин.

Награды

                 

Отправлено 23 Сентябрь 2017 - 08:06

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

 

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



#11 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 750
  • Уровень сигнала: 0,26%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 23 Сентябрь 2017 - 12:33

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

 

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



#12 Оффлайн   LeshaInc

LeshaInc
  • Пользователи
  • Сообщений: 1 213
  • Уровень сигнала: 13,71%
  • В игре: 117 час. 41 мин.
  • ГородЛуна

Награды

                       

Отправлено 23 Сентябрь 2017 - 18:03

GNU gettext



#13 Оффлайн   swg2you

swg2you
  • Пользователи
  • Сообщений: 268
  • Уровень сигнала: 0%
  • В игре: 0 час. 0 мин.

Награды

              

Отправлено 01 Октябрь 2017 - 15:54

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

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



#14 Оффлайн   Totoro

Totoro
  • Автор темы
  • Хранители Кода
  • Сообщений: 1 750
  • Уровень сигнала: 0,26%
  • В игре: 2 час. 13 мин.

Награды

                                      

Отправлено 02 Октябрь 2017 - 12:57

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

 

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

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







Темы с аналогичным тегами i18n, l12n, oc, language

Количество пользователей, читающих эту тему: 0

0 пользователей, 0 гостей, 0 анонимных