Как добавить смену языка (локализацию) в игру на Unity. Официальный способ от Unity3D

Поділитися
Вставка
  • Опубліковано 11 гру 2024

КОМЕНТАРІ • 66

  • @vansoulishere
    @vansoulishere  4 роки тому +11

    10:32 - Здесь главная ошибка. Изменяйте кодировку на UTF-8 (без BOM) для любого языка!

  • @iwfttl
    @iwfttl 3 роки тому +2

    Наконец-то нашёл видос, где автор не изобретает велосипеды и ещё про ооп слышал. Респект

    • @vansoullive
      @vansoullive 3 роки тому +1

      Спасибо, брат

  • @klinted
    @klinted 3 роки тому +11

    Всем привет. Я как и все, столкнулся с проблемой смены языка, в рантайме. Вылечил так:
    1) В классе LocalizationManager, в методе LoadLocalizedText, удаляем сеттер переменной currentLanguage.
    2) И в сеттере CurrentLanguage добавляем вызов LoadLocalizedText метода и загоняем в параметры переменную currentLanguage.
    Success!!!

    • @adil42325
      @adil42325 3 роки тому +1

      здраствуй можешь по подробнее обяснить или показать код , у меня та же проблема

    • @egorych8162
      @egorych8162 3 роки тому +4

      @@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);
      }
      }
      остальные методы без изменений.

    • @boomindustries6807
      @boomindustries6807 3 роки тому

      @@egorych8162 спасибо, исправил ошибку, теперь на английский переключает, а обратно на русский нет. Знаешь как исправить?

    • @arturartur7344
      @arturartur7344 3 роки тому

      Привет, благодарю как автора, так и тебя за то что помогли! Все работает! Спасибо, что есть люди который помогают

    • @gusen14ka
      @gusen14ka 3 роки тому

      @@egorych8162 чеееееел, спасибо большое

  • @roxxel8167
    @roxxel8167 4 роки тому +9

    есть прекрасный бесплатный ассет Lean Localization

  • @Koffein4ikkk
    @Koffein4ikkk Рік тому +2

    А такой вопрос, действует ли перевод текста в одной сцене при учете того, что меняем мы язык в другой?

  • @artemcheck6332
    @artemcheck6332 3 роки тому +1

    И на андроид не хочет работать, в редакторе все ок. Код брал по ссылке

  • @georgii_
    @georgii_ 5 місяців тому

    А как сделать чтобы кнопки меняли размер и при нажатии на другую возвращали, а другая меняла?

  • @ДаниилМишин-й1у
    @ДаниилМишин-й1у 3 роки тому +1

    Оу,спасибо!!!!!!

  • @HorGonYT
    @HorGonYT 2 роки тому

    Кто нибудь - объясните пожалуйста что куда надо кидать, я не фига не понимаю с этого урока!

  • @artko20
    @artko20 2 роки тому

    Выбрал именно твой метод локализации через json, но не могу понять как сгруппировать на джсоне куски кода, ведь там не работают регионы и т. п. А так не хочется иметь километровый лист ключей. Кто-нибудь скажите как разделить код на регионы на json, чтобы можно было быстро найти по названию, быстро свернуть развернуть🙏

  • @ubahwin
    @ubahwin 4 роки тому +4

    Про юнити интересно делает гайды только Флатинго, и то, он больше на гея смахивает, делай контент по юнити, всё в твоих руках

    • @loga228
      @loga228 4 роки тому

      Ты абсолютно прав

  • @ИванСельдемиров-ю6е

    Не работает на Android использовал скрипты из описания

    • @artemcheck6332
      @artemcheck6332 3 роки тому

      Получилось сделать?

    • @aleksandrborzenko983
      @aleksandrborzenko983 2 роки тому

      Код ниже введите в метод 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);

  • @АлександрГлебов-х4я

    Использовал скрипты из описания, ничего не сработало, всё по видео делал(

  • @alex9990412
    @alex9990412 4 роки тому

    У меня текст обновляется после перезапуска игры в юнити. Я нажимаю на кнопку , текст не меняется. Перезапускаю игру ,нажимая на play . текст уже на другом языке

    • @alex9990412
      @alex9990412 4 роки тому

      как сделать как на видео

  • @akillus83
    @akillus83 2 роки тому

    Добрый день!
    А если нужно изменить текст не в компоненте Text, а текст который прописывается через скрипт, например: titleText.text = "ФРАЗА КОТОРУЮ НУЖНО ЛОКАЛИЗОВАТЬ"???
    И еще интересует как переводить текст который вводится в ручную в инспекторе при использовании публичного массива, например: public string[ ]???

    • @Cyneprepou
      @Cyneprepou Рік тому

      8 месяцев прошло, но может пригодится.
      В вашем случаем можно взять значение прямо из словаря, куда заливается json.
      titleText.text = словарь.получить значение(ключ)
      или как то так.

    • @minezi
      @minezi 9 місяців тому

      @@Cyneprepou а можешь поподробнее объяснить. Все не получается достать нужный текст из json для таких моментов.

    • @Cyneprepou
      @Cyneprepou 9 місяців тому

      @@minezi сори, давно бросил этим заниматься и уже не помню что к чему.)

  • @Cyneprepou
    @Cyneprepou Рік тому +2

    Спасибо за урок. я не сильно программист, но у вас слишком сложно сделано. можно упростить

  • @ubahwin
    @ubahwin 4 роки тому +2

    Почему про жизнь студента видео удалил? Почему давно не выпускаешь видео?

    • @vansoulishere
      @vansoulishere  4 роки тому +3

      Иван Вдовин Спасибо за поддержку. Мне как-то стало не хватать времени, но на самом деле, я просто поленился и бросил. Если что, сейчас я веду разработку другой игры но уже в команде.
      Я что-то так подумал, ты меня аж подтолкнул опять заняться ютубом, думаю стоит попробовать)

    • @ubahwin
      @ubahwin 4 роки тому +2

      @@vansoulishere офигеть я мотиватор

    • @ubahwin
      @ubahwin 4 роки тому +1

      Vansoul - Разработчик игр охуел?

    • @XOBEP_KHEXTOB
      @XOBEP_KHEXTOB 3 роки тому +1

      @@ubahwin Что не так

  • @urn4916
    @urn4916 4 роки тому

    не знаю почему, но на смартфоне не работает смена языка:( Есть кто может помочь?

    • @vansoulishere
      @vansoulishere  4 роки тому

      Попробуй использовать скрипты из описания к видео, там поправлен этот недочет

    • @urn4916
      @urn4916 4 роки тому +1

      @@vansoulishere меняется на английский, а обратно не хочет меняться без перезагрузки сцены :(

    • @artemcheck6332
      @artemcheck6332 3 роки тому

      @@urn4916 получилось сделать?

    • @Egor_Programmist
      @Egor_Programmist Рік тому

      @@urn4916 получилось исправить?

    • @Egor_Programmist
      @Egor_Programmist Рік тому

      @@artemcheck6332 а у тебя?

  • @artko20
    @artko20 3 роки тому +1

    Как-то непонятно, то на одном кадре есть скрипт то на другом кадре его уже нет, мелькает между разныи инспекторами и время меняется. Лучше бы чтото итогое показать чтобы было понятоно куда сами скрипты пихать

  • @maksimmurashko8342
    @maksimmurashko8342 2 роки тому

    почему WWW устарел?

    • @vansoullive
      @vansoullive 2 роки тому

      Сами Юнити пишут о том, что он устарел и не рекомендуется его использовать

  • @EndMan
    @EndMan 3 роки тому

    Ничего не работает (

  • @zjloo
    @zjloo 5 років тому +3

    Привет, у тебя очень удобный способ перевода. Но в коде есть пара ошибок, с которыми я столкнулся. в BtnSwitchLang.cs
    void OnButtonClick()
    {
    LocalizationManager.CurrentLanguage = name;
    }
    А в видео ты указал
    void OnButtonClick()
    {
    localizationManager.CurrentLanguage = name;
    }
    и вторая в LocalizationManager.cs
    OnLanguageChanged?.Invoke(this, EventArgs.Empty);
    хотя в самом видео
    OnLanguageChanged?.Invoke();
    Без этих исправлений не работает :(

    • @vansoulishere
      @vansoulishere  4 роки тому

      Спасибо огромное за исправления, я добавил их в код (который в описании) и немного внес изменения в класс LocalizationManager

    • @Khadgar-x5s
      @Khadgar-x5s 4 роки тому

      VS красным подчеркивает. Invoke не принимает ни одного аргумента

    • @Khadgar-x5s
      @Khadgar-x5s 4 роки тому

      @@vansoulishere не пойму в чем проблема. Язык меняется просто при запуске сцены или игры. А по нажатию на кнопки ничего не происходит.

    • @Khadgar-x5s
      @Khadgar-x5s 4 роки тому

      @@vansoulishere такое ощущение что что то не так с событием. Или тем местом где вызывается метод UpdateText

    • @vansoulishere
      @vansoulishere  4 роки тому

      @@Khadgar-x5s Скрипт из описания брал?

  • @DmitryBadmaev
    @DmitryBadmaev 2 роки тому

    мелкий шрифт на видео

  • @RomanUnreal
    @RomanUnreal 2 роки тому +1

    можно в милион раз легче)

  • @student7317
    @student7317 Рік тому

    Действительно легко мля(

  • @ОлегМашков-я8х
    @ОлегМашков-я8х 4 роки тому

    Оооочень мелко...

  • @71Arlekino
    @71Arlekino 7 місяців тому

    А че тогда таблиц еще не было? Устарел видосик судя по всему.

  • @extroedlive
    @extroedlive Рік тому

    Куча ошибок.