Добавить язык
С OpenCLI идут десять переводов: English, 简体中文, 繁體中文, 日本語, 한국어, Español, Português (Brasil), Français, Deutsch и Русский.
Любой другой язык — это один файл, и исправление в одном из этих десяти — тоже.
Через интерфейс
Customize → Language → Add a language file… принимает файл .json и
оставляет его у себя. Он сразу появляется в списке выбора.
Вручную
Тот же файл, в ~/.opencli/locales, названный по языку:
~/.opencli/locales/nl.json
Оба пути пишут в одно и то же место, так что добавленное через интерфейс можно потом править вручную или скопировать на другую машину.
Что внутри
Каждая запись — английская фраза ровно в том виде, в каком она встречается в интерфейсе, и то, что показать вместо неё:
{
"name": "Nederlands",
"strings": {
"Dispatch": "Verzenden",
"Scheduled tasks": "Geplande taken",
"Runs ({count})": "Uitvoeringen ({count})"
}
}
name — то, что показывает переключатель языков. Без него берётся имя файла.
Голая таблица соответствий тоже годится, без обёртки:
{ "Dispatch": "Verzenden" }
Начать с одного из встроенных
Встроенные переводы — файлы того же вида, в
web/src/locales/.
Скопируйте один, замените правую часть каждой строки — и у вас полноценная
отправная точка, а не список фраз, которые ещё надо разыскать.
Чтобы увидеть каждую фразу, которую использует интерфейс:
python3 scripts/i18n-check.py
Подстановки
{name} в фразе подставляется. Сохраняйте те же подстановки, в том порядке, в
каком их хочет ваш язык — эта перестановка и есть большая часть причины, по
которой они существуют:
{ "Allowed {count} of {total}": "Разрешено {count} из {total}" }
Множественное число
plural() выбирает между двумя формами. Английскому, немецкому, испанскому,
французскому и португальскому этого хватает; третьей формы, которой русский
требует для 2–4, у него нет. Там, где языку нужно больше двух форм, пишите
фразу так, чтобы смысл нёс сам числитель: запусков: {count}, а не
существительное, которое обязано с ним согласоваться.
Китайский, японский и корейский берут форму единственного числа и оставляют работу числу — это уже сделано за вас.
Исправить встроенный перевод
Файл, названный по уже встроенному языку, сливается с ним, а не заменяет его. Чтобы поменять одну фразу, напишите одну запись:
{ "Dispatch": "Отправка" }
Всё остальное сохраняет встроенные формулировки.
Когда это вступает в силу
Файл, добавленный через интерфейс, действует сразу. Положенный в каталог вручную читается, когда подключается окно, — переоткройте окно. Файл, который не разбирается, пропускается, со строкой в журнале шлюза — на другие языки это не влияет.
Непереведённые фразы
Фраза без записи показывается по-английски, поэтому частичный перевод читается как смесь, а не как экран из пустот. Чтобы он приносил пользу, доводить его до конца не нужно.
Справа налево
Арабского, иврита и фарси среди встроенных переводов нет, и добавление одного из
них файлом даст страницу, свёрстанную слева направо. Интерфейс пока не
обрабатывает dir="rtl"; это правка в таблице стилей, а не в файле перевода.