Google Chrome
March 21

Ошибка с миграцией локали ru-RU в Google Chrome и как от нее избавиться

Это статья о том, как я боролся с последствиями некорректной миграции «ru-RU» на «ru» в Google Chrome.

Это статья для тех, у кого Chrome выглядит примерно так:



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

Под катом немного моих размышлений о причине ошибки и способ решения проблемы.

Симптоматика:

  • Веб-сайты имеют обыкновение отображаться на языке отличном от выбранного в настройках
  • Проблема проявляется после того как осуществлен вход в пользовательский аккаунт и выполнена синхронизация
  • Все простые проблемы вроде проверки настроек в Chrome, Google Account, сброса истори и даже синхронизации не помогают

Почему это проблема:

  • Это раздражает
  • Некоторые сайты попросту не работают и падают с ошибкой (Панера, например)
  • Некоторые сайты не предлагают возможности изменения языка на отличный от navigator.language
  • Проблема имеет тенденцию распространяться на другие аккаунты Chrome на этом же компьютере.

TL.DR., Размышления о первопричине бага

В определенный момент Google отказался от локали «ru-RU» в пользу «ru» и осуществил миграцию.
По всей видимости, эта миграция обошла стороной тех пользователей, кто зашифровал свою учетку с помочью passphrase, и оставила их без возможности изменить данное значение в интерфейсе.

При этом в системе остался забавный баг.

В том случае, если юзер с кривой локалью является дефолтным, все последующие юзеры, кто зайдет под своей учеткой в Chrome автоматически унаследуют «ru-RU» и синхронизируют ее с бэкапом в облаке.

Чтобы понять откуда у этого бага уши растут, пришлось немного повозиться:

1) Выяснить на каком языке мы говорим для интернета.

В этом нам поможет консоль и navigator.languages:
(4) [«ru-RU», «en-US», «en», «ru»]

2) Проверяем какое значение нам приехало из облака.

Это можно сделать открыв chrome://sync-internals на вкладке для Sync Node Browser
в разделе Preferences / intl.accept_languages нас будет ожидать неприятный сюрприз.

Это означает то, что кривая локаль успешно синхронизировалась с облаком и любые прямые манипуляции с файлом Preferences будут отвергнуты в пользу версии в облаке.

Я завел баг чтобы это исправили, но что-то мне подсказывает что в лучшем случае его закроют как Won't Do.

О-кей, что делать?

  1. Составьте список всех устройств, где вы вошли в свою учетку, т.к. их придется фиксить вручную
  2. На любом выбранном устройстве убедитесь, что у вас есть наиболее полный локальный бэкап данных (закладки, пароли, методы оплаты и т.д.)
  3. Зайдите в настройки синхронизации chrome://settings/syncSetup и перейдите в раздел Manage Synced Data on Google Dashboard
  4. Выполните Reset Sync и закройте браузер
  5. Вам необходимо будет найти файл Preferences для вашего пользователя (chrome://versions показывает полный путь)
  6. Найдите и удалите злосчастную локаль используя любой текстовый редактор
  7. После этого вы можете открыть браузер и снова включить синхронизацию

Не забудьте сделать то же самое для всех пользователей Chrome на данном устройстве, которые страдают от той же самой проблемы

Прежде чем включать синхронизацию на других устройствах, не забудьте почистить Preferences и там. Для Android и iOS можно просто очистить данные приложения.

Данные шаги должны помочь.

К сожалению, мне не известен более элегантный способ решения проблемы, поскольку я не нашел варианта обновления Preferences с помощью флагов или консоли в Chrome.

Буду рад альтернативным способам решения проблемы в комментариях.
+6
963 5
Leave a comment