Страница 1 из 2

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

Добавлено: 10 дек 2011, 21:04
Vasaka


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

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

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

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

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


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

от Snake_B


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


Что требуется? Требуется загрузка разных XML файлов в зависимости от установленного языка локализации.

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

Добавлено: 10 дек 2011, 22:53
Scampada
Банально файл с загнанными в него строками?

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

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

Там же Витя всё по пунктам расписал.
Если что-то конкретное не понятно, напиши, я ему перекину, а потом размещу ответ.

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

Добавлено: 11 дек 2011, 01:07
Snake_B
> Ну, насколько я вижу, сначала программа должна узнать какие папки существуют

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

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

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

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

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

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

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

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

Всё это написано в Тех Задании.
Что называется: "Берите, делайте". Потом Главный программист подскажет что подправить, исправить.

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

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


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

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

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

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

Добавлено: 23 дек 2011, 14:19
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. Если значение не найдено, возвращает ключ в виде текста.

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

Добавлено: 23 дек 2011, 15:39
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
Витя скоро должен объявиться. В районе нового года обещал.

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

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