Показать сообщение отдельно
Старый 04.10.2017, 10:52
Appleman вне форума Посмотреть профиль Отправить личное сообщение для Appleman Найти все сообщения от Appleman
  № 8  
Ответить с цитированием
Appleman
 
Аватар для Appleman

Регистрация: Dec 2014
Адрес: Санкт-Петербург
Сообщений: 479
Друзья, хочу обновить тему. Почитал я то, что нашёл на родном языке по i18n, спасибо за наводку, но в подавляющем большинстве статей описываются лишь общие подходы. Удалось почерпнуть оттуда, что, например, помимо непосредственно языка не следует забывать о форматах дат и времени, валюте и т.п. Это всё прекрасно и понятно.

Из своих собственных изысканий пока пришёл к тому, что как и планировал изначально, полностью отделил игровую механику от текстов и вообще языка, создал классы-хранители с ассоциативными массивами, забитыми текстом, а между ними добавил классы-посредники с языковой логикой. Причём все обращения к классам-хранителям строятся с помощью методов с идентичной сигнатурой: Id-шник на входе, переменная типа String на выходе - ничего лишнего.

Вопросы у меня следующие:
1. Насколько я разобрался (пока только теоретически и в самых общих чертах) в интерфейсах, есть такое ощущение, что использование интерфейсов в частности помогает стандартизировать обмен информацией с классами в программе. Я правильно представляю, что мой пример с языком - это тот случай, где было бы оправдано внедрение единого интерфейса для всех классов, работающих с хранением и выдачей текстов? Или для разработчика-одиночки это будет ненужным усложнением (типа, держать в голове установленный самому для себя стандарт и не париться)?

2. Всё равно остаётся много вопросов не по общей организации (что нужно интернационализировать), а по практической реализации мультиязычности в приложении. Кто делал, поделитесь опытом плиз или кусок кода приведите, если не секрет. Мучаюсь выбором, то ли оставлять единые классы с языковой логикой, но внутри их писать отдельные методы для каждого языка, то ли отдельные классы делать... То же самое и с хранением инфо о выбранном языке: просто в виде идентификатора в каком-нибудь классе типа Config, или в виде пространства имён, чтобы потом писать методы с одинаковыми названиями, но вызывать с помощью пространства имён нужную версию. В общем, просьба помочь советом.

3. Есть понимание, что как уже было замечено многими коллегами здесь на форуме, хранить тексты в коде - не дело. Действительно, не дело. Думаю переходить к XML, чтобы и дополнительные языки подключались. А вот как это практически сделать, не понимаю? От слова совсем. Вопрос загрузки и чтения данных из файла XML не стоит - это много где описано с примерами. А вот как создавать сам файл и набивать туда данные? Руками это не делается. Значит, нужно писать отдельную программу или дополнительные классы в своей программе, которая будет из моих статических таблиц с идентификаторами "забивать" строковые значения в XML. Так? А если потом ещё какие-то текста добавить нужно... Совсем нет понимания технологии такой работы.