+2

РЕЦЕПТ: русские символы в скриптах

Александр Неумоин 10 years ago in Micromine / Scripting updated by Daria Lvova 10 years ago 2

Добрый день, коллеги.


Данный рецепт направлен на решение проблемы невозможности запуска из файла или слотов скриптов, содержащих русские символы. Такие символы могут содержаться в названиях полей, именах файлов и т.п.


Решение не слишком изящное, но работающее. Идея состоит в том, чтобы в самом файле скрипта русские символы транслитерировать английскими и преобразовывать их обратно в русские непосредственно перед использованием.


Вот в этом файле Translation.py содержатся две функции:


detranslate(исходная строка)  - преобразовывает в русские символы всю строку ('Korova' -> 'Корова')

dt_stroke(исходная строка) - преобразовывает в русские символы, заключенные в фигурные скобки ({}) ('{Korova} says Moo, {deti!shki}' -> 'Корова says Moo, детишки')


Этот файл надо поместить в папку библиотек Micromine (у меня это "C:\Program Files (x86)\Micromine 2013\Python\lib\")


Правила транслитерации немного отличаются от обычных:

А-A  а-a

Б-B  б-b

В-V  в-v

Г-G  г-G

Д-D  д-d

Е-E  е-e

Ё-!YO  ё-!yo

Ж-!ZH  ж-!zh

З-Z  з-z

И-I  и-i

Й-Y  й-y

К-K  к-k

Л-L  л-l

М-M  м-m

Н-N  н-n

О-O  о-o

П-P  п-p

Р-R  р-r

С-S  с-s

Т-T  т-t

У-U  у-u

Ф-F  ф-f

Х-H  х-h

Ц-!TS  ц-!ts

Ч-!CH  ч-!ch

Ш-!SH  ш-!sh

Щ-!SCH  щ-!sch

Ь-!`(обратный апостроф)  ь-`

Ы-!YY  ы-!yy

Ъ-!~  ъ-~

Э-!YE  э-!ye

Ю-!YU  ю-!yu

Я-!YA  я-!ya


Использование: 

1. Импортируйте модуль Transaltion

2. Используйте одну из функций преобразования


Пример 1 (теоритический):

print ('Hello World! Прощай, жестокий мир')

Запускается только в редакторе скриптов.


import Translation

print (Translation.dt_string('Hello World! {Pro!schay, !zhestokiy mir!}'))

Запускается в редакторе скриптов, из файла или слота.


Пример 2 (кусок из рабочего скрипта):

...

WsLoadStrings_FormSet1.set_field("Z_VARB","ВЫСОТА")

...

Запускается только в редакторе скриптов.


import Translation

...

WsLoadStrings_FormSet1.set_field("Z_VARB",Translation.dt_string("{V!YYSOTA}"))

...

Запускается в редакторе скриптов, из файла или слота.


Буду рад, если рецепт кому-то пригодится.

Интересное решение, пока слоты не работают корректно. В третьем сервис паке эта проблема решена

Александр, огромное спасибо! Действительно интересное и полезное решение!