Понедельник, 10 Мая 2021, 08:42

Приветствую Вас Гость

[ Новые сообщения · Игроделы · Правила · Поиск ]
  • Страница 1 из 1
  • 1
Модератор форума: beril  
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Локализация (Внедрение нескольких языков в интерфейс)
Локализация
pReconДата: Пятница, 22 Апреля 2016, 10:34 | Сообщение # 1
частый гость
Сейчас нет на сайте
Ребят, расскажите пожалуйста, про рациональные способы создания локализации.
Можно просто менять значение некоего плеерПрефса (например: англ=0, рус=1, исп=2), потом в каждом скрипте на Эвейке подтягивать это значение, и менять текст в элементах ГУИ из каких-нибудь стринговых переменных, меняющихся в зависимости от значения плеерпрефс.
Мне такой подход кажется не слишком уж быстродейственным, так как придется очень много дублировать один и тот же код, только с разным текстом элементов.
Какие еще способы можно использовать?
ShortKedrДата: Пятница, 22 Апреля 2016, 10:44 | Сообщение # 2
Renword Studio
Сейчас нет на сайте
Создай синглтон класс, который будет локализацией управлять. Добавь функции вроде Init, Load, SetLocale и прочее. Будут например у тебя в нём подклассы с строчными переменными по подкатегориям(Меню, настройки, игра, квесты, персонажи и т.д. и т.п.).

То есть из этих переменных ты уже будешь вытягивать готовую локализацию, а значениями этих переменных можно будет управлять благодаря функциями определённым.
Например SetLocale("English") - присвоить строчным переменным значения локализации English. Когда юзер будет язык переключать в настройках.

Причём я бы посоветовал сделать отдельный класс Locale, где будут все эти переменные. А в управляющем классе (LocaleDirector) добавить

Код
public Locale mainLocale = new Locale(); // Главная локализация, из неё будут браться все данные
public List<Locale> locales = new List<Locale>(); // список всех локализаций. Можно даже для удобства применить Dictionary, что бы например по имени вызывать

// public Dictionary<string, Locale> locales = new Dictionary<string, Locale>()


У меня например в рпг игрушке в системе вещей есть класс библиотеки вещей с очень важной фишкой, для быстрого и удобного вызова вещей в игру:
Код

public List<Item> library = new List<Item>(); // список вещей

public Dictionary<long, Item> idDictionary; //Словарик вещей для быстрого доступа по id. Инициализируется во время экрана загрузки
public Dictionary<string, Item> nameDictionary; //Словарик вещей для быстрого доступа по имени. Инициализируется во время экрана загрузки


Сообщение отредактировал ShortKedr - Пятница, 22 Апреля 2016, 10:55
berilДата: Пятница, 22 Апреля 2016, 16:07 | Сообщение # 3
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Просто выноси всю локализацию во внешние текстовые файлы. И переводить легче будет с языка на другой язык и редактировать просто (особенно JSON)



Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
TLTДата: Пятница, 22 Апреля 2016, 16:27 | Сообщение # 4
Сейчас нет на сайте
Лучше сделать текст с адресными метками и подгружать тексты по этим адресам из отдельного файла.
А в опциях сделать возможность выбора языков путём подмены файла с текстом.


Дао, выраженное словами, не есть истинное Дао.
seamanДата: Пятница, 22 Апреля 2016, 22:09 | Сообщение # 5
старожил
Сейчас нет на сайте
AssetStore

Сообщение отредактировал seaman - Пятница, 22 Апреля 2016, 22:09
berilДата: Пятница, 22 Апреля 2016, 22:22 | Сообщение # 6
Я не ленивый, я — энергосберегающий
Сейчас нет на сайте
Цитата seaman ()
AssetStore

Но там ведь все равно нужно все руками заполнять ? Каждое строку переключать и руками вводить.
Как по мне лучше все тексты держать в файлах и в отдельной папке. Многие агенства по переводам умеют работать с JSON и XML. ты просто отдаешь им папку с текстами и получаешь потом локализацию на нужном языке




Накодил? Убери за собой!
Инвентарь в Unity(UI)
Инвентарь в Unity(GUI)
TLTДата: Суббота, 23 Апреля 2016, 01:42 | Сообщение # 7
Сейчас нет на сайте
Цитата beril ()
умеют работать с JSON и XML.

для этого несложно и софт написать для удобной работы с данными...


Дао, выраженное словами, не есть истинное Дао.
seamanДата: Суббота, 23 Апреля 2016, 10:04 | Сообщение # 8
старожил
Сейчас нет на сайте
ДА фри с XML или JSON почему то не работают. Платные такие есть. Уже за 2 бакса есть. - XMLocalization
NightLordДата: Суббота, 23 Апреля 2016, 11:18 | Сообщение # 9
участник
Сейчас нет на сайте
Заводишь гугл таблицу. Первая колонка - ключ, последующие на каждый требуемый язык.
Импортируешь в cvs, для загрузки в проекте есть куча готовых парсеров. Причем бесплатных.

Пишешь статичный клас по загрузке данных. Пишешь компонент, который в Awake кеширует текстовый компонент и подписывается на изменения локализации в статичном классе. Он будет иметь ключ, по которому и делает запрос на текущую локализацию. При первом запросе на локализацию, статичный класс проводит инициализацию и подгружает сохраненную локализацию, если данных пока нет, то локализацию девайса, если и тут в пролете, то английскую. При смене локализации в статичном классе, он вызывает событие смены локализации. В итоге все инициализированные компоненты получат сообщение по смене и запросят новые данные по своему ключу.


Часто стоишь в пробке или очереди? Эта игра поможет скоротать время 7Bricks - головоломка с цифрами.
Форум игроделов » Движки для разработки игр и сложные системы разработки » Unity » Локализация (Внедрение нескольких языков в интерфейс)
  • Страница 1 из 1
  • 1
Поиск:

Все права сохранены. GcUp.ru © 2008-2021 Рейтинг