Раздел 06. Объектная модель прикладного решения
356. Алгоритмы в модуле обычной формы могут исполняться?
• Только на клиентском компьютере
357. Алгоритмы в модуле управляемой формы могут исполняться?
• Место определяется для каждой процедуры и функции модуля
• 1200
359. В каком обработчике события модуля объекта можно отказаться от записи объекта, например, элемента справочника?
• ПередЗаписью
• ПриЗаписи
360. В каком свойстве хранится время документа?
• Дата
361. В каком свойстве хранится дата документа?
• Дата
362. В каком случае рекомендуется использовать общий модуль для описания только экспортных функций?
• Только раздел процедур и функций
363. В каком формате хранятся тексты конфигурации и базы данных в системе 1С:Предприятие?
• Тексты конфигурации и базы данных хранятся в формате UNICODE
364. В модуле приложения.
• нет ограничений на описание переменных, процедур, функций
365. В общих модулях.
• нельзя описывать переменные
366. Верно ли что в 1С:Предприятие 8 любая текстовая информация может включать одновременно символы различных языков?
• Да, так как все тексты конфигурации и базы данных хранятся в формате UNICODE
367. Возможно ли использование в одном исходном тексте операторов встроенного языка в русском и английском написании?
• Да, для этого не требуется изменения каких-либо настроек конфигуратора
368. Где может размещаться процедура-обработчик события «Нажатие» кнопки диалога?
• В модуле формы
369. Где располагаются процедуры-обработчики событий прикладных объектов, например, ПриЗаписи, ПередУдалением?
• В модуле объекта
370. Для чего предназначен объект ДокументСписок?
• Для управления списком документов, выводимых в табличное поле, т.е. для решения интерфейсных задач
371. Для чего предназначен объект конфигурации «Язык»?
• Для создания интерфейса программы на разных языках
372. Для чего применяется код локализации?
• В форматных строках во встроенном языке для упрощения адаптации решений к конкретным региональным установкам
• Для указания региональных установок информационной базы
373. Если в региональных установках информационной базы ни одно из свойств установлено не будет, тогда.
• язык и форматы отображения чисел, даты и времени будут определяться настройками операционной системы
374. Имя общего модуля может совпадать с именем свойства глобального контекста (например «Отчеты»):
• может, но только если модуль глобальный
375. К чему приведет изменение кода языка в свойстве «Код языка», если уже введены тексты в свойствах «Синоним» или «Заголовок» на этом языке?
• К «потере» введенных текстов с возможностью «восстановления» при указании прежнего значения кода языка
376. Как можно обратиться к менеджеру справочника «Номенклатура»?
• Спр = Справочники.Номенклатура
377. Как повлияет удаление элемента справочника, который уже используется в других объектах, а потом создать новый с такими же реквизитами, на поведение программы?
• У элемента будет другой внутренний идентификатор (ссылка) и это может повлиять на логику программы
378. Какая коллекция из нижеперечисленных не относится к универсальным?
• Коллекция строк табличной части документа
379. Какая процедура выполняет обработку события ввода документа «на основании»?
• «ОбработкаЗаполнения» с формальным параметром «Основание» произвольного типа
380. Какие виды программных модулей существуют «1С:Предприятие 8»?
• Модуль обычного приложения, модуль управляемого приложения, модуль внешнего соединения, модуль сеанса, модуль команды, общие модули, модули менеджера, модули форм, модули объектов и модули набора записей
381. Какие разделы существуют в общем модуле?
• Только раздел процедур и функций
382. Какие утверждения относительно NULL справедливы?
• NULL — обозначает отсутствующее значение
• NULL — относится к примитивным типам данных
• NULL — это литерал
383. Какие функции отсутствуют во встроенном языке «1С:Предприятие8»:
• Функции работы со значениями типа Время
384. Каким образом можно сменить язык просмотра (редактирования) конфигурации?
• С помощью кнопки выбора языка, расположенной в строке состояния справа от кнопки «NUM»
• Через пункт меню «Конфигурация — Язык редактирования конфигурации»
385. Какого типа является свойство глобального контекста «Справочники»?
• СправочникиМенеджер
386. Какое высказывание о модуле приложения верно?
• Модуль приложения используется для обработки событий, связанных с началом и завершением работы системы
• Модуль приложения используется для объявления глобальных переменных
387. Какое значение будет стоять в полях записей результата запроса, для которых не найдено соответствия в другой таблице-источнике при внешнем соединении?
• NULL
388. Какое написание имеют операторы встроенного языка?
• Русское и английское написание
389. Какое написание имеют функции встроенного языка?
• Русское и английское написание
390. Какой должен быть порядок определения процедур и функций в программном модуле?
• Порядок следования процедур и функций не имеет значения
391. Какой литерал представляет значение типа «дата» по умолчанию (пустая дата)?
• 10101
• 10101000000
392. Какой метод документа обеспечивает вызов события отмены проведения документа?
• Записать(РежимЗаписиДокумента.ОтменаПроведения), где Записать — метод объекта документа
393. Какой метод документа обеспечивает вызов события проведения документа?
• Записать(РежимЗаписиДокумента.Проведение), где Записать — метод объекта документа
394. Какой режим используется для выполнения задач локализации (создания интерфейса на другом языке)?
• «Редактирование текстов интерфейса»
395. Ключ может быть произвольного типа.
• у соответствия
396. Механизмы интернационализации, заложены в.
• технологическую платформу 1С:Предприятия
397. Модуль приложения рекомендуется использовать.
• для определения предопределенных процедур «ПриНачалеРаботыСистемы» и т.п
398. Модуль сеанса (выберите наиболее полный правильный ответ):
• в кластере серверов 1С:Предприприятия 8 исполняется в привилегированном режиме
• исполнение происходит после начала исполнения модуля приложения (модуля внешнего соединения)
• не содержит экспортируемых процедур и функций
• предназначен для инициализации параметров сеанса и отработки действий, связанных с сеансом работы
399. На что влияют региональные установки информационной базы?
• На порядок сортировки строк в базе данных
• На формат отображения чисел и дат
400. Объект какого типа позволяет изменить элемент справочника в базе данных?
• СправочникОбъект
401. Объект МодельПрогноза создается:
• Из результата анализа данных
402. Пессимистическая блокировка объекта (метод Заблокировать()):
• блокировка объекта не мешает программно менять данные объекта
403. Пессимистическая блокировка объекта (метод Заблокировать()):
• не позволяет интерактивно (в основной форме объекта) менять данные объекта
404. Подписка на событие может быть определена:
• для разных объектов
405. При назначении обработчика события на объект (экземпляр объекта 1С:Предприятие, СОМ объект) процедура, отвечающая за отработку данного события должна быть расположена:
• выбор модуля не важен, в «пределах видимости»
406. При необходимости использования англоязычной транскрипции встроенного языка 1С:Предприятие 8 в уже существующей конфигурации можно:
• Использовать англоязычные варианты встроенных процедур/функций. операторных скобок и языковых конструкций
407. При определении на одно событие объекта 1С:Предприятие нескольких подписок на событие, порядок вызова обработчиков следующий:
• процедуры вызываются в произвольном порядке
408. При определении обработчика события на СОМ объект количество параметров в процедуре- обработчике:
• равно количеству параметров соответствующего события объекта
409. При определении обработчика события на экземпляр объекта 1С:Предприятие количество параметров в процедуре-обработчике:
• на один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (первый параметр содержит сам объект)
410. При определении подписки на событие для разных объектов перечень показываемых событий формируется по принципу:
• должны выполняться оба вышеприведенных требования
411. При определении подписки на событие количество параметров в процедуре-обработчике:
• на один параметр больше, чем у соответствующего обработчика события, располагаемого в модуле объекта (первый параметр содержит сам объект)
412. При определении подписки на событие количество таких подписок:
• Любое количество, процедуры обработчики могут располагаться как в одном, так и в разных общих неглобальных модулях
413. При определении подписки на событие процедура — обработчик должна располагаться:
• в не глобальном общем модуле
414. При определении подписки на событие, в случае если в модуле объекта определен соответствующий обработчик этого же события:
• в начале отработает процедура, расположенная в модуле объекта, затем процедура, определенная по подписке
415. При проведении документа по какому-либо регистру в случае если у документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант «Автоматический и управляемый»), то такое проведение приведет
• вся транзакция будет выполнена в автоматическом режиме
416. При проведении документа по какому-либо регистру в случае если у документа установлен автоматический режим управления транзакционными блокировками, а у регистра управляемый (в свойствах конфигурации используется вариант «Управляемый»), то такое проведение приведет:
• вся транзакция будет выполнена в управляемом режиме
417. При проведении документа по какому-либо регистру в случае если у документа установлен управляемый режим управления транзакционными блокировками, а у регистра автоматический (в свойствах конфигурации используется вариант «Автоматический и управляемый»), то такое проведение приведет
• к возникновению ошибочной ситуации
418. Процедура, используемая подпиской на событие, должна располагаться в модуле с установленными (взведенными) флажками:
• обязательно Клиент, Сервер и Внешнее соединение
419. Пусть Переменная1 имеет тип Дата (состав даты — «Дата») и значение, равное 1 марта 2005 года. Чему будет равно значение выражения «Переменная1+20»?
• 1 марта 2005 г 00 ч 00 мин 20 сек
420. С какого значения начинается индексирование элементов коллекций?
• 0 (с нуля)
421. С какой целью используется встроенный язык?
• Для описания (на стадии разработки конфигурации) алгоритмов функционирования прикладной задачи
422. С какой целью тексты конфигурации и базы данных хранятся в формате UNICODE?
• Формате UNICODE позволяет поддерживать различные языки в системе 1С:Предприятие
423. С помощью команды «ДобавитьОбработчик» можно назначить обработчик события на:
• СОМ объект
• экземпляр объекта 1С:Предприятие (назначать на события модуля объекта)
424. С помощью объекта какого типа можно перебирать элементы справочника?
• СправочникВыборка
425. Создание многоязыковых прикладных решений.
• возможно благодаря тому, что существует возможность создания нескольких языков в конфигурации и локализованных интерфейсов платформы
426. Существует ли в 1С:Предприятии 8 возможность настроить конкретное прикладное решение на использование региональных настроек чисел, дат и времени?
• Да, в региональных установках информационной базы можно настроить эти параметры
427. Тип анализа «Дерево решений» подразумевает:
• Построение иерархической структуры классифицирующих правил
428. Тип анализа «Кластерный анализ» подразумевает:
• Разделение исходного набора на группы объектов
429. Тип анализа «Поиск ассоциаций» подразумевает:
• Поиск часто встречаемых вместе групп объектов или значений характеристик
430. Тип анализа «Поиск последовательностей» подразумевает:
• Поиск цепочек событий
431. Типизация переменных во встроенном языке «1С:Предприятие
• не жесткая, т.к. неявным определением переменной является ее первое упоминание в левой части оператора присваивания
• не жесткая, т.к. тип переменной определяется ее значением
432. Только определения процедур и функций может содержать только следующий вид модуля:
• модуль сеанса
• общий модуль
433. У регистра сведений установлен режим записи «Независимый». Редактирование осуществляется в диалоге, ни одна из форм регистра не определена. При попытке интерактивного добавления в него «Записи» со значениями измерений, комбинация которых уже прописана в регистре:
• Возникает ошибочная ситуация
434. Что необходимо выполнить в процедуре «ОбработкаПроведения» в модуле документа для отмены проведения?
• Отказ = Истина
435. Что необходимо для того, чтобы написанная программистом процедура дополнила контекст документа (объекта типа ДокументОбъект)?
• Она должна быть определена в модуле документа
• Она должна быть определена с ключевым словом Экспорт
436. Что обозначает параметр Л(L) в форматной строке функции форматирования ЧислоПрописью()?
• Код локализации
437. Что произойдет, если удалить запись регистра сведений и создать новую с такими же полями (измерениями, ресурсами, реквизитами)?
• Ничего, на логику программы это никак не повлияет
438. Что такое «системные перечисления»?
• Перечень значений, заданный в платформе «1С:Предприятие 8.0»
439. Что такое код локализации?
• Строка, состоящая из кода языка и кода страны и идентифицирующая некоторый регион мира
440. Что такое локализация?
• Адаптация программы под конкретные национальные требования
Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:
Подготовка приложения к локализации
Локализованное приложение — это приложение, которое можно локализовать для других рынков, регионов или на другие языки, не раскрыв какие-либо функциональные неисправности приложения. Самой важной особенностью локализуемого приложения является то, что его исполняемый код четко отделен от локализуемых ресурсов приложения. Таким образом следует определить, какие из ресурсов вашего приложения необходимо локализовать. Подумайте над тем, что нужно изменить при локализации вашего приложения для других рынков.
Мы также рекомендуем ознакомиться с руководством по глобализации.
Поместите строки кода в файлы ресурсов (.resw)
Не следует жестко кодировать строковые литералы в императивном коде, разметке XAML или манифесте пакета приложения. Вместо этого поместите строки в файлы ресурсов (.resw), чтобы их можно было адаптировать для различных местных рынков независимо от двоичных файлов в вашем приложении. Дополнительные сведения см. в разделе Локализация строк в манифесте пакета приложения и интерфейсе пользователя.
В этом разделе также демонстрируется добавление комментариев в файл ресурсов (.resw) по умолчанию. Например, при использовании неформального стиля речи, это следует объяснить в комментариях. Кроме того, чтобы свести к минимуму расходы, убедитесь, что переводчики получают только необходимые для перевода строки.
Правильно устанавливайте язык по умолчанию для вашего приложения в исходном файле манифеста пакета приложения (файл Package.appxmanifest ). Язык по умолчанию — это язык, используемый в случае, когда предпочитаемые пользователем языки не совпадают ни с одним из языков, поддерживаемых вашим приложением. Пометьте все ресурсы соответствующим языком (даже ресурсы языка по умолчанию, например, \Assets\en-us\Logo.png ), для того чтобы система могла определить, на каком языке создан ресурс и как он используется в конкретных ситуациях.
Адаптируйте изображения и другие файловые ресурсы для языка.
В идеале вы сможете глобализации образов, то есть сделать их независимыми от языка и региональных параметров. Для любых изображений и других файловых ресурсов, применительно к которым это сделать невозможно, создайте столько вариантов этих ресурсов, сколько необходимо, и сопроводите названия их файлов или папок соответствующими языковыми кодами. Дополнительные сведения см. в разделе Адаптация ресурсов с учетом языка, масштаба, высокой контрастности и других квалификаторов.
Чтобы свести к минимуму затраты на локализацию, не добавляйте в начальные изображения текст или материал, восприятие которых зависит от языка и региональных стандартов. Изображения, приемлемые в вашей культуре, могут оскорбить представителя другой культуры или быть неправильно им поняты. Избегайте использования культурно-специфичных изображений, например, почтовых ящиков, которые не используются по всему миру. Избегайте использования религиозной символики, изображений животных, изображений на политическую тему или изображений, связанных с половой принадлежностью. Изображения открытых и закрытых частей тела или жестов рук также могут носить деликатный характер. Если все это нельзя исключить из приложения, изображения придется очень продуманно локализовать. Если вы локализуете продукт для языка с отличным от вашего направлением чтения, использование симметричных изображений и эффектов упростит поддержку зеркалирования.
Также не следует использовать текст на изображениях и речь в аудио/видео файлах.
Использование цвета в приложении
При использовании цвета следует учитывать определенные факторы. Использование комбинаций цветов, вызывающих ассоциации с национальными флагами или политическими движениями может быть спорным решением. При выборе цвета рекомендуется посоветоваться с культурологом. Также при выборе цветов следует учитывать, что пользователю должно быть понятно, для чего был использован конкретный цвет. Если цвет используется для передачи смысла, вы должны передать этот же смысл, используя некоторые другие средства, такие как размер, форма или метка.
Рассмотрите возможность разложения строк на предложения
Используйте строки подходящего размера. Короткие строки легче переводить и это позволяет использовать перевод повторно и, как следствие, сократить расходы, так как одна и та же строка не передается лицу, отвечающему за локализацию, несколько раз. Кроме того, слишком длинные строки могут не поддерживаться средствами для локализации.
Однако в противоречие с этим правилом одна и та же строка может быть использована в разных контекстах. Даже простые слова, такие как «on» и «off», могут переводиться по-разному в зависимости от контекста. В английском языке on и off можно использовать при обозначении переключения в режим «В самолете», включения или отключения Bluetooth, а также других устройств. Для итальянского же языка перевод будет зависеть от того, что именно включается или выключается. Поэтому нужно будет создать пару строк для каждого контекста. В одинаковых контекстах можно использовать одинаковые строки. Например, можно использовать строку Volume (Громкость) для обозначения как громкости звуковых эффектов, так и громкости музыки, поскольку и то, и другое отражает мощность звука. Однако не следует использовать эту же строку, когда речь идет о томе жесткого диска (hard disk volume), поскольку в этом случае контекст и значение другие и слово может быть переведено неправильно.
Также в английском языке строки наподобие text или fax могут использоваться и как существительное, и как глагол, что может привести к путанице во время перевода. Поэтому создавайте отдельные строки для обоих вариантов использования слов. Если вы не уверены, одинаковы ли контексты, для верности используйте отдельную строку.
Одним словом, рекомендуется разбивать строки на части, которые можно будет использовать в любых контекстах. Будут случаи, когда одна строка должна будет представлять собой целое предложение.
Рассмотрим следующую строку: «Не удалось синхронизировать».
Различные слова могут заменять , например «appointment», «task» или «document». Подобная замена возможна в английском языке, но в немецком для соответствующего предложения выполнима не всегда. Обратите внимание, что в приведенных ниже предложениях на немецком некоторые слова в строке шаблона (Der, Die, Das) должны соответствовать параметризованному слову:
| Английский | Немецкий |
|---|---|
| The appointment could not be synchronized. (Не удалось синхронизировать встречу.) | Der Termin konnte nicht synchronisiert werden. |
| The task could not be synchronized. (Не удалось синхронизировать задачу.) | Die Aufgabe konnte nicht synchronisiert werden. |
| The document could not be synchronized. (Не удалось синхронизировать документ.) | Das Dokument konnte nicht synchronisiert werden. |
В качестве другого примера рассмотрим предложение «Напомнить мне через минуты». Использование минут подходит для английского языка, но в других языках могут использоваться другие термины. Например, в польском в зависимости от контекста используются слова minuta, minuty или minut.
Для решения подобной проблемы локализуйте не отдельные слова, а предложение полностью. Может показаться, что это неэлегантное решение, требующее выполнения лишней работы, но на самом деле это решение является лучшим по следующим соображениям.
- Грамматически правильное сообщение будет выводиться для всех языков.
- Переводчику не нужно будет узнавать, какие строки чем заменяются.
- Вам не нужно будет тратить средства на исправление кода для готового приложения в случае возникновения подобной ситуации.
Другие рекомендации для строк
Не следует использовать разговорные слова и выражения, а также метафоры в строках, которые вы создаете на языке по умолчанию. Язык, характерный для определенной демографической группы, например культурной или возрастной, может быть труден для понимания и перевода, так как используется только внутри этой группы. Метафоры могут быть поняты одним человеком и не поняты другим. Например, «bluebird» означает что-то конкретное для тех, кто является частью лыжной культуры, но те, кто не является частью этой культуры, не понимают ссылку.
Не используйте профессиональный жаргон, аббревиатуры и акронимы. Технический язык вряд ли будет понятен неспециалистам и представителям других культур и регионов, он также труден для перевода. Люди не используют подобные слова при повседневном общении. Технический язык часто используется в сообщениях об ошибках для идентификации проблем с оборудованием и программным обеспечением, однако, технический язык следует использовать в строках, только в том случае, если пользователь нуждается в таком уровне информации и может использовать ее для выполнения необходимого действия либо может обратиться за помощью к лицу, которому она понятна.
Использование неформального стиля речи в строках является допустимым выбором. Чтобы указать причину его использования, можно использовать комментарии в вашем файле ресурсов (.resw) по умолчанию.
Псевдолокализация
Псевдолокализация приложения выполняется для выявления проблем локализации. Псевдолокализация представляет собой что-то вроде проверочной локализации или теста для обнаружения проблем. Для этого создается набор ресурсов, которые фактически не переводятся, а только выглядят переведенными. Например, в этом случае длина строк увеличивается примерно на 40% по сравнению с длиной строк на языке по умолчанию и они содержат разделители. Таким образом можно сразу определить, усекаются ли они в пользовательском интерфейсе.
Требования к развертыванию
При установке приложения, содержащего локализованные языковые данные, может оказаться, что для приложения доступен только язык по умолчанию, даже если изначально были включены ресурсы для нескольких языков. Это связано с тем, что процесс установки оптимизирован для установки только языковых ресурсов, соответствующих текущему языку и региональным параметрам устройства. Таким образом, если устройство настроено для en-US, вместе с приложением устанавливаются только языковые ресурсы en-US.
Невозможно установить дополнительную языковую поддержку приложения после начальной установки. Если после установки приложения изменить язык по умолчанию, приложение продолжит использовать только исходные языковые ресурсы.
Если вы хотите убедиться, что все языковые ресурсы доступны после установки, создайте файл конфигурации для пакета приложения, который указывает, что во время установки требуются определенные ресурсы (включая языковые ресурсы). Эта оптимизированная функция установки автоматически включается при создании appxbundle приложения во время упаковки. Дополнительные сведения см. в разделе Обеспечение установки ресурсов на устройстве независимо от того, требуются ли они устройству.
При необходимости, чтобы убедиться, что установлены все ресурсы (а не только подмножество), можно отключить создание appxbundle при упаковке приложения. Однако это не рекомендуется, так как это может увеличить время установки приложения.
Отключите автоматическое создание appxbundle, задав для атрибута «Generate App Bundle» значение «never»:
- В Visual Studio щелкните правой кнопкой мыши имя проекта.
- Выберите Магазин ->Создать пакеты приложений.
- В диалоговом окне Создание пакетов выберите Я хочу создать пакеты для отправки в Microsoft Store с помощью нового имени приложения , а затем нажмите кнопку Далее.
- В диалоговом окне Выбор имени приложения выберите или создайте имя приложения для пакета.
- В диалоговом окне Выбор и настройка пакетов установите для параметра Создать пакет приложений значение Никогда.
Учет геополитических особенностей
Избегайте оскорбления национальных чувств при использовании карт или упоминании регионов. Карты могут включать спорные региональные или национальные границы, они часто бывают причиной оскорбления национальных чувств. Будьте внимательны, чтобы любой пользовательский интерфейс, используемый для выбора нации, называется страной или регионом. Перечисление спорной территории в списке с меткой «страны» (например, в форме адреса) может оскорбить некоторых пользователей.
События при изменении языка и региона
Подпишитесь на события, вызываемые при изменении языковых и региональных параметров системы. Это необходимо для того, чтобы вы могли повторно загружать ресурсы, когда потребуется. Дополнительные сведения см. в разделах Обновление строк в качестве реакции на события изменения значений квалификаторов и Обновление изображений в качестве реакции на события изменения значений квалификаторов.
Обеспечьте правильный порядок параметров при форматировании строк
В разных языках порядок следования параметров может отличаться. Например, рассмотрим следующий формат.
string.Format("Every ", monthName, dayNumber); // For example, "Every April 1".
Строка формата в этом примере ориентирована на английский язык (США). Однако она, к примеру, не подходит для немецкого языка, в котором день и месяц отображаются в обратном порядке. Убедитесь, что переводчик знает назначение каждого из параметров, чтобы он смог изменить порядок элементов формата в строке формата (например, «») в соответствии с целевым языком.
Не допускайте излишней локализации
Отправляйте переводчикам строки на естественном языке; не на языке программирования или языке разметки. Тег — не относится к естественному языку. Рассмотрим следующие примеры.
| Локализация не требуется | Локализация требуется |
|---|---|
| terms of use | условия использования |
| privacy policy | политика конфиденциальности |
Добавление тега в файл ресурсов (.resw) означает, что он, скорее всего, тоже будет переведен. Так он станет нерабочим. При наличии длинных строк, в которые нужно добавить разметку для сохранения контекста и порядка, укажите в комментариях, что не нужно переводить.
Выбирайте правильный подход к осуществлению перевода
После размещения строк в файле ресурсов можно начинать их перевод. Наилучшее время для перевода строк — когда их формирование в вашем проекте завершено, а это обычно бывает ближе к концу проекта. Перевод может быть выполнен несколькими способами. При этом учитываются такие факторы, как объем переводимых строковых ресурсов, количество языков, на которые осуществляется перевод, и то, каким образом выполняется перевод (например, собственными силами или с привлечением внешнего подрядчика).
Рассмотрите эти варианты.
- Файлы ресурсов могут быть переведены непосредственно внутри проекта. Этот вариант лучше всего подойдет для проекта с небольшим объемом строковых ресурсов, который нужно перевести на два или три языка. Это подходящий вариант для случая, когда разработчик владеет несколькими языками и готов сам организовать процесс перевода. Преимущества этого подхода: быстрота; не требуется специализированного программного обеспечения для перевода; минимален риск неправильного перевода. Недостаток: процесс не является масштабируемым. В частности, может легко теряться синхронизация между ресурсами на разных языках, что портит впечатление от использования приложения и ухудшает его обслуживание.
- Файлы строковых ресурсов имеют текстовый формат XML или ResJSON и поэтому могут быть переведены с помощью любого текстового редактора. Затем переведенные файлы копируются обратно в проект. При таком подходе есть риск, что переводчик может случайно изменить теги XML, но зато работа по переводу происходит вне проекта Microsoft Visual Studio. Этот вариант подходит для проектов, которые нужно перевести на небольшое количество языков. XLIFF — это формат XML, специально разработанный для использования в проектах по локализации; он используется рядом переводческих компаний и поддерживается некоторыми средствами для локализации. Для создания XLIFF-файлов из других файлов ресурсов (например, .resw или .resjson) можно использовать набор средств для многоязычных приложений.
Локализация также может потребоваться для других ресурсов, включая изображения и звуковые файлы.
Также следует учитывать следующее:
- Средства локализации Для синтаксического анализа файлов ресурсов доступен ряд средств локализации, которые позволяют переводчикам редактировать только переводимые строки. Этот подход снижает вероятность случайного редактирования тегов XML переводчиком. Недостаток состоит в необходимости применения во время локализации нового инструмента и процесса. Средство для локализации удобно применять для проектов с большими объемами строковых ресурсов, но с небольшим количеством языков, на которые осуществляется перевод. Подробнее см. в разделе Использование набора средств для многоязычных приложений.
- Поставщики локализации Рассмотрите возможность использования поставщика локализации, если ваше приложение содержит обширные строки, которые необходимо перевести на большое количество языков. Компания-локализатор может дать рекомендации по процессу и средствам локализации, а также предоставить услуги по переводу ваших файлов ресурсов. Такое решение — наилучшее, но одновременно и самое дорогое. Кроме того, в этом случае для переводимых данных увеличивается время от начала разработки до выпуска.
Используйте клавиши доступа и метки единообразно
Проблемой при локализации является синхронизация клавиш доступа, использующихся в специальных возможностях, с отображением локализованных клавиш доступа, так как два этих строковых ресурса классифицируются по-разному. Обязательно предоставьте комментарии к строке метки, например: Make sure that the emphasized shortcut key is synchronized with the access key.
Включайте поддержку фуриганы для строк на японском языке, которые могут подвергаться сортировке
В японском языке символы кандзи обладают свойством произноситься по-разному в зависимости от слова или контекста, в которых они используются. Это может привести к проблемам при попытке сортировки объектов с именами на японском языке, например названий приложений, файлов, песен и т. д. Ранее слова на кандзи по умолчанию сортировались с помощью машинного порядка сортировки, который назывался XJIS. Но, к сожалению, такой порядок сортировки не учитывает фонетику, поэтому плохо подходит для использования.
Фуригана решает эту проблему, позволяя пользователю или создателю указать фонетику для символов, которые они используют. Используя следующую процедуру добавления фуриганы к имени вашего приложения, вы обеспечите его правильное расположение в списке приложений при сортировке. Если название вашего приложения содержит символы кандзи и фуригана отсутствует, а язык пользовательского интерфейса или порядок сортировки — японский, Windows старается наилучшим образом создать правильное произношение. Тем не менее есть вероятность, что названия приложений, имеющие редкие или уникальные прочтения, будут отсортированы по более общим правилам чтения. Поэтому в рамках процесса локализации японских приложений (особенно если их имена содержат символы кандзи) рекомендуется предоставлять версию имен приложений с использованием символов фуриганы.
- Добавьте ms-resource:Appname как отображаемое имя пакета и отображаемое имя приложения.
- Создайте папку ja-JP в разделе «strings» и добавьте два файла ресурсов следующим образом:
strings\ en-us\ ja-jp\ Resources.altform-msft-phonetic.resw Resources.resw
Пользователь может выполнять поиск имени приложения 希蒼, используя как значение фуриганы のあ (noa), так и фонетическое значение (используя функцию GetPhonetic из редактора метода ввода (IME)) まれあお (mare-ao).
Сортировка выполняется по формату, установленному на региональной панели управления:
- Если установлены японские региональные параметры пользователя
- Если включена фуригана, 希蒼 сортируется по の.
- Если фуригана отсутствует, 希蒼 сортируется по ま.
- Если включена фуригана, 希蒼 сортируется по の.
- Если фуригана отсутствует, 希蒼 сортируется по 漢字.
Связанные темы
- Руководство по глобализации
- Локализация строк в манифесте пакета приложения и интерфейсе пользователя
- Адаптация ресурсов с учетом языка, масштаба, высокой контрастности и других квалификаторов
- Настройка макета и шрифтов, реализация поддержки написания справа налево
- Обновление изображений в качестве реакции на события изменения значений квалификаторов
Примеры
Глобализация и локализация в ASP.NET Core
Многоязычный веб-сайт позволяет веб-сайту достичь более широкой аудитории. ASP.NET Core предоставляет службы и ПО промежуточного слоя для локализации на разные языки и для разных региональных параметров.
Условия
- Глобализация (G11N): процесс подготовки приложения к поддержке различных языков и регионов. Сокращение происходит от первых и последних букв и количества букв между ними.
- Локализация (L10N): процесс настройки глобального приложения для определенных языков и регионов.
- Интернационализация (I18N): глобализация и локализация.
- Язык и региональные параметры: язык и, при необходимости, регион.
- Нейтральный язык и региональные параметры: язык и региональные параметры, но не регион (например, en, es).
- Конкретный язык и региональные параметры: язык и регион с заданным языком и регионом (например, en-US, en-GB, es-CL).
- Родительский язык и региональные параметры: нейтральный язык и региональные параметры, содержащие определенный язык и региональные параметры (например, en-US и en-GB).
- Языковой стандарт: тот же, что и язык и региональные параметры.
Коды языка и страны или региона
Формат RFC 4646 для имени языка и региональных параметров , — где определяет язык и определяет субкультуру. Примеры: es-CL для испанского языка (Чили), en-US для английского языка (США), en-AU для английского языка (Австралия). RFC 4646 — это комбинация двухбуквенного кода культуры ISO 639 в нижнем регистре (он связан с языком) и двухбуквенного кода субкультуры ISO 3166 в верхнем регистре (он связан со страной или регионом). Дополнительные сведения см. в разделе System.Globalization.CultureInfo.
Задачи локализации приложения
Глобализация и локализация приложения включает следующие задачи:
- Сделайте содержимое приложения ASP.NET Core локализуемым.
- Предоставление локализованных ресурсов для языков и региональных параметров, поддерживаемых приложением
- Реализация стратегии выбора языка и региональных параметров для каждого запроса
Дополнительные ресурсы
- IStringLocalizer : использует ресурсы, зависящие ResourceManager от языка и ResourceReader региональных параметров, во время выполнения. Этот интерфейс имеет индексатор и интерфейс IEnumerable для возврата локализованных строк.
- IHtmlLocalizer : для ресурсов, содержащих HTML.
- Просмотр и данныеAnnotations
- Устранение неполадок ASP.NET основной локализации
- Глобализация и локализация приложений .NET
- Ресурсы в RESX-файлах
- Набор средств многоязычных приложений Майкрософт
- Локализация и универсальные шаблоны
Авторы: Рик Андерсон (Rick Anderson), Дэмиен Боуден (Damien Bowden), Барт Каликсто (Bart Calixto), Надим Афана (Nadeem Afana) и Хишам Бин Атея (Hisham Bin Ateya)
Многоязычный веб-сайт позволяет веб-сайту достичь более широкой аудитории. ASP.NET Core предоставляет службы и ПО промежуточного слоя для локализации на разные языки и для разных региональных параметров.
Условия
- Глобализация (G11N): процесс подготовки приложения к поддержке различных языков и регионов. Сокращение происходит от первых и последних букв и количества букв между ними.
- Локализация (L10N): процесс настройки глобального приложения для определенных языков и регионов.
- Интернационализация (I18N): глобализация и локализация.
- Язык и региональные параметры: язык и, при необходимости, регион.
- Нейтральный язык и региональные параметры: язык и региональные параметры, но не регион (например, en, es).
- Конкретный язык и региональные параметры: язык и регион с заданным языком и регионом (например, en-US, en-GB, es-CL).
- Родительский язык и региональные параметры: нейтральный язык и региональные параметры, содержащие определенный язык и региональные параметры (например, en-US и en-GB).
- Языковой стандарт: тот же, что и язык и региональные параметры.
Коды языка и страны или региона
Формат RFC 4646 для имени языка и региональных параметров , — где определяет язык и определяет субкультуру. Примеры: es-CL для испанского языка (Чили), en-US для английского языка (США), en-AU для английского языка (Австралия). RFC 4646 — это комбинация двухбуквенного кода культуры ISO 639 в нижнем регистре (он связан с языком) и двухбуквенного кода субкультуры ISO 3166 в верхнем регистре (он связан со страной или регионом). Дополнительные сведения см. в разделе System.Globalization.CultureInfo.
Задачи локализации приложения
Глобализация и локализация приложения включает следующие задачи:
- Сделайте содержимое приложения ASP.NET Core локализуемым.
- Предоставление локализованных ресурсов для языков и региональных параметров, поддерживаемых приложением
- Реализация стратегии выбора языка и региональных параметров для каждого запроса
Дополнительные ресурсы
- Сделать содержимое приложения ASP.NET Core локализуемым
- Предоставление локализованных ресурсов для языков и региональных параметров в приложении ASP.NET Core
- Стратегии выбора языка и языка и региональных параметров в локализованном приложении ASP.NET Core
- Устранение неполадок ASP.NET основной локализации
- Глобализация и локализация приложений .NET
- Проект Localization.StarterWeb, используемый в этой статье.
- Ресурсы в RESX-файлах
- Набор средств многоязычных приложений Майкрософт
- Локализация и универсальные шаблоны
Авторы: Рик Андерсон (Rick Anderson), Дэмиен Боуден (Damien Bowden), Барт Каликсто (Bart Calixto), Надим Афана (Nadeem Afana) и Хишам Бин Атея (Hisham Bin Ateya)
Создание многоязычного веб-сайта позволит расширить аудиторию. ASP.NET Core предоставляет службы и ПО промежуточного слоя для локализации на разные языки и для разных региональных параметров.
В интернационализацию входит System.Globalization и локализация. Глобализация — это процесс разработки приложений, которые поддерживают разные языки и региональные параметры. Глобализация добавляет поддержку ввода отображения и вывода определенного набора языковых сценариев, относящихся к конкретным регионам.
Локализация — это процесс адаптации глобализованного приложения, уже подготовленного к локализации, к определенному языку, языковому стандарту и региональным параметрам. Дополнительные сведения см. в разделе Термины, относящиеся к глобализации и локализации ближе к концу этого документа.
Локализация приложения включает следующие задачи:
- обеспечение возможности локализации для содержимого приложения;
- Предоставление локализованных ресурсов для поддерживаемых языков и региональных параметров
- реализацию стратегии по выбору языка и региональных параметров для каждого запроса.
Обеспечение возможности локализации содержимого приложения
IStringLocalizer и IStringLocalizer создавались для повышения производительность при разработке локализованных приложений. IStringLocalizer использует классы ResourceManager и ResourceReader для предоставления ресурсов, связанных с определенным языком и региональными параметрами, во время выполнения. Этот интерфейс имеет индексатор и интерфейс IEnumerable для возврата локализованных строк. IStringLocalizer не требует сохранять строки на языке по умолчанию в файле ресурсов. Вы можете разрабатывать приложение, предназначенное для локализации, не создавая файлы ресурсов на ранних этапах разработки. В приведенном ниже коде показано, как подготовить строку «About Title» для локализации.
using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Localization; namespace Localization.Controllers < [Route("api/[controller]")] public class AboutController : Controller < private readonly IStringLocalizer_localizer; public AboutController(IStringLocalizer localizer) < _localizer = localizer; >[HttpGet] public string Get() < return _localizer["About Title"]; >> >В предыдущем коде реализация IStringLocalizer получена в результате внедрения зависимостей. Если локализованное значение для строки «About Title» не найдено, возвращается ключ индексатора, то есть строка «About Title». Вы можете оставить литеральные строки на языке по умолчанию и заключить их в средство локализации, чтобы сосредоточиться на разработке приложения. Вы разрабатываете приложение на языке по умолчанию и подготавливаете его к локализации, не создавая предварительно файл ресурсов по умолчанию. Вы также можете выбрать традиционный подход и предоставить ключ для извлечения строки на языке по умолчанию. Для многих разработчиков новый рабочий процесс, который не требует наличия файла RESX на языке по умолчанию и позволяет просто заключать строки для дальнейшей обработки, может помочь снизить затраты на локализацию приложения. Другие разработчики могут предпочесть традиционный рабочий процесс, так как он упрощает работу с более длинными строками и обновление локализованных строк.
Используйте реализацию IHtmlLocalizer для ресурсов, содержащих код HTML. Интерфейс IHtmlLocalizer кодирует в HTML аргументы, отформатированные в строке ресурса, но не кодирует в HTML саму строку. В выделенной ниже строке в HTML кодируется только значение параметра name .
using System; using Microsoft.AspNetCore.Http; using Microsoft.AspNetCore.Localization; using Microsoft.AspNetCore.Mvc; using Microsoft.AspNetCore.Mvc.Localization; namespace Localization.Controllers < public class BookController : Controller < private readonly IHtmlLocalizer_localizer; public BookController(IHtmlLocalizer localizer) < _localizer = localizer; >public IActionResult Hello(string name) < ViewData["Message"] = _localizer["Hello ", name]; return View(); >Как правило, требуется локализовать только текст, но не код HTML.
На самом нижнем уровне интерфейс IStringLocalizerFactory можно получить из внедрения зависимостей:
< public class TestController : Controller < private readonly IStringLocalizer _localizer; private readonly IStringLocalizer _localizer2; public TestController(IStringLocalizerFactory factory) < var type = typeof(SharedResource); var assemblyName = new AssemblyName(type.GetTypeInfo().Assembly.FullName); _localizer = factory.Create(type); _localizer2 = factory.Create("SharedResource", assemblyName.Name); >public IActionResult About() < ViewData["Message"] = _localizer["Your application description page."] + " loc 2: " + _localizer2["Your application description page."];В приведенном выше коде демонстрируются оба фабричных метода создания.
Вы можете разбивать локализованные строки по контроллеру, области или использовать всего один конвейер. В образце приложения для общих ресурсов применяется класс-заглушка с именем SharedResource .
// Dummy class to group shared resources namespace Localization < public class SharedResource < >>Некоторые разработчики используют класс Startup для хранения глобальных или общих строк. В примере ниже используются средства локализации InfoController и SharedResource .
public class InfoController : Controller < private readonly IStringLocalizer_localizer; private readonly IStringLocalizer _sharedLocalizer; public InfoController(IStringLocalizer localizer, IStringLocalizer sharedLocalizer) < _localizer = localizer; _sharedLocalizer = sharedLocalizer; >public string TestLoc()
Локализация представления
Служба IViewLocalizer предоставляет локализованные строки для представления. Класс ViewLocalizer реализует этот интерфейс и находит расположение ресурсов по пути к файлу представления. В следующем примере кода демонстрируется использование реализации IViewLocalizer по умолчанию:
@using Microsoft.AspNetCore.Mvc.Localization @inject IViewLocalizer Localizer @ < ViewData["Title"] = Localizer["About"]; >@ViewData["Title"].
@ViewData["Message"]
@Localizer["Use this area to provide additional information."]
Реализация IViewLocalizer по умолчанию находит файл ресурсов по имени файла представления. Возможности использовать глобальный общий файл ресурсов нет. ViewLocalizer реализует средство локализации с помощью интерфейса IHtmlLocalizer , поэтому Razor не кодирует локализованную строку в HTML. Вы можете параметризовать строки ресурсов, и IViewLocalizer будет кодировать в HTML параметры, но не строки ресурсов. Рассмотрим следующую разметку Razor:
@Localizer["Hello !", UserManager.GetUserName(User)]Файл ресурсов на французском языке может содержать следующие ресурсы:
Ключ Стоимость Hello ! Bonjour ! Преобразованное для просмотра представление будет содержать разметку HTML из файла ресурсов.
Как правило, требуется локализовать только текст, но не код HTML.
Чтобы использовать в представлении общий файл ресурсов, внедрите IHtmlLocalizer :
@using Microsoft.AspNetCore.Mvc.Localization @using Localization.Services @inject IViewLocalizer Localizer @inject IHtmlLocalizer SharedLocalizer @ < ViewData["Title"] = Localizer["About"]; >@ViewData["Title"].
@SharedLocalizer["Hello!"]
Локализация DataAnnotations
Сообщения об ошибках DataAnnotations локализуются с помощью IStringLocalizer . При использовании параметра ResourcesPath = "Resources" сообщения об ошибках в RegisterViewModel могут сохраняться по одному из следующих путей:
- Resources/ViewModels.Account.RegisterViewModel.fr.resx
- Resources/ViewModels/Account/RegisterViewModel.fr.resx
public class RegisterViewModel < [Required(ErrorMessage = "The Email field is required.")] [EmailAddress(ErrorMessage = "The Email field is not a valid email address.")] [Display(Name = "Email")] public string Email < get; set; >[Required(ErrorMessage = "The Password field is required.")] [StringLength(8, ErrorMessage = "The must be at least characters long.", MinimumLength = 6)] [DataType(DataType.Password)] [Display(Name = "Password")] public string Password < get; set; >[DataType(DataType.Password)] [Display(Name = "Confirm password")] [Compare("Password", ErrorMessage = "The password and confirmation password do not match.")] public string ConfirmPassword < get; set; >>Локализованы атрибуты, не связанные с проверкой.
Использование одной строки ресурса для нескольких классов
В следующем коде показано, как использовать одну строку ресурса для атрибутов проверки с несколькими классами:
public void ConfigureServices(IServiceCollection services) < services.AddMvc() .AddDataAnnotationsLocalization(options => < options.DataAnnotationLocalizerProvider = (type, factory) =>factory.Create(typeof(SharedResource)); >); >В предыдущем коде SharedResource — это класс, соответствующий файлу RESX, в котором хранятся сообщения о проверке. При таком подходе DataAnnotations будут использовать только SharedResource , а не ресурс для каждого класса.
Предоставление локализованных ресурсов для поддерживаемых языков и региональных параметров
SupportedCultures и SupportedUICultures
ASP.NET Core позволяет указывать два значения языка и региональных параметров: SupportedCultures и SupportedUICultures. Объект CultureInfo для SupportedCultures определения результатов функций, зависимых от языка и региональных параметров, таких как дата, время, число и форматирование валют. SupportedCultures также определяет порядок сортировки текста, соглашения о регистре символов и способы сравнения строк. Дополнительные сведения о том, как сервер получает данные о языке и региональных параметрах, см. в статьях о CultureInfo.CurrentCulture и CultureInfo.CurrentUICulture. Определяет SupportedUICultures , какие переведенные строки (из .resx файлов) будут искаться ResourceManager. ResourceManager ищет связанные с языком и региональными параметрами строки, которые определяются значением CurrentUICulture . Каждый поток в .NET имеет объекты CurrentCulture и CurrentUICulture . Платформа проверяет эти значения при обработке функций, зависящих от языка и региональных параметров. Если для языка и региональных параметров текущего потока задано значение en-US (английский, США), DateTime.Now.ToLongDateString() отображает Thursday, February 18, 2016 . Но если CurrentCulture имеет значение es-ES (испанский, Испания), результатом будет jueves, 18 de febrero de 2016 .
Файлы ресурсов
Файл ресурсов — это полезное средство для отделения локализуемых строк от кода. Переведенные строки на языках, отличных от языка по умолчанию, содержатся в отдельных файлах ресурсов с расширением RESX. Например, вам нужно создать файл ресурсов для испанского языка с именем Welcome.es.resx, который будет содержать переведенные строки. "es" — это код испанского языка. Чтобы создать этот файл ресурсов в Visual Studio, выполните указанные ниже действия.
- В Обозревателе решений щелкните правой кнопкой мыши папку, которая будет содержать файл ресурсов, а затем выберите пункты >Добавить>Новый элемент.

- В поле Поиск установленных шаблонов введите слово "ресурс" и укажите имя файла.

- Введите значение ключа (строку на исходном языке) в столбце Имя и переведенную строку в столбце Значение.
В Visual Studio отобразится файл Welcome.es.resx. 
Именование файлов ресурсов
Имена ресурсов представляют собой полные имена типов соответствующего класса за исключением имени сборки. Например, ресурс на французском языке в проекте, главная сборка которого имеет имя LocalizationWebsite.Web.dll , для класса LocalizationWebsite.Web.Startup будет иметь имя Startup.fr.resx. У ресурса для класса LocalizationWebsite.Web.Controllers.HomeController будет имя Controllers.HomeController.fr.resx. Если пространство имен целевого класса не совпадает с именем сборки, необходимо использовать полное имя типа. Например, в образце проекта ресурс для типа ExtraNamespace.Tools будет иметь имя ExtraNamespace.Tools.fr.resx.
В примере проекта метод ConfigureServices присваивает свойству ResourcesPath значение Resources, поэтому относительный путь к файлу ресурсов на французском языке для контроллера Home в проекте будет иметь вид Resources/Controllers.HomeController.fr.resx. Кроме того, для упорядочения файлов ресурсов можно использовать папки. Для контроллера Home путь будет иметь вид Resources/Controllers/HomeController.fr.resx. Если параметр ResourcesPath не используется, файл RESX будет находиться в базовом каталоге проекта. У файла ресурса для HomeController будет имя Controllers.HomeController.fr.resx. Выбор соглашения об именовании на основе точечной нотации или пути зависит от того, как следует упорядочивать файлы ресурсов.
Имя ресурса Точечная нотация или путь Resources/Controllers.HomeController.fr.resx Точки Resources/Controllers/HomeController.fr.resx Путь Файлы ресурсов, для которых используется директива @inject IViewLocalizer в представлениях Razor, следуют той же модели. Файлу ресурсов для представления может присваиваться имя на основе либо точечной нотации, либо пути. В файле ресурсов для представления Razor имитируется путь к связанному файлу представления. Если для ResourcesPath задано значение Resources, то файл ресурсов на французском языке, связанный с представлением Views/Home/About.cshtml , может иметь одно из следующих имен.
- Resources/Views/Home/About.fr.resx
- Resources/Views.Home.About.fr.resx
Если параметр ResourcesPath не используется, файл RESX для представления будет находиться в той же папке, что и представление.
RootNamespaceAttribute
Атрибут RootNamespaceAttribute предоставляет корневое пространство имен сборки, если корневое пространство имен сборки отличается от имени сборки.
Это может произойти, если имя проекта — недопустимый идентификатор .NET. Например, my-project-name.csproj будет использовать корневое пространство имен my_project_name и имя сборки my-project-name , что повлечет эту ошибку.
Если корневое пространство имен сборки отличается от имени сборки
- Локализация не работает по умолчанию.
- Локализация завершается сбоем из-за метода поиска ресурсов в сборке. RootNamespace — это значение во время сборки, которое недоступно выполняющемуся процессу.
Если RootNamespace отличается от AssemblyName , включите следующее в файл AssemblyInfo.cs (со значениями параметров, замененными фактическими значениями).
using System.Reflection; using Microsoft.Extensions.Localization; [assembly: ResourceLocation("Resource Folder Name")] [assembly: RootNamespace("App Root Namespace")]Приведенный выше код обеспечивает успешное разрешение RESX-файлов.
Резервный язык и региональные параметры
При поиске ресурса локализации использует резервный язык и региональные параметры. Если запрошенный язык и региональные параметры не найдены, используется родительский язык и региональные параметры. В стороне CultureInfo.Parent свойство представляет родительский язык и региональные параметры. Обычно (но не всегда) это означает удаление национального символа из ISO. Например, диалект испанского в Мексике — es-MX. Родительский элемент "es" (испанский) не относится к той или иной стране.
Допустим, сайт получает запрос на ресурс "Приветствие" с использованием языка и региональных параметров fr-CA. Система локализации ищет в следующих ресурсах по порядку и выбирает первое совпадение:
- Welcome.fr-CA.resx
- Welcome.fr.resx
- Welcome.resx (если NeutralResourcesLanguage — fr-CA)
Если вы удалите указатель языка и региональных параметров ".fr" и при этом задан французский язык и региональные параметры, будет считан файл ресурсов по умолчанию и строки локализуются. Диспетчер ресурсов назначает ресурс по умолчанию или резервный ресурс на тот случай, когда соответствия запрошенному языку и региональным параметрам не найдено. Если нужно, чтобы при отсутствии ресурса для запрошенного языка и региональных параметров просто возвращался ключ, не используйте файл ресурсов по умолчанию.
Создание файлов ресурсов с помощью Visual Studio
Если вы создаете в Visual Studio файл ресурсов, в имени которого не указаны язык и региональные параметры (например, Welcome.resx), Visual Studio создаст класс C# со свойством для каждой строки. В ASP.NET Core обычно требуется иное поведение. Как правило, файл ресурсов RESX по умолчанию (файл RESX без указания языка и региональных параметров) не используется. Мы рекомендуем создать файл RESX с указанием языка и региональных параметров (например, Welcome.fr.resx). При создании файла RESX с указанием языка и региональных параметров среда Visual Studio не создает файл класса.
Добавление других языков и региональных параметров
Каждое сочетание языка и региональных параметров (кроме языка по умолчанию) требует уникального файла ресурсов. Создавая файлы ресурсов для разных языков, языковых стандартов и региональных параметров, вы включаете в их имена коды языков ISO (например, en-us, ru-ru и fr-ca). Эти коды ISO помещаются между именем файла и расширением RESX, например Welcome.es-MX.resx (испанский, Мексика).
реализацию стратегии по выбору языка и региональных параметров для каждого запроса.
Настройка локализации
Локализация настраивается в методе Startup.ConfigureServices :
services.AddLocalization(options => options.ResourcesPath = "Resources"); services.AddMvc() .AddViewLocalization(LanguageViewLocationExpanderFormat.Suffix) .AddDataAnnotationsLocalization();- Метод AddLocalization добавляет службы локализации в контейнер служб. В приведенном выше коде также задается путь к ресурсам "Resources".
- Метод AddViewLocalization добавляет поддержку файлов локализованных представлений. В этом примере локализация образца представления основана на суффиксе файла представления, Например, fr в Index.fr.cshtml файле.
- Метод AddDataAnnotationsLocalization добавляет поддержку локализованных сообщений проверки DataAnnotations посредством абстракций IStringLocalizer .
Промежуточный слой локализации
Текущий язык и региональные параметры в запросе задаются в промежуточном слое локализации. Промежуточный слой локализации включается в методе Startup.Configure . ПО промежуточного слоя локализации должно настраиваться перед другим ПО промежуточного слоя, которое может проверять язык и региональные параметры запроса (например, app.UseMvcWithDefaultRoute() ). ПО промежуточного слоя локализации должно находиться после ПО промежуточного слоя маршрутизации, если используется RouteDataRequestCultureProvider. Дополнительные сведения о порядке ПО промежуточного слоя см. в статье ПО промежуточного слоя ASP.NET Core.
var supportedCultures = new[] < "en-US", "fr" >; var localizationOptions = new RequestLocalizationOptions().SetDefaultCulture(supportedCultures[0]) .AddSupportedCultures(supportedCultures) .AddSupportedUICultures(supportedCultures); app.UseRequestLocalization(localizationOptions);Если вы хотите увидеть комментарии к коду, переведенные на языки, отличные от английского, сообщите нам на странице обсуждения этой проблемы на сайте GitHub.
UseRequestLocalization инициализирует объект RequestLocalizationOptions . При каждом запросе проверяется список поставщиков RequestCultureProvider в объекте RequestLocalizationOptions и используется первый поставщик, который может успешно определить язык и региональные параметры запроса. Поставщики по умолчанию берутся из класса RequestLocalizationOptions :
- QueryStringRequestCultureProvider
- CookieRequestCultureProvider
- AcceptLanguageHeaderRequestCultureProvider
В списке по умолчанию поставщики следуют от наиболее конкретных до наиболее общих. Далее в этой статье вы узнаете, как можно изменить этот порядок и даже добавить пользовательский поставщик языка и региональных параметров. Если ни один из поставщиков не может определить язык и региональные параметры запроса, используется DefaultRequestCulture .
QueryStringRequestCultureProvider
Для задания CultureInfoнекоторых приложений используется строка запроса. Если в приложении для этого применяется файл cookie или заголовок Accept-Language, добавление строки запроса к URL-адресу может быть полезным в целях отладки и тестирования кода. По умолчанию поставщик QueryStringRequestCultureProvider регистрируется в качестве первого поставщика локализации в списке RequestCultureProvider . Вы передаете параметры строки запроса culture и ui-culture . В следующем примере в качестве языка и региональных параметров (язык и регион) задаются испанский язык и Мексика:
Если передан только один из двух параметров ( culture или ui-culture ), поставщик строки запроса задаст с его помощью оба значения. Например, если передан только язык и региональные параметры, будут заданы оба значения Culture и UICulture :
http://localhost:5000/?culture=es-MXCookieRequestCultureProvider
Рабочие приложения часто предоставляют механизм для указания языка и региональных параметров с помощью соответствующего файла cookie ASP.NET Core. Чтобы создать файл MakeCookieValue , используйте метод cookie.
CookieRequestCultureProvider DefaultCookieName возвращает имя файла cookie по умолчанию, с помощью которого отслеживается предпочтительный язык и региональные параметры пользователя. Имя cookie по умолчанию — .AspNetCore.Culture .
Файл cookie имеет формат c=%LANGCODE%|uic=%LANGCODE% , где c — это Culture , а uic — это UICulture , например:
c=en-UK|uic=en-USЕсли указаны либо только язык и региональные параметры, либо только язык и региональные параметры пользовательского интерфейса, это значение будет использоваться для обоих параметров.
Заголовок HTTP Accept-Language
Заголовок Accept-Language может задаваться в большинстве браузеров и изначально предназначался для указания языка пользователя. Он показывает, какой язык был выбран в браузере или унаследован от базовой операционной системы. Заголовок HTTP Accept-Language в запросе из браузера — это не самый надежный способ определения предпочтительного языка пользователя (см. статью Настройка языковых предпочтений в браузере). В рабочем приложении должна быть возможность выбора языка и региональных параметров пользователем.
Задание заголовка HTTP Accept-Language в Internet Explorer

- Щелкните значок шестеренки и выберите пункт Свойства браузера.
- Нажмите кнопку Языки.
- Нажмите Задать предпочитаемые языки.
- Нажмите Добавить язык.
- Добавьте язык.
- Выберите язык, а затем нажмите кнопку Вверх.
Использование пользовательского поставщика
Предположим, необходимо, чтобы ваши клиенты могли сохранять информацию о своем языке и региональных параметрах в ваших базах данных. Можно написать поставщик, который будет искать эти значения для пользователя. В следующем примере кода показано, как добавить пользовательский поставщик:
private const string enUSCulture = "en-US"; services.Configure(options => < var supportedCultures = new[] < new CultureInfo(enUSCulture), new CultureInfo("fr") >; options.DefaultRequestCulture = new RequestCulture(culture: enUSCulture, uiCulture: enUSCulture); options.SupportedCultures = supportedCultures; options.SupportedUICultures = supportedCultures; options.AddInitialRequestCultureProvider(new CustomRequestCultureProvider(async context => < // My custom request culture logic return await Task.FromResult(new ProviderCultureResult("en")); >)); >);Для добавления или удаления поставщиков локализации используйте объект RequestLocalizationOptions .
Изменение порядка поставщиков языка и региональных параметров запроса
В RequestLocalizationOptions три поставщика языка и региональных параметров запроса по умолчанию: QueryStringRequestCultureProvider, CookieRequestCultureProvider и AcceptLanguageHeaderRequestCultureProvider. Чтобы изменить порядок этих поставщиков, используйте свойство [ RequestLocalizationOptions.RequestCultureProviders ]](xref:Microsoft.AspNetCore.Builder.RequestLocalizationOptions.RequestCultureProviders), как показано ниже:
app.UseRequestLocalization(options => < var questStringCultureProvider = options.RequestCultureProviders[0]; options.RequestCultureProviders.RemoveAt(0); options.RequestCultureProviders.Insert(1, questStringCultureProvider); >);В приведенном примере порядок QueryStringRequestCultureProvider и CookieRequestCultureProvider изменен, поэтому RequestLocalizationMiddleware сначала ищет язык и региональные параметры в файлах cookie, а затем в строке запроса.
Как уже упоминалось, нужно добавить пользовательский поставщик с помощью метода AddInitialRequestCultureProvider, который назначает приоритет 0 , чтобы этот поставщик имел приоритет над другими.
Задание языка и региональных параметров программным образом
В образце проекта Localization.StarterWeb в GitHub есть пользовательский интерфейс для задания значения Culture . Файл Views/Shared/_SelectLanguagePartial.cshtml позволяет выбрать язык и региональные параметры из списка поддерживаемых языков и региональных параметров:
@using Microsoft.AspNetCore.Builder @using Microsoft.AspNetCore.Http.Features @using Microsoft.AspNetCore.Localization @using Microsoft.AspNetCore.Mvc.Localization @using Microsoft.Extensions.Options @inject IViewLocalizer Localizer @inject IOptions LocOptions @< var requestCulture = Context.Features.Get(); var cultureItems = LocOptions.Value.SupportedUICultures .Select(c => new SelectListItem < Value = c.Name, Text = c.DisplayName >) .ToList(); var returnUrl = string.IsNullOrEmpty(Context.Request.Path) ? "~/" : $"~"; >Файл Views/Shared/_SelectLanguagePartial.cshtml добавляется в раздел footer файла макета, поэтому он доступен всем представлениям:
@RenderBody()