Skip to content

Многоязычная поддержка: автоматическое переключение между китайским и английским языками

Что вы научитесь делать

  • Поймите, как mystatus автоматически определяет системный язык
  • Знайте, как переключить системный язык для изменения языка вывода
  • Поймите приоритет и механизм отката определения языка
  • Овладейте принципом работы Intl API и переменных окружения

Ваша текущая проблема

Вы могли заметить, что многоязычная поддержка mystatus иногда на китайском, иногда на английском:

# Китайский вывод
3小时限额
████████████████████████████ 剩余 85%
重置: 2小时30分钟后

# Английский вывод
3-hour limit
████████████████████████████ 85% remaining
Resets in: 2h 30m

Но вы не знаете:

  • Как плагин узнает, какой язык использовать?
  • Можно ли вручную переключить на китайский или английский?
  • Что делать, если определение неверно?

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

Основная идея

Многоязычная поддержка автоматически выбирает китайский или английский вывод на основе языковой среды системы, без необходимости ручной настройки. Приоритет определения: Intl API → переменные окружения → по умолчанию английский.

Приоритет определения (от высокого к низкому):

  1. Intl API (рекомендуется) → Intl.DateTimeFormat().resolvedOptions().locale
  2. Переменные окружения (откат) → LANGLC_ALLLANGUAGE
  3. По умолчанию английский (откат) → "en"

Зачем не нужна ручная настройка?

Поскольку определение языка основано на системной среде, плагин автоматически распознаёт при запуске, пользователю не нужно изменять какие-либо конфигурационные файлы.

Поддерживаемые языки:

ЯзыкКодУсловие определения
Китайскийzhlocale начинается с zh (например, zh-CNzh-TW)
АнглийскийenДругие случаи

Покрытие перевода:

  • Единицы времени (день、час、минута)
  • Связанное с лимитами (оставшийся процент、время сброса)
  • Сообщения об ошибках (сбой аутентификации、ошибка API、тайм-аут)
  • Заголовки платформ (OpenAI、智谱 AI、Z.ai、Google Cloud、GitHub Copilot)

Следуйте за мной

Шаг 1: Посмотрите текущий системный язык

Сначала подтвердите настройки системного языка:

bash
echo $LANG
powershell
Get-ChildItem Env:LANG

Что вы должны увидеть:

  • Китайская система: zh_CN.UTF-8zh_TW.UTF-8 или похоже
  • Английская система: en_US.UTF-8en_GB.UTF-8 или похоже

Шаг 2: Проверка определения языка

Выполните команду /mystatus, наблюдайте за языком вывода:

/mystatus

Что вы должны увидеть:

  • Если системный язык китайский → вывод на китайском (например, 3小时限额重置: 2小时30分钟后)
  • Если системный язык английский → вывод на английском (например, 3-hour limitResets in: 2h 30m)

Шаг 3: Временное переключение системного языка (для тестирования)

Если вы хотите протестировать эффект вывода на разных языках, можно временно изменить переменную окружения:

bash
LANG=en_US.UTF-8 /mystatus
powershell
$env:LANG="en_US.UTF-8"; /mystatus

Что вы должны увидеть:

Даже если ваша система китайская, вывод станет английским форматом.

WARNING

Это только временное тестирование, не изменит системный язык навсегда. После закрытия терминала настройки восстанавливаются.

Шаг 4: Понимание механизма определения Intl API

Intl API — это стандартный интерфейс интернационализации, предоставляемый браузером и Node.js. Плагин сначала использует его для определения языка:

Код определения (упрощённый):

javascript
// 1. Сначала используем Intl API
const intlLocale = Intl.DateTimeFormat().resolvedOptions().locale;
if (intlLocale.startsWith("zh")) {
  return "zh";  // китайский
}

// 2. Откат к переменным окружения
const lang = process.env.LANG || process.env.LC_ALL || "";
if (lang.startsWith("zh")) {
  return "zh";
}

// 3. По умолчанию английский
return "en";

Преимущества Intl API:

  • Надёжнее, основан на фактических настройках системы
  • Поддерживает браузер и среду Node.js
  • Предоставляет полную информацию о locale (например, zh-CNen-US)

Переменные окружения как откат:

  • Совместим с средами, не поддерживающими Intl API
  • Предоставляет способ ручного управления языком (через изменение переменных окружения)

Шаг 5: Постоянное переключение системного языка (если нужно)

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

INFO

Изменение системного языка повлияет на все приложения, не только mystatus.

macOS:

  1. Откройте「Системные настройки」→「Общие」→「Язык и регион」
  2. Добавьте нужный язык и перетащите в начало
  3. Перезапустите OpenCode

Linux:

bash
# Измените ~/.bashrc или ~/.zshrc
export LANG=zh_CN.UTF-8

# Перезагрузите конфигурацию
source ~/.bashrc

Windows:

  1. Откройте「Параметры」→「Время и язык」→«Язык и регион»
  2. Добавьте нужный язык и установите по умолчанию
  3. Перезапустите OpenCode

Контрольная точка ✅

Проверьте правильность определения языка:

Тестовый элементДействиеОжидаемый результат
Китайская системаВыполните /mystatusВывод на китайском (например, 3小时限额)
Английская системаВыполните /mystatusВывод на английском (например, 3-hour limit)
Временное переключениеПосле изменения переменной LANG выполните командуЯзык вывода меняется вместе с ней

Предупреждения о ловушках

Частые проблемы

ПроблемаПричинаРешение
Язык вывода не соответствует ожиданиямНеправильная настройка системного языкаПроверьте переменную окружения LANG или настройку системного языка
Intl API недоступенСлишком старая версия Node.js или среда не поддерживаетПлагин автоматически откатится к определению переменных окружения
Китайская система отображает английскийПеременная окружения LANG не установлена на zh_*Установите правильное значение LANG (например, zh_CN.UTF-8)

Описание логики определения

Когда использовать Intl API:

  • Node.js ≥ 0.12 (поддерживает Intl API)
  • Среда браузера (все современные браузеры)

Когда откатиться к переменным окружения:

  • Intl API вызывает исключение
  • Среда не поддерживает Intl API

Когда использовать английский по умолчанию:

  • Переменные окружения не установлены
  • Переменные окружения не начинаются с zh

TIP

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

Итог урока

  • Автоматическое определение: mystatus автоматически определяет системный язык, без ручной настройки
  • Приоритет определения: Intl API → переменные окружения → по умолчанию английский
  • Поддерживаемые языки: китайский (zh) и английский (en)
  • Покрытие перевода: единицы времени、связанное с лимитами、сообщения об ошибках、заголовки платформ
  • Переключение языка: измените настройки системного языка、перезапустите OpenCode

Предварительный обзор следующего урока

На следующем уроке мы изучим Частые вопросы: невозможность запроса квоты、истечение срока действия Token、проблемы с правами.

Вы узнаете:

  • Как устранить проблему невозможности чтения файлов аутентификации
  • Решение проблемы истечения срока действия Token
  • Рекомендации по настройке при недостаточности прав

Приложение: справочник по исходному коду

Нажмите для просмотра местоположения исходного кода

Время обновления: 2026-01-23

ФункцияПуть к файлуНомер строки
Функция определения языкаplugin/lib/i18n.ts24-40
Определение китайского переводаplugin/lib/i18n.ts46-124
Определение английского переводаplugin/lib/i18n.ts125-203
Экспорт текущего языкаplugin/lib/i18n.ts210
Экспорт функции переводаplugin/lib/i18n.ts213

Ключевые функции:

  • detectLanguage(): определяет системный язык пользователя, сначала использует Intl API, откатывается к переменным окружения, по умолчанию английский
  • currentLang: текущий язык (определяется один раз при загрузке модуля)
  • t: функция перевода, возвращает соответствующий переведённый контент на основе текущего языка

Ключевые константы:

  • translations: словарь перевода, содержащий два языковых пакета zh и en
  • Поддерживаемые типы перевода: единицы времени (days、hours、minutes)、связанное с лимитами (hourLimit、dayLimit、remaining、resetIn)、сообщения об ошибках (authError、apiError、timeoutError)、заголовки платформ (openaiTitle、zhipuTitle、googleTitle、copilotTitle)

Логика определения:

  1. Сначала используйте Intl.DateTimeFormat().resolvedOptions().locale для определения языка
  2. Если Intl API недоступен, откатитесь к переменным окружения LANGLC_ALLLANGUAGE
  3. Если переменные окружения также не существуют или не начинаются с zh, по умолчанию английский