Локализация
|
|
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 - головоломка с цифрами.
|
|
| |