Различить язык интерфейса, язык платформы и локализацию чисел

Учебные задачи

Разбираем реальный язык Русский из КА2 и текущий язык пользователя. Код ru не обязан совпадать с региональным кодом ru_RU.

Где и как запускать

Полный серверный общий модуль учебной копии. Только чтение настроек и вычисления в памяти.

Подготовка

  1. Работайте в отдельной учебной копии базы. Создайте серверный общий модуль УчебныеЗадачи, вставьте полный модуль урока и вызовите ВыполнитьПример() из серверного обработчика учебной команды.

  2. Код выполняется на сервере: часть функций локализации и часовых поясов недоступна непосредственно в тонком клиенте. Реквизиты пользователя, региональные настройки и часовые пояса код не меняет.

  3. Для двух уроков о метаданных используйте копию КА2 Progress: в исходном Languages/Русский.xml действительно есть язык Русский с КодЯзыка = ru. Остальные уроки не требуют объектов конкретной конфигурации.

Процедура ВыполнитьПример() Экспорт
    Язык = Метаданные.Языки.Найти("Русский");
    Если Язык = Неопределено Тогда
        ВызватьИсключение "Нужна учебная копия КА2 Progress с языком Русский";
    КонецЕсли;
    Сообщить(Язык.Имя = "Русский");
    Сообщить(Язык.КодЯзыка = "ru");
    Сообщить("Синоним языка: " + Язык.Синоним);
    Сообщить("Комментарий заполнен: " + Строка(НЕ ПустаяСтрока(Язык.Комментарий)));
    Текущий = ТекущийЯзык();
    Если ТипЗнч(Текущий) = Тип("Строка") Тогда
        Сообщить("Код языка интерфейса: " + Текущий);
    Иначе
        Сообщить("Код языка интерфейса: " + Текущий.КодЯзыка);
    КонецЕсли;
    Сообщить("Язык системы: " + ТекущийЯзыкСистемы());
    Сообщить("Локализация сеанса: " + ТекущийКодЛокализации());
    Сообщить("Локализация базы: " + КодЛокализацииИнформационнойБазы());
КонецПроцедуры

Разбор по шагам

  1. Язык Русский найден по имени, не по позиции в коллекции. Имя и КодЯзыка сверяются с настоящим XML конфигурации; Синоним — представление, Комментарий может быть пустым.

  2. ТекущийЯзык на сервере возвращает объект метаданных языка, а в тонком/веб-клиенте — строку кода. Ветвление показывает обе формы результата и не вызывает КодЯзыка у строки.

  3. ТекущийЯзыкСистемы относится к языку системы 1С. Это не название часового пояса и не региональный код форматирования.

  4. ТекущийКодЛокализации относится к сеансу, в том числе параметру /VL. КодЛокализацииИнформационнойБазы читает отдельную настройку базы; совпадение строк не навязывается.

Как проверить результат

  1. Первые две проверки — Истина для указанной копии КА2. Остальные строки содержат фактические настройки вашего запуска.

  2. В коде нет присваивания пользовательского языка или изменения локализации. Настройки до и после запуска одинаковы.

Ожидаемый результат

Понятно, какую настройку проверять при проблемах перевода интерфейса и форматирования чисел.

На что обратить внимание

  1. Не сравнивайте ru и ru_RU как два одинаковых идентификатора: они относятся к разным понятиям.

  2. Не переносите серверное обращение ТекущийЯзык().КодЯзыка в тонкий клиент без учёта строкового результата.

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

Не хотите разбираться сами?

Адаптируем это решение под вашу базу. Оценка бесплатно.

Оставить задачу

1С, 1С:Предприятие — товарные знаки ООО «1С». Сайт не является официальным представительством фирмы «1С» и не аффилирован с ней.