Вопрос о локализации игры

Форум для самых маленьких, а так же тех, кому недосуг читать справку самостоятельно.

Вопрос о локализации игры

Сообщение JodyRedlot 17 фев 2019, 11:42

Приветствую. Столкнулся с проблемой касательно локализации. В первую очередь скажу, что все тексты будут храниться в .txt-файлах и парситься при загрузке игры и изменении языка игры. При парсинге должна будет заполняться структура, где хранятся все игровые строки:
Синтаксис:
Используется csharp
public struct Strings
{
        string NewGame, Options, Exit, Inspect, Switch;
}


Сам парсинг работает вроде как более, чем хорошо:
- Содержимое файла, где первое слово - ключ (совпадает с именем string-а в коде), второе - локализованное слово, если можно так выразиться:
NewGame#Новая игра
Options#Настройки
Exit#Выход


- Парсер:
Синтаксис:
Используется csharp
StreamReader reader = new StreamReader("Assets/Resources/test.txt");
while(!reader.EndOfStream)
{
        string str = reader.ReadLine();
                       
        string[] keyNword = str.Split(new char[] {'#', '\n'} );
        string output = string.Format("Key - {0}, word - {1}", keyNword[0], keyNword[1]);
        Debug.Log(output);
}
        reader.Close();


Теперь вопрос к знатокам: можно ли как-то при каждой итерации цикла заполнять подряд строки структуры Strings? Заранее благодарю.
зы. строковый массив не предлагать
JodyRedlot
UNец
 
Сообщения: 15
Зарегистрирован: 17 мар 2018, 03:51

Re: Вопрос о локализации игры

Сообщение Jarico 17 фев 2019, 12:55

Синтаксис:
Используется csharp

using System;
using System.Linq;
using UnityEngine;

public class Localication
{
//номер текста
public int loc_id = -1;
public string loc_text = "текст локализации";
}


public class LocalizationManager
{
public static List<Localization> m_Loc = new List<Localization>();

public static string GetLocalizationString(int loc_id)
{
return m_Loc.First(x => loc_id == x.loc_id).loc_text;
}

public static void Init()
{
//загружаешь из файла текст в формате json
m_Loc  = JsonUtility.FromJson< List<Localization>>(текст из файла);
}
}
 



Писал в блокноте но вроде должно работать...


Для редактора можно написать небольшую утилиту для оперативного добавления строк локализации...
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: Вопрос о локализации игры

Сообщение Woolf 17 фев 2019, 22:04

Странный малость подход. Зачем вам структура?
И чем вам не подходит Dictionary, он как раз и есть "ключ-значение"
Ну и в текстовых файлах принято разделять ключ/значение через =, а не через #
Через равно легче читается и понятнее структура. Хотя, конечно, это дело вкуса.
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59

Re: Вопрос о локализации игры

Сообщение Jarico 17 фев 2019, 23:02

Woolf писал(а):Через равно легче читается и понятнее структура. Хотя, конечно, это дело вкуса.


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

Вот если что еще один парсер... .INI
Синтаксис:
Используется csharp
https://stackoverflow.com/questions/217902/reading-writing-an-ini-file


Woolf писал(а):Странный малость подход. Зачем вам структура?


Можно дополнительную переменную добавить и записать в файл без нарушения структуры в виде Json
Github: _https://github.com/redheadgektor
Discord: Конь! Чаю!#9382 (сижу редко)
YouTube: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Telegram: _https://t.me/redheadgektor
Аватара пользователя
Jarico
Адепт
 
Сообщения: 1084
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: Вопрос о локализации игры

Сообщение JodyRedlot 18 фев 2019, 04:08

Woolf писал(а):И чем вам не подходит Dictionary, он как раз и есть "ключ-значение"

Да, спасибо большое. То, что нужно. Быть может, кому пригодится.
Синтаксис:
Используется csharp
public static Dictionary<string, string> s = new Dictionary<string, string>(0);
...
public static void LoadLang()
{
        StreamReader reader = new StreamReader("Assets/Resources/test.txt");
               
        while(!reader.EndOfStream)
        {
                string str = reader.ReadLine();
                string[] keyNword = str.Split(new char[] {'#', '\n'} );
                s.Add(keyNword[0], keyNword[1]);
        }
   
       reader.Close();
}
...
Debug.Log(s["NewGame"]);//Вывод: Новая игра
 


Ну и в текстовых файлах принято разделять ключ/значение через =, а не через #

Я решил использовать наиболее редкоиспользуемый символ для разделения, как мне кажется.
JodyRedlot
UNец
 
Сообщения: 15
Зарегистрирован: 17 мар 2018, 03:51

Re: Вопрос о локализации игры

Сообщение Woolf 18 фев 2019, 06:41

Я решил использовать наиболее редкоиспользуемый символ для разделения, как мне кажется.

Будете ручками ланг-файлы редактировать (а вы будете), упоретесь )) В кашу же всё сольётся. Не нужно создавать на ровном месте себе проблему, используйте "равно", тем более, что в этом случае можно и какие-либо библиотечки для чтения ini поюзать, ну, или хоть и тот же самый JSON
Разработчик theFisherOnline - там, где клюёт
Разработчик Atom Fishing II - Первая 3D MMO про рыбалку
Разработчик Atom Fishing - Рыбалка на поплавок, донку, нахлыст, блесну в постъядерный период.
Аватара пользователя
Woolf
Адепт
 
Сообщения: 7179
Зарегистрирован: 02 мар 2009, 16:59


Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Google [Bot], Yandex [Bot] и гости: 22


cron