Интернационализация модулей Python

При распространении наборов инструментов геообработки с модулями 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.xml.

<Messages>
<Message><ID>unique_id</ID><Description>%1, welcome to the sample tool</Description></Message>
</Messages>

Чтобы отразить эти изменения, должен быть отредактирован метод execute в SamplePythonToolbox.pyt из раздела Расширенная геообработка с помощью модулей Python для использования метода AddIDMessage вместо AddMessage. Новый метод execute должен быть:

Метод набора инструментов Python 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 с локализацией для испанского языка

Пример кода для 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 языков могут быть распространены, причем без необходимости создания наборов и инструментов для каждого языка.

Связанные разделы