Всем привет. Я как и все, столкнулся с проблемой смены языка, в рантайме. Вылечил так: 1) В классе LocalizationManager, в методе LoadLocalizedText, удаляем сеттер переменной currentLanguage. 2) И в сеттере CurrentLanguage добавляем вызов LoadLocalizedText метода и загоняем в параметры переменную currentLanguage. Success!!!
@@adil42325 Здесь так пишешь. public void LoadLocalizedText(string langName) { string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json"; string dataAsJson; if (Application.platform == RuntimePlatform.Android) { WWW reader = new WWW(path); while (!reader.isDone) { } dataAsJson = reader.text; } else { dataAsJson = File.ReadAllText(path); } LocalizationData loadedData = JsonUtility.FromJson(dataAsJson); localizedText = new Dictionary(); for (int i = 0; i < loadedData.items.Length; i++) { localizedText.Add(loadedData.items[i].key, loadedData.items[i].value); } PlayerPrefs.SetString("Language", langName); isReady = true; OnLanguageChanged?.Invoke(); } А здесь так. public string CurrentLanguage { get { return currentLanguage; } set {
PlayerPrefs.SetString("Language", value); currentLanguage = PlayerPrefs.GetString("Language"); LoadLocalizedText(currentLanguage); } } остальные методы без изменений.
Выбрал именно твой метод локализации через json, но не могу понять как сгруппировать на джсоне куски кода, ведь там не работают регионы и т. п. А так не хочется иметь километровый лист ключей. Кто-нибудь скажите как разделить код на регионы на json, чтобы можно было быстро найти по названию, быстро свернуть развернуть🙏
Код ниже введите в метод LoadLocalizedText(string langName) класса LocalizationManager. string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json"; string dataAsJson; if (Application.platform == RuntimePlatform.Android) { path = Path.Combine(Application.streamingAssetsPath, "Languages/" + langName + ".json"); WWW reader = new WWW(path); while (!reader.isDone) { } dataAsJson = reader.text; } else { dataAsJson = File.ReadAllText(path); } Введите его в самое начало до строки LocalizationData loadedData = JsonUtility.FromJson(dataAsJson);
У меня текст обновляется после перезапуска игры в юнити. Я нажимаю на кнопку , текст не меняется. Перезапускаю игру ,нажимая на play . текст уже на другом языке
Добрый день! А если нужно изменить текст не в компоненте Text, а текст который прописывается через скрипт, например: titleText.text = "ФРАЗА КОТОРУЮ НУЖНО ЛОКАЛИЗОВАТЬ"??? И еще интересует как переводить текст который вводится в ручную в инспекторе при использовании публичного массива, например: public string[ ]???
8 месяцев прошло, но может пригодится. В вашем случаем можно взять значение прямо из словаря, куда заливается json. titleText.text = словарь.получить значение(ключ) или как то так.
Иван Вдовин Спасибо за поддержку. Мне как-то стало не хватать времени, но на самом деле, я просто поленился и бросил. Если что, сейчас я веду разработку другой игры но уже в команде. Я что-то так подумал, ты меня аж подтолкнул опять заняться ютубом, думаю стоит попробовать)
Как-то непонятно, то на одном кадре есть скрипт то на другом кадре его уже нет, мелькает между разныи инспекторами и время меняется. Лучше бы чтото итогое показать чтобы было понятоно куда сами скрипты пихать
Привет, у тебя очень удобный способ перевода. Но в коде есть пара ошибок, с которыми я столкнулся. в BtnSwitchLang.cs void OnButtonClick() { LocalizationManager.CurrentLanguage = name; } А в видео ты указал void OnButtonClick() { localizationManager.CurrentLanguage = name; } и вторая в LocalizationManager.cs OnLanguageChanged?.Invoke(this, EventArgs.Empty); хотя в самом видео OnLanguageChanged?.Invoke(); Без этих исправлений не работает :(
10:32 - Здесь главная ошибка. Изменяйте кодировку на UTF-8 (без BOM) для любого языка!
Наконец-то нашёл видос, где автор не изобретает велосипеды и ещё про ооп слышал. Респект
Спасибо, брат
Всем привет. Я как и все, столкнулся с проблемой смены языка, в рантайме. Вылечил так:
1) В классе LocalizationManager, в методе LoadLocalizedText, удаляем сеттер переменной currentLanguage.
2) И в сеттере CurrentLanguage добавляем вызов LoadLocalizedText метода и загоняем в параметры переменную currentLanguage.
Success!!!
здраствуй можешь по подробнее обяснить или показать код , у меня та же проблема
@@adil42325
Здесь так пишешь.
public void LoadLocalizedText(string langName)
{
string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json";
string dataAsJson;
if (Application.platform == RuntimePlatform.Android)
{
WWW reader = new WWW(path);
while (!reader.isDone) { }
dataAsJson = reader.text;
}
else
{
dataAsJson = File.ReadAllText(path);
}
LocalizationData loadedData = JsonUtility.FromJson(dataAsJson);
localizedText = new Dictionary();
for (int i = 0; i < loadedData.items.Length; i++)
{
localizedText.Add(loadedData.items[i].key, loadedData.items[i].value);
}
PlayerPrefs.SetString("Language", langName);
isReady = true;
OnLanguageChanged?.Invoke();
}
А здесь так.
public string CurrentLanguage
{
get
{
return currentLanguage;
}
set
{
PlayerPrefs.SetString("Language", value);
currentLanguage = PlayerPrefs.GetString("Language");
LoadLocalizedText(currentLanguage);
}
}
остальные методы без изменений.
@@egorych8162 спасибо, исправил ошибку, теперь на английский переключает, а обратно на русский нет. Знаешь как исправить?
Привет, благодарю как автора, так и тебя за то что помогли! Все работает! Спасибо, что есть люди который помогают
@@egorych8162 чеееееел, спасибо большое
есть прекрасный бесплатный ассет Lean Localization
А такой вопрос, действует ли перевод текста в одной сцене при учете того, что меняем мы язык в другой?
Да
И на андроид не хочет работать, в редакторе все ок. Код брал по ссылке
А как сделать чтобы кнопки меняли размер и при нажатии на другую возвращали, а другая меняла?
Оу,спасибо!!!!!!
Кто нибудь - объясните пожалуйста что куда надо кидать, я не фига не понимаю с этого урока!
Тяжело быть без мозгов.
Выбрал именно твой метод локализации через json, но не могу понять как сгруппировать на джсоне куски кода, ведь там не работают регионы и т. п. А так не хочется иметь километровый лист ключей. Кто-нибудь скажите как разделить код на регионы на json, чтобы можно было быстро найти по названию, быстро свернуть развернуть🙏
Про юнити интересно делает гайды только Флатинго, и то, он больше на гея смахивает, делай контент по юнити, всё в твоих руках
Ты абсолютно прав
Не работает на Android использовал скрипты из описания
Получилось сделать?
Код ниже введите в метод LoadLocalizedText(string langName) класса LocalizationManager.
string path = Application.streamingAssetsPath + "/Languages/" + langName + ".json";
string dataAsJson;
if (Application.platform == RuntimePlatform.Android)
{
path = Path.Combine(Application.streamingAssetsPath, "Languages/" + langName + ".json");
WWW reader = new WWW(path);
while (!reader.isDone) { }
dataAsJson = reader.text;
}
else
{
dataAsJson = File.ReadAllText(path);
}
Введите его в самое начало до строки
LocalizationData loadedData = JsonUtility.FromJson(dataAsJson);
Использовал скрипты из описания, ничего не сработало, всё по видео делал(
У меня текст обновляется после перезапуска игры в юнити. Я нажимаю на кнопку , текст не меняется. Перезапускаю игру ,нажимая на play . текст уже на другом языке
как сделать как на видео
Добрый день!
А если нужно изменить текст не в компоненте Text, а текст который прописывается через скрипт, например: titleText.text = "ФРАЗА КОТОРУЮ НУЖНО ЛОКАЛИЗОВАТЬ"???
И еще интересует как переводить текст который вводится в ручную в инспекторе при использовании публичного массива, например: public string[ ]???
8 месяцев прошло, но может пригодится.
В вашем случаем можно взять значение прямо из словаря, куда заливается json.
titleText.text = словарь.получить значение(ключ)
или как то так.
@@Cyneprepou а можешь поподробнее объяснить. Все не получается достать нужный текст из json для таких моментов.
@@minezi сори, давно бросил этим заниматься и уже не помню что к чему.)
Спасибо за урок. я не сильно программист, но у вас слишком сложно сделано. можно упростить
Почему про жизнь студента видео удалил? Почему давно не выпускаешь видео?
Иван Вдовин Спасибо за поддержку. Мне как-то стало не хватать времени, но на самом деле, я просто поленился и бросил. Если что, сейчас я веду разработку другой игры но уже в команде.
Я что-то так подумал, ты меня аж подтолкнул опять заняться ютубом, думаю стоит попробовать)
@@vansoulishere офигеть я мотиватор
Vansoul - Разработчик игр охуел?
@@ubahwin Что не так
не знаю почему, но на смартфоне не работает смена языка:( Есть кто может помочь?
Попробуй использовать скрипты из описания к видео, там поправлен этот недочет
@@vansoulishere меняется на английский, а обратно не хочет меняться без перезагрузки сцены :(
@@urn4916 получилось сделать?
@@urn4916 получилось исправить?
@@artemcheck6332 а у тебя?
Как-то непонятно, то на одном кадре есть скрипт то на другом кадре его уже нет, мелькает между разныи инспекторами и время меняется. Лучше бы чтото итогое показать чтобы было понятоно куда сами скрипты пихать
почему WWW устарел?
Сами Юнити пишут о том, что он устарел и не рекомендуется его использовать
Ничего не работает (
Получилось сделать?
Привет, у тебя очень удобный способ перевода. Но в коде есть пара ошибок, с которыми я столкнулся. в BtnSwitchLang.cs
void OnButtonClick()
{
LocalizationManager.CurrentLanguage = name;
}
А в видео ты указал
void OnButtonClick()
{
localizationManager.CurrentLanguage = name;
}
и вторая в LocalizationManager.cs
OnLanguageChanged?.Invoke(this, EventArgs.Empty);
хотя в самом видео
OnLanguageChanged?.Invoke();
Без этих исправлений не работает :(
Спасибо огромное за исправления, я добавил их в код (который в описании) и немного внес изменения в класс LocalizationManager
VS красным подчеркивает. Invoke не принимает ни одного аргумента
@@vansoulishere не пойму в чем проблема. Язык меняется просто при запуске сцены или игры. А по нажатию на кнопки ничего не происходит.
@@vansoulishere такое ощущение что что то не так с событием. Или тем местом где вызывается метод UpdateText
@@Khadgar-x5s Скрипт из описания брал?
мелкий шрифт на видео
можно в милион раз легче)
как?
Действительно легко мля(
Оооочень мелко...
А че тогда таблиц еще не было? Устарел видосик судя по всему.
Куча ошибок.