Программирование: C#: Загрузка разных локализайий.

Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение Vasaka »



Нужна обработка нескольких языков.... хранить данные думаю стоит в XML

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

Собственно что нужно реализовать....
1. поиск файлов в папке (для каждого языка своя папка)
2. считывание данных из всех файлов (нужного нам типа) в папке в массив (string)
3. Массив двухмерный.... первое поле название элемента (заголовок главного меню), второе поле текст
Или реализовать выборку нужного элемента массива по другому
4. По умолчанию массив должен заполняться в программе (если не будет файлов ресурсов), сохранение массива в файл (для последующего редактирования).... Если в файле не хватает каких то строк, то недостающие строки заполняются в программе (т.е. если у вас файл с русским на половину обрезан (от старой версии например), то в игре будет половина на английском, половина на русском)...
5. Поиск в программе индекса массива в котором расположено название элемента "заголовок главного меню", для того чтобы потом считать данные из массива
Или при изменении пункта 3, изменить и здесь.

Код должен быть совместим с .NET 2.0.

Достаточно довольно простой реализации.... есть две три строки, сохраняем в файл, считываем из файла, заполняем массив из файла, присваиваем переменной нужное значение из массива..


если кто знающий попадется пусть подправят... главное получить в конце строковую переменную с текстом...
ну и чтобы файлы по структуре были такие... т.е. не было файлов с несколькими языками и не было как 4-й циве, одно поле пропустил весь интерфейс без текста остался... остальное на усмотрения того кто будет разрабатывать...[B][SIZE]Программирование: C#: Загрузка разных локализайий.[/SIZE][/B]

от Snake_B


В процессе разработки прототипа вроде начинают прорисовываться элементы, которые можно разработать отдельно, при чем в обычной Visual Studio, а не в Unity, а потом уже добавить в игру....


Что требуется? Требуется загрузка разных XML файлов в зависимости от установленного языка локализации.
Scampada
Сообщения: 51
Регистрация: 04 дек 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение Scampada »

Банально файл с загнанными в него строками?
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение Vasaka »

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

Там же Витя всё по пунктам расписал.
Если что-то конкретное не понятно, напиши, я ему перекину, а потом размещу ответ.
Аватара пользователя
Snake_B
MOSC Team
Сообщения: 285
Регистрация: 25 янв 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение Snake_B »

> Ну, насколько я вижу, сначала программа должна узнать какие папки существуют

распишу по моим другим программам... есть папка language... в ней лежат папки "English" , "Russian".... нужно в папке language найти все папки которые есть (это кстати нужно и при создании списка языков для выбора)...

> Потом осуществить выбор нужной
игре надо передать список языков доступных, она вернет выбранный язык.... из той папки название какой она вернет, считать данные... плюс нужен отдельный файл (для каждого языка свой) в котором будет писаться название этого языка на этом самом языке...
ну чтобы был список:
1. English
2. Русский
Изображение
Scampada
Сообщения: 51
Регистрация: 04 дек 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение Scampada »

Snake_B писал(а): 11 дек 2011, 01:07плюс нужен отдельный файл (для каждого языка свой) в котором будет писаться название этого языка на этом самом языке...

Зачем? В файле с названиями пунктов меню (самом маленьком по размеру) первым элементом можно поставить название языка. При считывании языков программа будет читать первые несколько байт этого файла, это и будет название языка. Нафиг куча файлов с одним только названием?)
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение Vasaka »

Scampada писал(а): 12 дек 2011, 19:54Зачем? В файле с названиями пунктов меню (самом маленьком по размеру) первым элементом можно поставить название языка. При считывании языков программа будет читать первые несколько байт этого файла, это и будет название языка. Нафиг куча файлов с одним только названием?)

Если языковых файлов для одного языка будет больше чем один, а их будет больше. Тогда придётся в каждом файле писать эту строку.
Поэтому лучше один файл. А ещё лучше начинающийся с подчёркивания, чтобы он в этой папке всегда был первым.

Всё это написано в Тех Задании.
Что называется: "Берите, делайте". Потом Главный программист подскажет что подправить, исправить.
Аватара пользователя
Snake_B
MOSC Team
Сообщения: 285
Регистрация: 25 янв 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение Snake_B »

Scampada писал(а): 12 дек 2011, 19:54Зачем? В файле с названиями пунктов меню (самом маленьком по размеру) первым элементом можно поставить название языка. При считывании языков программа будет читать первые несколько байт этого файла, это и будет название языка. Нафиг куча файлов с одним только названием?)


да... в принципе отдельный файл не обязателен... можно так:
Languages\English\English.xml
в нём первым пунктом название... остальное содержимое по желанию.... может мы все данные языка в него запихаем... а может в нем кроме названия больше ни чего не будет....

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

в принципе я думаю такая возможность не будет лишней и в МОСК, сильно она его не усложнит, а мало ли потом где она нам может пригодиться...
Изображение
krupennikov
Сообщения: 53
Регистрация: 25 янв 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение krupennikov »

Вот вам на рассмотрение проект на .NET 2.0 сделанный мной в студии 2010. Класс XmlDictionary можно сделать отдельной библиотекой. Методы класса XmlDictionary:

XmlToDictionary(string path) - читает все файлы xml из папки path и возвращает как массив типа Dictionary<string ключ, string значение>, то есть массив со значениями ключей, для каждого ключа свое значение.

DictionaryToXml(Dictionary<string, string> dictionary, string pathWithName) - сохраняет массив типа Dictionary<string ключ, string значение> в файл pathWithName и возвращает значение true при удачном сохранении, иначе значение false.

GetSourceDictionary() - возвращает пример массива типа Dictionary<string ключ, string значение>.

GetLanguages(string directoryPath) - возвращает тип List<string> как список папок расположенных в папке directoryPath.

GetValueFromKey(Dictionary<string, string> dictionary, string key) - возвращает значение ключа key массива dictionary. Если значение не найдено, возвращает ключ в виде текста.
Аватара пользователя
Vasaka
MOSC Team
Сообщения: 3195
Регистрация: 24 янв 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение Vasaka »

krupennikov писал(а): 23 дек 2011, 14:19Вот вам на рассмотрение проект на .NET 2.0 сделанный мной в студии 2010. Класс XmlDictionary можно сделать отдельной библиотекой. Методы класса XmlDictionary:

XmlToDictionary(string path) - читает все файлы xml из папки path и возвращает как массив типа Dictionary<string ключ, string значение>, то есть массив со значениями ключей, для каждого ключа свое значение.

DictionaryToXml(Dictionary<string, string> dictionary, string pathWithName) - сохраняет массив типа Dictionary<string ключ, string значение> в файл pathWithName и возвращает значение true при удачном сохранении, иначе значение false.

GetSourceDictionary() - возвращает пример массива типа Dictionary<string ключ, string значение>.

GetLanguages(string directoryPath) - возвращает тип List<string> как список папок расположенных в папке directoryPath.

GetValueFromKey(Dictionary<string, string> dictionary, string key) - возвращает значение ключа key массива dictionary. Если значение не найдено, возвращает ключ в виде текста.

Отлично. :D
Витя скоро должен объявиться. В районе нового года обещал.
krupennikov
Сообщения: 53
Регистрация: 25 янв 2011

Программирование: C#: Загрузка разных локализайий.

Сообщение krupennikov »

Для тех, кто хочет просто запустить программу и поэкспериментировать с xml файлами, выкладываю exe файл. Для добавления нового языка достаточно создать новую папку в папке Languages с содержанием нужного/ных xml файла/ов подобных имеющимся. Можно даже просто переименовать папку "Russian" на "Русский". Программа отреагирует при запуске
Закрыто