Totoro 3 563 Опубликовано: 22 сентября, 2017 (изменено) Я вот тут задумался, а как быть с интернационализацией (и локализацией) программ? Когда программа становится достаточно большой и популярной, возникает мысль выложить её на каком-нибудь иностранном ресурсе. Ну или просто какой-нибудь чувак приходит и говорит: "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 Тоже не совсем юзерфрендли. Предлагаю обсудить эту тему, и придти к какому-нибудь удобному стандарту. Какие варианты решения проблемы приходят вам на ум? Изменено 22 сентября, 2017 пользователем Totoro Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 22 сентября, 2017 (изменено) Всем кота! Я тоже сегодня думал. Смотря на плохой код нашего голографического редактора. Нужно просто сделать меню с выбором языков и динамически перегружать лэйблы. Изменено 22 сентября, 2017 пользователем NEO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro Автор темы 3 563 Опубликовано: 22 сентября, 2017 Нужно просто сделать меню с выбором языков и динамически перегружать лэйблы. Это уже немного детали UI программы. Но вопрос-то остаётся тем же самым. Как хранить переводы? Жёстко забитыми в коде? А как распространять программу на разных языках? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
NEO 542 Опубликовано: 22 сентября, 2017 (изменено) Это уже немного детали UI программы. Но вопрос-то остаётся тем же самым. Как хранить переводы? Жёстко забитыми в коде? А как распространять программу на разных языках? lang файлы, тут то и нужен сборщик программ, по аналогии с jar, ты пакуешь файлы в один, а потом запускаешь этим же сборщиком, я уже писал программу такую. А в нём ресурсы всякие, картинки, языковые файлы, библиотеки. Изменено 22 сентября, 2017 пользователем NEO Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro Автор темы 3 563 Опубликовано: 22 сентября, 2017 Мне тоже идея внешних файликов с локализациями нравится больше. В принципе можно заливать в репозиторий программу с набором локализаций, а при старте программы потом просить выбрать язык. Вроде так довольно многие делают. Например, пишем программу в /usr/bin/holo.lua, а файлы локализации в /etc/holo/lang/ru_RU.lang и т.п. А потом в /etc/holo/app.conf записываем какой язык выбрал пользователь при первом старте. Минус тут только один - загружаются лишние языковые файлы, которые будут занимать место на диске, и которыми пользователь не будет пользоваться. Хотя, можно из программы подчищать лишнее потом. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 22 сентября, 2017 загружать одним пакетом, спросить при установке язык и запомнить его в конфиге, спросить на втором шаге, следует ли удалить неиспользуемые языки. Реализовать в программе эпический диалоговый модуль настройки, проверку доступности новых языков, их докачку, проверку обновлений и пр. Правда, это все зачастую, как правило, будет занимать 99.99999% от основного кода наших программок Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro Автор темы 3 563 Опубликовано: 22 сентября, 2017 Правда, это все зачастую, как правило, будет занимать 99.99999% от основного кода наших программок Ну да, как всегда, красивости занимают больше всего Но всё таки, если программа достаточна большая и сложная, мне кажется имеет смысл этим заниматься. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 22 сентября, 2017 Но всё таки, если программа достаточна большая и сложная, мне кажется имеет смысл этим заниматься. конечно есть смысл. Особенно если это большая программа, много диалогов, настроек, сложный функционал и пр. Это пожалуй одна из самых главных фич любого программного продукта, локализация. Особенно игр. Но в нашем случае большинство программок можно просто жестко захардкодить англ. и русс. таблицей и конфиг проверять. Кто у нас тут будет на испанский или японский с китайским прожки наши локализовать. Тут бывает прожки у нас проскакивают, что и на русском языке ничего не понятно, что прога делает и для чего она и как работает и запустить ее нет никакой возможности, ибо багульки=) А если ее в китайский кто-то локализует, то это будет вообще мама не горюй. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Doob 2 749 Опубликовано: 23 сентября, 2017 Весь мир давно делает локализацию для своих прог, Тоторо только проснулся. Если пакет зазипать, то места он будет занимать крайне мало, sfx - тоже не плохо, но в основном пользуют загрузку нужных кишок при установке программы - никаких лишних телодвижений со стороны разработчика. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Alex 4 683 Опубликовано: 23 сентября, 2017 мир давно делает локализацию для своих прог, Тоторо только проснулся. скорее всего не Тоторо проснулся, а как раз-то наоборот - Тоторо пытается пробудить нас из глубокого сна Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro Автор темы 3 563 Опубликовано: 23 сентября, 2017 Если пакет зазипать, то места он будет занимать крайне мало, sfx - тоже не плохо, но в основном пользуют загрузку нужных кишок при установке программы - никаких лишних телодвижений со стороны разработчика. Т.е. предлагаешь разместить lang-файлы в отдельных пакетах, и скачивать их программой, после того, как пользователь выберет язык? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
LeshaInc 625 Опубликовано: 23 сентября, 2017 GNU gettext Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
swg2you 403 Опубликовано: 1 октября, 2017 скачивать их программой, после того, как пользователь выберет язык? имхо обновление языковых пакетов с онлайн репозитория - самое правильное решение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах
Totoro Автор темы 3 563 Опубликовано: 2 октября, 2017 имхо обновление языковых пакетов с онлайн репозитория - самое правильное решение. Да, в плане использования - это самая гибкая и удобная схема. Минус только один - будет немного хлопотно обновлять по N пакетов каждый раз, когда изменится интерфейс программы в новой версии. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на других сайтах