Pull to refresh

Размещение иерархии словарей языков в каталогах

Reading time 6 min
Views 2.6K
Доброго времени чтения, уважаемые участники habrahabr.ru.

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

Основными историческими препятствиями на данный момент являются
1. использование в качестве операторов и для сообщений об ошибках только символов кодировки ANSI
2. недостаточно выстроенная идеология использования национальных языков

Например, для России может быть полезна следующая иерархия: английский -> русский -> татарский

В статье предлагается иерархия каталогов для использования в прикладных программах или локализации языка программирования, обеспечивающего поддержку любого национального языка, с наследованием от слов с кодировкой ANSI.

Для развития программирования на национальных языках (например, языках народов России, Евразии, или всех, имеющихся на планете, используемых для письменности, или использующих непечатные слова) предлагается система перевода, использующая национальные символы и словари. Система включает структуру каталогов и подход, раскрывающий написание программ на родном языке, и позволяющем обеспечить передачу исходного текста программ с национального на ANSI и обратно — на любой другой язык, для которого существует описание. Таким образом, описание алгоритмов формируется на любом языке, и использует иерархию языков.

Основным базовым видом (всеобщим предком) является язык draft, включающий только слова на английском языке и символ подчеркивания, пробелы заменяются подчеркиванием. Вместо других символов ANSI используется их словесное описание: dot, comma и т.п. Язык draft используется в качестве универсальной основы для перевода слов и выражений. Все строки во включающей программе (трансляторе) должны быть представлены в этой кодировке.

Следующим видом языка, используемым для сообщений, является ansi. Он является предком для языков, использующих алфавит, и может включать любые символы из диапазона 1-127 таблицы кодировки. Логично держать в нем общеупотребительные выражения английского языка. Строчные константы для этого и других уровней, отличающихся от draft могут включать любые символы в кодировках, поддерживаемых языком разметки XML — OEM, utf8, utf16, utf32. Для каждого языка может указываться направление письменности:
— слева направо сверху вниз (английский, русский и т.п. — по умолчанию)
— справа налево сверху вниз (арабский, иврит)
— сверху вниз слева направо (японский, китайский)

Структура каталогов
Структура каталогов, содержащая словари, на верхнем уровне использует обозначения материков, к которым относятся языки, а подкаталоги содержат названия стран или языков.

Таким образом, каталоги верхнего уровня ограничены следующим списком:

culture/af — Африка — African cultures
culture/an — Антарктика — универсальные прототипы — Universal Antarctical cultures
culture/au — Австралия — Australian cultures
culture/ea — Евразийские — Evrasian cultures
culture/na — Североамериканские — North American cultures
culture/sa — Южноамериканские — Sourth American cultures

Кодировки draft и ansi вынесены в материк an — Антарктида для обозначения отличий от разговорных диалектов английского Великобритании, США и других стран:
culture/an/draft
culture/an/ansi

В данном описании culture обозначает каталог, содержащий иерархию языков. Для конкретной программы создаются словари в подкаталогах, соответствующих языкам, с именем файла, соответствующим приложению. Также, для наиболее универсальных слов, в каталоге языка создаются файлы common.xml. Например, для английского языка это будет файл

culture/ea/en/common.xml


Наследование языков
Для каждого языка, кроме draft, указывается не более одного наследуемого языка. Язык draft не наследует ни от какого языка. Язык, от которого наследуется данный язык, указывается в файле описания словаря lang.xml.

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

Для каждого языка может быть несколько различных цепочек наследования, не зависящих друг от друга. Например, для русского языка возможны такие цепочки, как ansi -> ru или draft -> ru;
они будут содержаться в каталогах:

culture/ea/rus/ru_ansi
culture/ea/rus/ru_draft

Кроме того, для многоязычных стран возможно создание каталога языка в подкаталоге страны:

culture/ea/rus/tatar_ru

где:
culture — корневой каталог поддержки интернационализации
ea — Евразия
rus — Россия
tatar_ru — словарь татарского языка с переводом с русского языка

Аналогично можно на основе языка culture/ea/eng/en_ansi создать диалект culture/na/usa/en_en американского английского.


Структура файлов
Точкой входа в описание словаря является файл lang.xml, который содержится в каждом каталоге. Файл содержит ссылку на наследуемый язык, имена файлов общих словарей, подключаемых по умолчанию, а также может содержать описание других особенностей, например — кодировку словарей, размещенных в текстовых OEM файлах.

Описание языка храниться в разделе culture файла lang.xml

<culture>
    <language>
        название языка
    </language>

    <codepage>
        название кодовой страницы по умолчанию для текстовых словарей
    </codepage>

    <from>
        каталог наследуемого языка от каталога culture
    </from>

    <include>
        <file codepage="имя кодовой страницы включаемого файла">
            имя файла в этом же каталоге с типом xml или txt
        </file>

        <file>
            имя файла в этом же каталоге с типом xml или txt
        </file>
    </include>

</culture>


Раздел from для языка draft остается пустым.

Простой словарь, состоящий из слова на целевом языке, и перевода на наследуемый язык может храниться в текстовом файле, хотя предпочтительнее использование файлов XML. В случае текстовых файлов слово отделяется от перевода на наследуемый язык пробелом, одна строка содержит одну пару слов. Можно рассмотреть вариант с использованием фраз, тогда фразы заключаются в кавычки и отделяются от перевода пробелом.

Ссылки на перевод слов для файла в формате XML находятся в секции words, при этом один файл словаря может содержать ссылку на другой файл того-же словаря в разделе include. В случае словаря в формате XML появляется возможность добавления свойств, имеющих отношение к ключевым словам языка программирования.

<include>
    <file codepage="имя кодовой страницы включаемого файла">
       имя файла в этом же каталоге с типом xml или txt
    </file>
</include>
<words>
    <word>
        <value>
           слово на языке словаря
        </value>
        <from>
            перевод на наследуемый язык
        </from>
        <tip>
            краткое описание ключевого слова на целевом национальном языке
        </tip>
    </keyword>
</words>


Включаемые по include XML файлы также могут иметь ссылки на другие файлы, что позволяет создать модульную структуру перевода. Повторные включения файлов игнорируются, при конфликте переводов (разные переводы одной и той-же фразы) предпочтение отдается первому переводу. При отсутствии перевода с одного из цепочки наследуемых языков правильным переводом считается перевод в последнем найденном языке. Для перехода от национального языка к кодировке ANSI при отсутствии слова в словаре можно использовать транслит.


В случае, если программ несколько

Для различных программ могут потребоваться различные варианты перевода. Соответственно, для каждой программы можно иметь свой словарь, который соответствует имени приложения, подключается первым, и затем подключает общие словари из того-же каталога (например, common.xml). Указанием пути к каталогу словарей, используемого языка, начального файла словаря должно заниматься приложение, например, через файл конфигурации. Работа с приведенной модульной структурой каталогов может быть реализована в виде библиотеки.

Предлагаемая структура каталогов не учитывает параметризуемые строки, однако достаточно прозрачна для создания локализаций на множество языков, например — с использованием репозитория Git.

Ссылки:
habrahabr.ru/post/176243 — «Национальные» языки программирования
habrahabr.ru/post/136272 — Какой язык программирования должен быть первым при изучении в школе?
habrahabr.ru/post/20541 — Об интернационализации приложений
habrahabr.ru/post/165705 — Пара слов об интернационализации приложений
habrahabr.ru/company/alconost/blog/173467 — Как LinkedIn делает локализации на 19 языков за 1 ночь
habrahabr.ru/post/267501 — Локализация расширений Google Chrome — необходимо и просто

Языки программирования с ключевыми словами не на английском

в частности, интересна ссылка на www.robomind.net — среда обучения робота на английском и голландском
Tags:
Hubs:
-4
Comments 30
Comments Comments 30

Articles