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