Поддержка локализации из GoogleDocs

GoogleDocs (GoogleSheets) могут являться источниками данных для локализации, настроек или игрового баланса. Для их импорта и разбора существует множество пакетов, но все эти решения достаточно объемные и ориентированы исключительно на работу в редакторе Unity. Что, если нам хочется что-то подправить на лету и не ждать несколько минут, пока пересоберется новый билд с новыми данными?
Разбор данных
Самым простым, оптимальным по размеру и поддерживаемым всеми табличными редакторами является CSV. Данные в нем представлены в виде строк, составленных из значений ячеек, разделенных запятыми.
Формат поддерживает UTF8, кавычки и запятые в качестве значений и не имеет дополнительного мусора в виде обязательных отступов, скобок и т.д.
Пакет Leopotam.Serialization.Csv обеспечивает поддержку разбора “сырых” CSV данных в коллекции, с которыми уже можно работать из кода. Допустим, у нас есть следующая таблица:
| 11 | 12 | 13 |
| 21 | 22 | 23 |
Разбор в таблицу
Данные могут быть разобраны в таблицу:
1 | string csv = "...csv данные..."; |
Этот вариант может использоваться для работы с данными, когда порядок важен, но нет уникального ключа для доступа к каждой строке.
Разбор в словарь значений
Данные могут быть разобраны в набор пар “Ключ/Значение” - первый столбец считается ключом, второй значением, остальные столбцы игнорируются:
1 | string csv = "...csv данные..."; |
Этот вариант может быть использован для хранения настроек, когда первый столбец является именем настройки, а второй - ее значением.
Разбор в словарь списков
Данные могут быть разобраны в набор пар “Ключ/Значение” - первый столбец считается ключом, второй и последующие являются списком-значением:
1 | string csv = "...csv данные..."; |
Этот вариант может использоваться для локализации или для работы с любыми данными, где необходима адресация в виде имени-ключа к коллекции столбцов.
Локализация
Используя предыдущий пакет, мы можем загружать данные и интерпретировать их как локализацию, где первый столбец является ключом, а остальные столбцы содержат переводы на разные языки. Первая строчка является заголовком и содержит названия языков:
| KEY | Russian | English |
|---|---|---|
| title | Заголовок | Title |
| desc | Описание | Description |
Пакет Leopotam.Localization обеспечивает разбор CSV-данных и поддержку получения локализованных данных на основе текущего языка и Категории. Категория - это по сути отдельная страница в GoogleSheets, которая никак не пересекается с другими страницами и может содержать ключи с такими же именами. Отдельным требованием пакета является именование строки заголовка ключом KEY.
Инициализация данных
1 | // Стартовый язык. |
Запрос переводов
1 | // Запрос локализации для текущего языка. |
Если строки с указанным ключом не будет в наличии - в качестве перевода вернется сам ключ.
Загрузка данных из GoogleDocs
CSV-данные могут храниться в виде текстовых ресурсов в проекте, так и находиться на удаленном сервере, например, GoogleDocs. Их загрузку в рантайме обеспечивает пакет Leopotam.GoogleDocs.Unity - для работы достаточно скопировать адрес из строки браузера и указать имя страницы:
1 | // Прямая ссылка на документ. |