国际化和代码生成
软件开发工具中的国际化支持对于实现高效全球化至关重要。如果将来可能跨区域设置与他人协作,从工程开始就应考虑国际化。支持国际化可以避免后期修改或不得不开发新模型设计。相关要求涉及到区域设置。
区域设置
在计算机上,区域设置定义用户界面的语言(字符集编码)以及时间、日期和货币等信息的显示格式。编码规定区域可以显示的字符数。例如,US-ASCII 编码字符集(代码集)定义 128 个字符。Unicode® 代码集,如 UTF-8,定义超过 1100000 个字符。
对于代码生成,区域设置决定所生成文件内容的字符集编码。为避免文本乱码或字符显示不正确,MATLAB® 会话的区域设置必须与编译器和操作系统的设置兼容。有关查找和更改操作系统设置的信息,请参阅国际化 或操作系统文档。
准备生成支持混合语言和区域设置的代码
要准备为模型生成代码,请确定:
操作系统区域设置。
MATLAB 会话的区域设置。
以下各项的代码生成要求:
Target Language Compiler 文件
包含注释的代码生成模板文件(需要 Embedded Coder®)
字符集限制
Target Language Compiler 文件仅支持用户默认编码。要生成可移植的国际自定义生成代码,请使用 7 位 ASCII 字符集。
XML 转义序列替换
代码生成器用 XML 转义序列替换无法以模型的字符集编码表示的字符。对于出现在以下位置的模块、信号和 Stateflow® 对象名称,会进行转义序列替换:
生成的代码注释
代码生成报告
记录到 MAT 文件的模块路径
记录到 C API 文件
(或model
_capi.c.cpp
)和
的模块路径model
_capi.h
生成和检查混用多种语言和区域设置的代码
此示例说明如何使用代码生成器生成和查看要在具有多种语言和多种区域设置环境中使用的代码。
在使用本示例之前,请参阅国际化和代码生成或国际化和代码生成 (Embedded Coder)。
rtwdemo_unicode
模型配置使用 Embedded Coder® ert.tlc
系统目标文件。要查看 Simulink® Coder™ 的国际化和本地化支持,请将模型配置为使用 grt.tlc
系统目标文件。该示例指示特定于 Embedded Coder 的支持(例如,代码生成模板)。
模型配置指定文件和设置,用于控制代码生成器如何处理以下内容的本地化:
C 和 C++ API 接口
代码生成模板 (CGT) 文件(需要 Embedded Coder)
应用代码自定义的 Target Language Compiler (TLC) 文件(需要 Embedded Coder)
打开示例模型 rtwdemo_unicode
。
打开示例模型 rtwdemo_unicode
。模型中的标签显示为多种语言(阿拉伯语、中文、英语、德语和日语)和各种 Unicode 符号。
model = 'rtwdemo_unicode'; open_system(model); %
打开 Embedded Coder
在 Apps 选项卡中,选择 Embedded Coder。
验证区域设置
验证 MATLAB® 软件的区域设置是否与您的编译器兼容。请参阅您的操作系统文档或以下 MATLAB 文档:
代码生成模板文件
要在生成代码时使用包含 Unicode 字符的代码生成模板文件,请完成以下步骤(需要 Embedded Coder)。否则,请转到下一节。
1.打开 Configuration Parameters 对话框。
2.导航到 Code Generation > Template 窗格。模型配置为使用代码生成模板文件 rtwdemo_unicode.cgt
。该文件会在生成的代码文件的顶部添加注释。要使代码生成器对 .cgt
文件应用转义序列替换,请通过指定以下内容启用替换:
<encodingIn = "encoding-name">
3.打开文件 /toolbox/rtw/rtwdemos/rtwdemo_unicode.cgt
。
edit rtwdemo_unicode.cgt
4.找到为字符集编码 UTF-8
启用转义序列替换的代码行。
<encodingIn = "UTF-8">
5.关闭文件 /toolbox/rtw/rtwdemos/rtwdemo_unicode.cgt
。
生成的文件自定义模板
要在生成代码时使用包含 Unicode 字符的文件自定义模板,请完成以下步骤(需要 Embedded Coder)。否则,请转到下一节。
您可以使用 TLC 代码为生成的代码文件指定自定义。TLC 文件仅支持用户默认编码。要生成可移植的国际自定义生成代码,请使用 7 位 ASCII 字符集。
1.打开 Configuration Parameters 对话框。
2.导航到 Code Generation > Template 窗格。该模型配置为使用代码自定义文件 example_file_process.tlc
。该文件在代码生成器写入代码文件之前对生成的代码进行自定义。例如,该文件添加一个 C 源文件、对应的 include 文件以及 #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
。
生成 C 代码和报告
生成 C 代码和代码生成报告。
evalc('slbuild(''rtwdemo_unicode'')');
查看生成的代码
对于不在当前 MATLAB 字符集编码中的字符,代码生成器将使用转义序列替换在代码生成报告中正确显示这些字符。
1.如果模型 rtwdemo_unicode
的代码生成报告尚未打开,请在命令行窗口中键入:
coder.report.open('rtwdemo_unicode')
2.在 rtwdemo_unicode.c
和 rtwdemo_unicode.h
中查看生成的代码。模型元素的名称在代码注释中显示为本地语言的替换名称。
3.打开 Traceability Report。此报告保存可追溯性信息,即使名称中包含当前编码未表示的字符时也是如此。模型元素的名称在报告中显示为本地语言的替换名称。
4.向下滚动并点击第一个图 (State 'Selection' <S2>:23
) 的代码位置链接。报告视图发生改变,以显示 rtwdemo_unicode.c
中的相应代码。
5.在代码注释中,点击 <S2>:23
链接。模型窗口将在新选项卡上显示该图。
6.在模型窗口中,右键点击该图。从上下文菜单中,选择 C/C++ Code > Navigate to C/C++ Code。报告视图发生改变,以显示该图的命名常量代码段。
7.关闭代码生成报告、模型顾问和模型。在命令行窗口中键入:
coder.report.close();
bdclose('all');
生成 C++ 代码
生成 C++ 代码和代码生成报告。
1.打开模型。
model = 'rtwdemo_unicode';
open_system(model);
2.将模型配置参数 Language 设置为 C++
。或者,在命令行窗口中键入:
set_param('rtwdemo_unicode','TargetLang','C++');
3.将模型配置参数 Code interface packaging 设置为 C++ class
。或者,在命令行窗口中键入:
set_param('rtwdemo_unicode','CodeInterfacePackaging','C++ class');
4.生成 C++ 代码和代码生成报告。
evalc('rtwrebuild(''rtwdemo_unicode'')');
5.要查看国际化和本地化支持,请查看生成的代码。请参阅查看生成的代码。
6.关闭代码生成报告和模型。在命令行窗口中键入:
coder.report.close();
bdclose('all');