Python 模块的国际化
当使用 Python 模块分布地理处理工具箱时,可对模块进行自定义以使其支持 ArcGIS 所支持的所有语言。这些受支持语言的帮助和支持文件存储在 help 目录中。以下显示了 help 目录结构,假设该目录针对全部 10 种语言创建,并使用英语作为默认语言:
操作系统的区域设置用于确定最初将搜索哪个目录。顶层的 gp 目录适用于英语;如果未在其中一个特定语言的目录中找到要搜索的文件,则将默认搜索此目录。messages 目录中包含 Python 工具箱和 Python 脚本工具中使用的可本地化字符串的 .xml 文件,而 toolboxes 目录用于覆盖二进制工具箱(包含模型和脚本工具的自定义工具箱)的可本地化标注。
gp 目录存储了工具箱和工具的侧面板帮助 .xml 文件。这些 .xml 文件在工具箱的元数据中生成,可使用下面的 createtoolboxsupportfiles 函数在项目描述 快捷菜单中对该元数据进行编辑。该命令适用于任何工具箱。
确保在运行命令之前已在工具箱中设置别名。需要使用别名来生成侧面板帮助文件。
arcpy.gp.createtoolboxsupportfiles(<.tbx 或 .pyt 的路径>)
上述 esri 文件夹结构中能够找到的所有工具箱支持文件均由该命令生成。esri 目录的创建位置与命令输入路径中工具箱所指向的位置相同。新生成的 esri 目录结构应为如下所示
侧面板帮助文件放置到 esri/help/gp 目录中,可本地化的标注文件放置到 esri/help/gp/toolboxes 目录中,工具箱的 ArcPy 包装在 esri/arcpy 目录中创建。此外,需要在 esri/help/gp 目录中创建 messages 目录,以使脚本工具或 Python 工具箱中使用的错误消息能够进行本地化;如果尚未创建,必须将存储着工具箱和任何受支持的 Python 脚本的 toolboxes 目录复制到现有的分布结构中。在创建 messages 目录并将 toolboxes 目录复制到 esri 目录后,结构应为如下所示
通过在 esri/help/gp 和 esri/help/gp/toolboxes 下创建特定语言的 .xml 文件以使已进行本地化的工具箱和工具属性就位后,还需要一个额外的 .xml 文件来存储脚本工具和 Python 工具箱中使用的已本地化的错误消息。在 esri/help/messages 目录中,创建名为 messages.xml 的新 .xml 文件。
用于创建 messages.xml 的示例代码:
<Messages>
<Message><ID>unique_string</ID><Description>%1 welcome to the sample tool</Description></Message>
</Messages>
要反映此更改,需要在通过 Python 模块扩展地理处理中对 SamplePythonToolbox.pyt 的执行方法进行编辑,以便使用 AddIDMessage 方法而不使用 AddMessage 方法。新的执行方法应为
用于在 SamplePythonToolbox.pyt 中编辑执行方法的示例代码:
def execute(self, parameters, messages):
"""The source code of the tool."""
messages.AddIDMessage('informative', 'unique_string', os.getenv('username') )
foo.hello()
return
AddIDMessage 方法提供了对 esri/help/messages 目录的 messages.xml 文件中所存储的外部消息的有效访问方法。这种情况下,该方法使用标有 unique_string ID 的消息。消息可以是任意字符串。Python ID 消息可以是整型,也可以是字符串;整型将参考 Esri 消息,字符串应由第三方开发人员或用户使用。由于确保字符串的唯一性更为容易,所以建议使用公司名称来设置消息 ID。
完成上述更改后,新的分布目录结构应为如下所示
要反映这些更改,需对 setup.py 进行编辑。要进行本地化的新 setup.py 应为
用于在 setup.py 中加入本地化目录的示例代码:
from distutils.core import setup
setup(name='foo',
version='1.0',
packages=['foo'],
package_dir={'foo': 'foo'},
package_data={'foo': ['esri/toolboxes/*.*', 'esri/arcpy/*.*', 'esri/help/gp/*.*',
'esri/help/gp/messages/*.*', 'esri/help/gp/toolboxes/*.*']},
)
如上所述,现在可以将 .xml 文件编辑为工具箱和模块所支持的任何语言并复制到对应的语言目录中。如果针对西班牙语和英语分布语言文件,则目录结构应为如下所示
要实施西班牙语的本地化分布更改,需对 setup.py 进行编辑。要加入西班牙语本地化的新 setup.py 应为
用于在 setup.py 中加入西班牙语本地化目录的示例代码:
from distutils.core import setup
setup(name='foo',
version='1.0',
packages=['foo'],
package_dir={'foo': 'foo'},
package_data={'foo': ['esri/toolboxes/*.*', 'esri/arcpy/*.*',
'esri/help/gp/*.*', 'esri/help/gp/messages/*.*',
'esri/help/gp/toolboxes/*.*', 'esri/help/es/gp/*.*',
'esri/help/es/gp/messages/*.*', 'esri/help/es/gp/toolboxes/*.*']},
)
遵循本过程,可以构建并分布一个独立的可安装包,该包支持多种语言,并能以一种简单的基于 .xml 的方法对操作系统的区域设置做出响应。通过 Python 模块扩展地理处理,可对 ArcGIS 中支持的全部 10 种语言进行分布,而无需为每种语言创建工具箱和工具。