Поддержка интернационализации в инструментах разработки программного обеспечения жизненно важна для включения эффективной глобализации. Если существует удаленная возможность, что вы могли сотрудничать в будущем с другими из локалей, рассмотреть интернационализацию от начала проекта. Интернационализация может предотвратить, переделывают или имеющий необходимость разработать новый образцовый дизайн. Соответствующее требование касается настроек локали.
Подготовьтесь генерировать код для смешанных языков и локалей
Сгенерируйте и рассмотрите код со смешанными языками и смешанными локалями
На компьютере установка локали задает язык (кодирование набора символов) для пользовательского интерфейса и форматов отображения для получения информации, таких как время, дата и валюта. Кодирование диктует количество символов, которые может представить локаль. Например, кодированный набор символов US-ASCII (кодовый набор) задает 128 символов. Кодовый набор Unicode®, такой как UTF-8, задает больше чем 1 100 000 символов.
Для генерации кода установка локали определяет кодирование набора символов сгенерированного содержимого файла. Чтобы избежать искаженного текста или неправильно отображаемых символов, установка локали для вашего сеанса MATLAB® должна быть совместима с установкой для вашего компилятора и операционной системы. Для получения информации о нахождении и изменении настроек операционной системы, смотрите Интернационализацию (MATLAB) или см. документацию по операционной системе.
Чтобы проверять модель на символы, которые не могут быть представлены в установке локали вашего текущего сеанса работы с MATLAB, используйте модель Check проверки Simulink® Model Advisor для внешних символов (Simulink).
Чтобы подготовиться генерировать код для модели, идентифицируйте:
Локаль операционной системы.
Локаль сеанса работы с MATLAB.
Требования генерации кода для:
Файлы Компилятора Выходного языка
Файлы шаблона генерации кода, которые включают комментарии (требует Embedded Coder®),
Файлы компилятора выходного языка поддерживают пользовательскую кодировку по умолчанию только. Чтобы произвести международный, пользовательский сгенерированный код, который является портативным, используйте 7-битный набор символов ASCII.
Генератор кода заменяет символы, которые не представлены в кодировании набора символов модели с escape-последовательностями XML. Замены escape-последовательности происходят для блока, сигнала и имен объектов Stateflow®, которые появляются в:
Комментарии сгенерированного кода
Генерация кода сообщает
Блокируйте пути, регистрируемые к MAT-файлам
Блокируйте пути, регистрируемые к файлам API C
(или model_capi.c
.cpp
) и model_capi.h
Генератор кода заменяет символы, которые не представлены в кодировании набора символов для модели с escape-последовательностями XML. Замены escape-последовательности происходят для блока, сигнала и имен объектов Stateflow, которые появляются в Комментариях в файлах шаблона генерации кода (CGT).
По умолчанию файлы шаблона генерации кода не содержат информацию о кодировании набора символов. Операционная система читает файлы, с помощью ее текущего кодирования, независимо от кодирования, которое вы используете, чтобы записать файл. Можно включить замены escape-последовательности путем добавления следующей лексемы наверху файла шаблона:
<encodingIn = "encoding">
Замените encoding
на строку, которая называет схему кодирования стандартного символа, такую как UTF-8
, ISO-8859–1
или windows-1251
.
Этот пример показывает содержимое из файла rtwdemo_unicode.cgt в сеансе работы с MATLAB для windows-1251
. Пример использует лексему encodingIn
, чтобы установить кодирование на UTF–8
, который является правильным значением для генерации кода.
Этот пример показывает, как использовать генератор кода, чтобы сгенерировать и рассмотреть код для использования на смешанных языках и смешанных локалях.
Перед использованием этого примера смотрите Интернационализацию и Генерацию кода (Simulink Coder) или Интернационализация и Генерация кода.
Настройка модели rtwdemo_unicode
использует системный конечный файл Embedded Coder (R) ert.tlc
. Чтобы видеть поддержку интернационализации и локализации с Simulink Coder®, сконфигурируйте модель, чтобы использовать системный конечный файл grt.tlc
. Пример указывает на поддержку, которая характерна для Embedded Coder® (например, шаблоны генерации кода).
Настройка модели задает файлы и настройки, которые управляют, как генератор кода обрабатывает локализацию для:
C и API-интерфейсы C++
Файлы шаблона генерации кода (CGT) (требует Embedded Coder®),
Файлы Компилятора выходного языка (TLC), которые применяют индивидуальные настройки кода (требует Embedded Coder®),
Откройте модель rtwdemo_unicode
в качестве примера.
Метки в модели появляются на нескольких языках (арабский, китайский, английский, немецкий и японский язык) и различные символы Unicode.
model = 'rtwdemo_unicode';
open_system(model);
Проверьте настройки локали
Проверьте, что установка локали для вашего MATLAB совместима с вашим компилятором. См. документацию для своей операционной системы или следующую документацию MATLAB:
Проверьте модель для использования внешних символов
чтобы проверить модель для символов, которые генератор кода не может представлять в кодировании набора текущего символа модели, используйте модель Check проверки Simulink® Model Advisor для внешних символов.
1. Откройте Model Advisor в Simulink®. Выберите Analysis> Model Advisor> Model Advisor. Или в Командном окне введите:
modeladvisor('rtwdemo_unicode')
2. Расширьтесь продуктом.
3. Расширьте Simulink.
4. Выберите модель Check для внешних символов
5. Нажмите Run This Check.
6. Рассмотрите результаты. Появляются несколько предупреждений. Проверьте, что символы в модели могут быть представлены в кодировании набора текущего символа.
7. Закройте Model Advisor.
Файлы шаблона генерации кода
Чтобы использовать файл шаблона генерации кода с unicode символами при генерации кода, завершитесь, эти шаги (требует Embedded Coder®). В противном случае перейдите к следующему разделу.
1. Откройте диалоговое окно Configuration Parameters.
2. Перейдите Генерации кода> панель Шаблона. Модель сконфигурирована, чтобы использовать файл шаблона генерации кода rtwdemo_unicode.cgt
. Тот файл добавляет комментарии в верхнюю часть файлов сгенерированного кода. Для генератора кода, чтобы применить замены escape-последовательности для файла .cgt
, включите замены путем определения:
<encodingIn = "encoding-name">
3. Откройте файл /toolbox/rtw/rtwdemos/rtwdemo_unicode.cgt
.
edit rtwdemo_unicode.cgt
4. Найдите строку кода, которая включает замены escape-последовательности для набора символов, кодирующего UTF-8
.
<encodingIn = "UTF-8">
5. Закройте файл /toolbox/rtw/rtwdemos/rtwdemo_unicode.cgt
.
Сгенерированный шаблон настройки файла
Чтобы использовать шаблоны настройки файла с unicode символами при генерации кода, завершитесь, эти шаги (требует Embedded Coder®). В противном случае перейдите к следующему разделу.
Можно задать индивидуальные настройки к файлам сгенерированного кода при помощи кода TLC. Файлы TLC поддерживают пользовательскую кодировку по умолчанию только. Чтобы произвести международный пользовательский сгенерированный код, который является портативным, используйте 7-битный набор символов ASCII.
1. Откройте диалоговое окно Configuration Parameters.
2. Перейдите Генерации кода> панель Шаблона. Модель сконфигурирована, чтобы использовать файл настройки кода example_file_process.tlc
. Тот файл настраивает сгенерированный код непосредственно перед тем, как генератор кода пишет файлы кода. Например, файл добавляет, что исходный файл C, соответствующий, включают файл и операторы #define
и #include
.
3. Откройте файл /toolbox/rtw/rtwdemos/example_file_process.tlc
.
edit example_file_process.tlc
4. Прежде, чем сгенерировать код, не прокомментируйте следующую строку кода:
% %% %assign ERTCustomFileTest = TLC_TRUE
5. Закройте файл /toolbox/rtw/rtwdemos/example_file_process.tlc
.
Сгенерируйте код С
Сгенерируйте код С и отчет генерации кода.
evalc('rtwbuild(''rtwdemo_unicode'')');
Рассмотрите сгенерированный код
Для символов, которые не находятся в текущем кодировании набора символов MATLAB®, генератор кода использует замены escape-последовательности, чтобы представить символы правильно в отчете генерации кода.
1. Если отчет генерации кода для модели rtwdemo_unicode
не открыт в Командном окне, введите:
coder.report.open('rtwdemo_unicode')
2. Рассмотрите сгенерированный код в rtwdemo_unicode.c
и rtwdemo_unicode.h
. Имена элементов модели появляются в комментариях к коду, как замена называет на локальном языке.
3. Откройте Отчет Трассируемости. Отчет поддерживает информацию о трассируемости, даже когда имя содержит символы, которые не представлены в текущем кодировании. Имена элементов модели появляются в отчете, как замена называет на локальном языке.
4. Прокрутите вниз к и щелкните по ссылке участка кода для первого Графика (State 'Selection' <S2>:23
). Представление отчета изменяется, чтобы показать соответствующий код в rtwdemo_unicode.c
.
5. В комментарии к коду щелкните по ссылке <S2>:23
. Окно модели показывает график в новой вкладке.
6. В окне модели щелкните правой кнопкой по тому графику. Выберите C/C ++ Code> Navigate to C/C ++ Code. Представление отчета изменяется, чтобы показать именованный постоянный раздел кода для того графика.
7. Закройте отчет генерации кода, Model Advisor и модель. В Командном окне введите:
coder.report.close();
bdclose('all');
Сгенерируйте код С++
Сгенерируйте Код С++ и отчет генерации кода.
1. Откройте модель.
model = 'rtwdemo_unicode';
open_system(model);
2. Измените Параметры конфигурации> Генерация кода> Язык к C++
. Или в Командном окне введите:
set_param('rtwdemo_unicode','TargetLang','C++');
3. Измените упаковку интерфейса Configuration Parameters> Code Generation> Interface> Code на C++ class
. Или в Командном окне введите:
set_param('rtwdemo_unicode','CodeInterfacePackaging','C++ class');
4. Сгенерируйте Код С++ и отчет генерации кода.
evalc('rtwrebuild(''rtwdemo_unicode'')');
5. Чтобы видеть поддержку интернационализации и локализации, рассмотрите сгенерированный код. Смотрите Анализ Сгенерированный код.
6. Закройте отчет генерации кода и модель. В Командном окне введите:
coder.report.close();
bdclose('all');