当使用 Python 模块分发地理处理工具箱时,可对模块进行自定义以使其支持 ArcGIS 所支持的所有语言。这些受支持语言的帮助和支持文件存储在 esri/help 目录中。以下显示了 help 目录结构的子集,以及 ArcGIS Pro 支持的前五种语言(默认值英语后以字母顺序排列):
help
├──gp (English - Default)
│ ├──messages
│ └──toolboxes
├──ar (Arabic)
│ └──gp
│ ├──messages
│ └──toolboxes
├──cs (Czech)
│ └──gp
│ ├──messages
│ └──toolboxes
├──de (German)
│ └──gp
│ ├──messages
│ └──toolboxes
└──es (Spanish)
└──gp
├──messages
└──toolboxes
括号中的完整语言名称不是文件夹名称的一部分,应将其省略。其他语言为 fi(芬兰语)、fr(法语)、he(希伯来语)、it(意大利语)、ja(日语)、ko(韩语)、pl(波兰语)、pt-BR(葡萄牙语 - 巴西)、ru(俄语)、sv(瑞典语)、tr(土耳其语)、zh-CN(简体中文)以及 zh-TW(繁体中文)。
ArcGIS Pro 的语言设置用于确定最初将搜索的目录。顶层的 gp 目录适用于英语;如果未在其中一个特定语言的目录中找到要搜索的文件,则将默认搜索此目录。特定于语言的目录内的每个 gp 目录将存储工具箱和工具中侧面板帮助的特定于语言的元数据 .xml 文件。gp/messages 子目录中包含 Python 工具箱和 Python 脚本工具中使用的可本地化字符串的 .xml 文件,而 gp/toolboxes 子目录用于覆盖二进制工具箱(包含模型和脚本工具的自定义工具箱)的可本地化标注。可以使用 arcpy.gp.createtoolboxsupportfiles(<path to .tbx or .pyt>) 函数生成这些文件和 ArcPy 包装器。
gp ├ SamplePythonToolbox_toolbox.xml ├ SampleTool_SamplePythonToolbox.xml ├──messages └──toolboxes └ SamplePythonToolbox.xml
创建特定于语言的子目录的最简单方法是首先为本地语言(在本例中为英语)gp 目录创建文件夹结构。通过 Python 模块扩展地理处理后,通过在 esri/help/gp 和 esri/help/gp/toolboxes 下创建 .xml 文件对工具箱和工具的属性进行本地化后,需要一个附加 .xml 文件用于存储脚本工具或 Python 工具箱中使用的本地化消息。在 esri/help/messages 目录中,创建名为 messages.xml 的 .xml 文件。
以下是用于创建 messages.xml 的示例代码:
<Messages>
<Message><ID>unique_id</ID><Description>%1, welcome to the sample tool</Description></Message>
</Messages>
要反映此更改,需要在通过 Python 模块扩展地理处理中对 SamplePythonToolbox.pyt 的 execute 方法进行编辑,以便使用 AddIDMessage 方法而不使用 AddMessage 方法。新 execute 方法应如下所示:
SamplePythonToolbox.pyt execute 方法的示例代码,用于使用 AddIDMessage 方法:
def execute(self, parameters, messages):
"""The source code of the tool."""
result = foo.bar.hello()
messages.AddIDMessage("INFORMATIVE", "unique_id", result)
parameters[0].value = result
AddIDMessage 方法提供了对 esri/help/messages 目录的 messages.xml 文件中所存储的外部消息的有效访问方法。在本例中,它将使用具有 unique_id ID 标记的消息。该消息可以为任意字符串。Python ID 消息可以是整型,也可以是字符串;整型将参考 Esri 消息,字符串应由第三方开发人员或用户使用。由于确保字符串的唯一性更为容易,所以建议使用公司名称来设置消息 ID。
完成上述更改后,新的分发目录结构应为如下所示:
Src
├ setup.py
├ Readme.txt
└──foo ├ __init__.py ├ bar.py └──esri ├──arcpy │ └ SamplePythonToolbox.py ├──help │ └──gp │ ├ SamplePythonToolbox_toolbox.xml │ ├ SampleTool_SamplePythonToolbox.xml │ ├──messages │ │ └ messages.xml │ └──toolboxes │ └ SamplePythonToolbox.xml └──toolboxes ├ SamplePythonToolbox.pyt ├ SamplePythonToolbox.pyt.xml └ SamplePythonToolbox.SampleTool.pyt.xml
如上所述,现在可以将 .xml 文件编辑为工具箱和模块所支持的任何语言并复制到对应的语言目录中。如果针对西班牙语和英语分发语言文件,则目录结构应为如下所示:
Src
├ setup.py
├ Readme.txt
└──foo ├ __init__.py ├ bar.py └──esri ├──arcpy │ └ SamplePythonToolbox.py ├──help │ ├──es │ │ └──gp │ │ ├ SamplePythonToolbox_toolbox.xml │ │ ├ SampleTool_SamplePythonToolbox.xml │ │ ├──messages │ │ │ └ messages.xml │ │ └──toolboxes │ │ └ SamplePythonToolbox.xml │ └──gp │ ├ SamplePythonToolbox_toolbox.xml │ ├ SampleTool_SamplePythonToolbox.xml │ ├──messages │ │ └ messages.xml │ └──toolboxes │ └ SamplePythonToolbox.xml └──toolboxes ├ SamplePythonToolbox.pyt ├ SamplePythonToolbox.pyt.xml └ SamplePythonToolbox.SampleTool.pyt.xml
要实施西班牙语的本地化分发更改,需对 setup.py 进行编辑。要包含西班牙语本地化的新 setup.py 应为如下所示:
用于在 setup.py 中加入西班牙语本地化目录的示例代码:
import os from setuptools import setup
def read(fname):
return open(os.path.join(os.path.dirname(__file__), fname)).read()
setup(name='foo', version='3.0',
author='Esri', description=("Example for extending geoprocessing through Python modules"),
long_description=read('Readme.txt'), python_requires='~=3.3',
packages=['foo'], package_data={'foo':['esri/toolboxes/*',
'esri/arcpy/*', 'esri/help/gp/*', 'esri/help/gp/toolboxes/*', 'esri/help/gp/messages/*',
'esri/help/es/gp/*', 'esri/help/es/gp/toolboxes/*', 'esri/help/es/gp/messages/*']
}, )
遵循本过程,可以构建并分发一个独立的可安装包,该包支持多种语言,并能以一种简单的基于 .xml 的方法对操作系统的区域设置做出响应。通过 Python 模块扩展地理处理,可对 ArcGIS 中支持的所有语言进行分发,而无需为每种语言创建工具箱和工具。