При распространении наборов инструментов геообработки с модулями 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 находятся файлы .xml локализуемых строк, используемых в инструментах наборов и скриптов Python, а подпапка gp/toolboxes используется для замещения локализуемых надписей бинарных наборов инструментов (пользовательских наборов инструментов, содержащих модели и инструменты-скрипты). Эти файлы создаются вместе с оболочкой ArcPy с помощью функции arcpy.gp.createtoolboxsupportfiles(<path to .tbx or .pyt>).
gp ├ SamplePythonToolbox_toolbox.xml ├ SampleTool_SamplePythonToolbox.xml ├──messages └──toolboxes └ SamplePythonToolbox.xml
Самый простой способ создания языковых подпапок - сначала создать структуру папок в папке родного языка (в данном случае - английского) gp. С локализованными свойствами наборов инструментов и инструментов на местах через создание файлов .xml в esri/help/gp и esri/help/gp/toolboxes с расширенной геообработкой на основе модулей Python, требуется один дополнительный файл .xml для хранения локализованных сообщений,которые используются в инструментах-скриптах или наборах инструментов Python. В директории esri/help/messages создайте новый файл .xml с именем messages.xml.
Пример кода для создания messages.xml.
<Messages>
<Message><ID>unique_id</ID><Description>%1, welcome to the sample tool</Description></Message>
</Messages>
Чтобы отразить эти изменения, должен быть отредактирован метод execute в SamplePythonToolbox.pyt из раздела Расширенная геообработка с помощью модулей Python для использования метода 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 обеспечивает эффективный способ доступа к внешним сообщениям, хранящимся в файле messages.xml в директории esri/help/messages. В этом случае он берет сообщение, помеченное ID unique_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 языков могут быть распространены, причем без необходимости создания наборов и инструментов для каждого языка.