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. Переменные окружения (откат) → LANG、LC_ALL、LANGUAGE
  3. По умолчанию английский (откат) → "en"

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

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

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

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

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

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

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

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

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

bash
echo $LANG
powershell
Get-ChildItem Env:LANG

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

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

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

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

/mystatus

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

  • Если системный язык китайский → вывод на китайском (например, 3小时限额、重置: 2小时30分钟后)
  • Если системный язык английский → вывод на английском (например, 3-hour limit、Resets 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-CN、en-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 недоступен, откатитесь к переменным окружения LANG、LC_ALL、LANGUAGE
  3. Если переменные окружения также не существуют или не начинаются с zh, по умолчанию английский