Попытка реализовать мультиязычность

Ну и решено :slight_smile: . Я как раз начал постепенно переводить файлы. Получится чисто русская сборка :smiley: . Можно пождать меня, а можно грубо начать тырить переводы с cataclysm.dfwk.ru/wiki :slight_smile: .Там огромная часть предметов уже переведена.

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

[center]comestibles.json[/center] переведено 1 из 314
[table]
[tr][td]Английский[/td][td]Русский[/td][/tr]
[tr][td][right]water||[/right][/td][td]вода[/td][/tr]
[tr][td][right]Water, the stuff of life, the best thirst-quencher available.||[/right][/td][td]Вода это круто![/td][/tr]
[tr][td][right]clean water||[/right][/td][td]чистая вода[/td][/tr]
[tr][td][right]Fresh, clean water. Truly the best thing to quench your thirst.||[/right][/td][td]Это еще круче![/td][/tr]
[/table]

Приложены таблицы, которые могут помочь вынуть нужные графы из json и, если надо, запихнуть на форум.


Подготовка перевода.ods (26.3 KB)

Обработка json.ods (18.4 KB)

Ммм… Ну я уже просто чистым файлом пошёл :slight_smile: . Причём переименовываю пока только названия оО .
Ладушки-оладушки. Сейчас переформатнёмся.

p.s. А я и так на форуме собирался :slight_smile: …Если правильно понял…

Хотя с перевод прямо в сообщении я погорячился… Текста много, читать его неудобно. Лучше его файлами хранить, надо: скачал - прочитал - внес изменения - отправил. Все-таки праздным чтением тут не пахнет, это целенаправленное вычитывание.

Правка прямо в файлах, это плохо=) А прямо из таблиц несложно генерировать сразу языковой файл. Все-таки будем отставать от английской версии всегда. Да и править проще ресурсы, чем исходники.

Ну вот :slight_smile: . Тут есть тема. “Перевод игровых файлов”. Я туда хотел выкладывать файлы.
А насчёт вынуть оО … Я их очень легко всех вынул с помощью (например)
sed -n -e ‘s/."name":\ "//p’ tools.json | sed -n -e ‘s/",$//p’ > tools_names.txt Для названий
sed -n -e 's/.
"description":\ "//p’ tools.json | sed -n -e ‘s/",$//p’ > tools_descriptions.txt для описаний оО.

Можно было, впрочем, в один файл кинуть, чуть изменив команду…
Но в любом случае, это уже не таблица :slight_smile: .

Возьму таблицу и буду выкладывать туда оО …

//p.s.

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

[quote=“aiwant2tc, post:25, topic:1744”]sed -n -e ‘s/.“name”:\ “//p’ tools.json | sed -n -e 's/”,$//p’ > tools_names.txt Для названий
sed -n -e 's/.
“description”:\ "//p’ tools.json | sed -n -e ‘s/",$//p’ > tools_descriptions.txt для описаний оО.[/quote]
Спасибо за информацию, я узнал, что sed мультиплатформенный=)

Ну… Он как бы с самого начала был только для никсов :slight_smile: . Это потом вышел погулять оО.

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

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

Про раскладки сюда не писали, но я почитывал оО .
Можно, конечно, и помогать, и репозиторий создавать :slight_smile: . Больше людей, быстрее работа оО .

Можно и репку создать… Я вот создал уже оО . Хочу ошибку одну исправить. Орфографическую :smiley: . Научусь орудовать только оО. Минут 20…

Ну… из пары вопросов в чате (какие только смог спросить оО ).

[spoiler] Guys, may I ask some questions ? :slight_smile:
aiwant2tc: ask away
Basically, I want to know why multilanguage support is not impleneted yet oO
I mean, what obstacles should be eliminated oO
aiwant2tc: beacuse i18n and l10n is hard.
And because there are more pressing concerns.
But if we assume, that someone else will be occupied with the l10n
and i18n
So… The game should be rewritten in ncursesw or what oO
It’s a matter of implementing gettext.
And trawling through all of the source files and pulling all the literals out.
And replacing them with gettext calls.
And there are a lot of literals.
It’s just a lot of work, but probably not particularly difficult.
“loterals”
:smiley: … Then
Looks like we are on the right route oO
It’s likely not something that’s going to happen for the kickstarter version, probably after that.
Oh, hell, I know what I did wrong. I made a package called “site”, which was hiding the real site package.
yeah, the Kickstarter is also important : )
So… If we assume that we have all plain-text translated. I mean, all the text is translated. The next step would be implementing the gettext functions ?
aiwant2tc: implementing gettext comes first, I think.
But like I said, there’s also an issue with how to do l10n on item descriptions and other stuff from raws.
Multiple raws won’t work ?
Or…

  • aiwant2tc thinks of smth
    You wouldn’t want multiple raws – you might want raws not to contain displayable literals, but gettext keys.
    narc: well, in that case you could just make gettext keys from the item names.
    wito: Sounds about right.
  • aiwant2tc listens
    Probably item_name + “_name” and item_name + “_desc”, or something remotely similar.
    Also… casual system oO
    or case oO *
    Don’t remember the name oO
    narc: Well, it might be useful to be able to specify a name directly in the raws as well, telling the text system to not go looking for a translation.
    A Glock 19 is the same in every language.
    Right. Try gettext first, then fall back to the values we already have in the raws.
    This sounds reasonable.
    narc: nah, other way around.
    try the raws first.
    If it has a name in the raws, don’t gettext.
    Um?! I was thinking it more as a fallback for partial translations.
    The value in the raws would give some kind of value until one was added to the gettext data file.
    Besides, a Glock 19 is not the same in every language. aiwant2tc: Would you print “glock 19” transliterated to russian for us?
    For you ? o_O Transliterated it’d be: Глок 19
    Translated it’s like Glock-19
    Nah
    So, if it has a name in the raws, and that overrides gettext, it’s a fail.
    Глок-19
    With a minus
    Close enough.
    Also, translit.ru is pretty awesome.[/spoiler]

Парни, можно задать пару вопросов ? :slight_smile:
aiwant2tc: Валяй
В общем, я хочу узнать, почему поддержка многих языков ещё не была введена.
Я имею в виду, какие препятствия нужно устранить oO
aiwant2tc: Потому что i18n и l10n это сложно. //Интернационализация и локализация
И потому что есть более важные вещи
А если допустим, что кто-то другой будет заниматься l10n-ией
и i18n-ей
Тогда… Игра должна быть переписана на ncursesw или как оО
Это дело введения gettext
И перелопачивание всех исходников, вытаскиванием оттуда всех литералов
И заменой их на вызовы gettext
И там очень много литералов
Просто это ОЧЕНЬ много работы, но, в основном не сложной.
“лотералов” // лот = lot = много
:smiley: … Тогда
Похоже , что мы на правильном пути //В этот момент я не знал, что такое gettext :smiley:
Это не что-то такое, что появится в месте с Kickstarter версией, может быть, после того.
да, Kickstarter тоже важен :slight_smile:
Так… Если мы будет считать, что мы перевели весь “голый” текст. Следующим шагом будет введение gettext функций ? //теперь узнал оО.
aiwant2tc: введение gettext-ов должно быть первым шагом, я думаю.
Но как я уже сказал, ещё нужно разобраться, что делать с локализацией описаний предметов и других вещей из raws // json из data/raws он имел в виду оО
Много raws не сработают ?
Или…

  • aiwant2tc о чём-то думает
    Ты бы не хотел иметь много raw файлов, но мог бы захотеть, чтоб raws содержали не отображаемые литералы, а ключи gettext
    narc: Ну, в этом случае можно просто сделать gettext ключи из имён предметов.
    wito: Звучит правдоподобно
  • aiwant2tc слушает
    Может быть item_name + “_name” and item_name + “_desc”, или что-то отдалённо похожее.
    narc: Ну, может быть полезной возможность задавать имена прямо в raws, говоря текстовой системе не искать перевод.
    Glock 19 одинаков во всех языках.
    Правильно. Попробуй сначала gettext, потому вернись к значениям, что уже есть в raws.
    Звучит приемлимо.
    narc: не, другой способ.
    сначала попробовать raws.
    Если есть имя в raws, не вызывать gettext.
    Кхм?! Я думал об этом, как о запасном варианте для частичных переводов.
    Значение из raws будет давать какие-то значения, до тех пор, пока другое не было добавлено в gettext дата-файл.
    Кстати, Glock 19 НЕ одинаков на всех языка. aiwant2tc , не напишешь русскую транслитерацию Glock 19 для нас ?
    Для вас ? о_О Транслитерация будет: Глок 19 // я отходил, потому не сразу понял, о чём они.
    Переведённый вариант будет Glock-19
    Не
    То есть, если есть имя в raws, и оно перехватывает значение gettext, это провал.
    Глок-19
    C дефисом.
    Достаточно близко.
    Кстати, translit.ru довольно крут.

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

Я что-то пропустил из чата… Но да ладно :slight_smile: . Значит, недаром я говорил, что

Похоже , что мы на правильном пути

aiwant2tc, Сейчас поиграю с sdlcurse.cpp, подготовлю его и мне нужна будет сборка SDL под линуксом. Но проблема вывода русского текста там такая же как и в winsurse.cpp - они просто не выводятся программно.

Готово! Просьба сделать SDL сборку на Linux системе с заменой оригинальных файлов файлами из приложенного архива. И показать стартовый экран приложения, куда должен выводиться алфавит. Я сейчас проверну аналогичное действие под виндой и покажу результат.


RusTestFiles.7z (41.2 KB)

Логотип по прежнему наполовину “зохаван” :slight_smile: .
(То есть, символы для него нужные. А вместе с ними и рамочки для всплывающих сообщений… ну так, к слову оО)



Ну так логотипа часть отсутствует потому, что там две строки просто закомментированы, чтобы русский алфавит влез.
А вот с остальным вопрос. Я собрал SDL версию под Windows. Результат тот же. Английский алфавит вместо русского

Удалось получить русские буквы в SDL версии! Прикол в том, что SDL рассчитан на вывод юникода=)



Вот в общем-то что-то похожее на то, как хотели бы перевести игру разработчики. Есть i18n папка. В ней переводы. Есть класс, в котором инициализируется gettext. Есть папка, куда все переводы скомпилировались… Да gettext это!
Хотя и язык питоний, но всё достаточно “плоско”. И очень похоже на то, как бы это делалось в C++.

Ссылка на пример i18n с помощью gettext
https://pypi.python.org/pypi/typetrainer

p.s. То что зачёркнуто. Папка с файлами .po (нужная по сути только переводящим, а не программе) была в старых версиях.

Кхм… Помимо букв на title-лого, не отрисовываются и анимации (взрыв гранат, нюков и т.д.). Может, так как основная версия curses, а остальные её имитируют, начать с переделки curses… Но это мне придётся экспериментировать. Включить вместо ncurses -
ncursesw , как вариант, ибо парни не против этого оО . Плюс, ориентируясь на дебаги, узнать, что именно нужно переписать оО. Либо нужен кто-то, кто разбирается в курсах :slight_smile: .