Поддержка многоязычности. Панель Strings

Всемирная сеть объединила нашу планету куда сильнее, чем ООН, процессы политической интеграции и экономической глобализации. Сидя у себя дома где-нибудь в Воронеже, вы можете просматривать американские сайты, общаться в чате с японцем или переписываться с немкой. Создав оригинальный сайт или игру, вы вполне можете рассчитывать, что с вашим проектом захотят ознакомиться люди десятков национальностей. Возникает закономерный вопрос: на каком языке должен быть написан текст, присутствующий в подобном предназначенном для многонациональной аудитории проекте? Чаше всего в этом случае используется английский язык, ставший дефакто стандартным языком для межнационального общения. Однако действительно качественный коммерческий проект не может ограничиться поддержкой одного лишь английского языка. Практически любой крупный сайт (например, http://www.macromedia.com или http://www.google.com) имеет несколько вариантов на основных мировых языках. Обычно поддерживается английский, французский, немецкий, японский и китайский языки, Реже можно встретить поддержку русского и других менее распространенных языков.

Используя ActionScript, реализовать поддержку многоязычности Flash-проектом не так уж и сложно.


В простейшем случае для этого достаточно создать несколько строк, содержащих разные варианты текста для одного и того же поля. С учетом поддержки Flash MX 2004 уникода, набрать эти строки можно непосредственно в среде разработки (хотя проще все-таки использовать для этого внешний редактор). Язык текста задействованной строки может определяться как выбором пользователя, так и автоматически, на основании языка операционной системы (узнать который позволяет свойство language объекта System.capabilities). Например:

var language:String = System.capabilities.language;
switch (language) {
case "ru": // Русский язык
pole.text = "Привет";
break;
case "de": // Немецкий язык
pole.text = "hallo";
break;
default: // Английский язык (используется по умолчанию)
pole.text = "hi";
}

Приведенный пример довольно примитивен. Он подразумевает, что все варианты текста будут храниться в самом swf-файле. Это абсолютно нетехнично, так как при этом размер проекта необоснованно возрастает. Гораздо лучше хранить варианты текста в виде внешних файлов, подгружая при закачке пользователем проекта лишь необходимый.


Если текст в фильме отображается несколькими полями, то для каждого поля можно создать отдельный набор внешних текстовых файлов. Но лучше объединить все текстовые фрагменты в одном XML-документе. Написать код, который будет, анализируя данный документ, связывать каждый текстовый фрагмент с соответствующим полем, очень просто. Для этого предназначены классы XML и XMLNode, о которых, мы весьма подробно поговорим в главе 17. Сейчас же разбираться с тем, как задавать, импортировать и анализировать XML-документы с участками текста, мы не будем. Дело в том, что во Flash MX 2004 создание проектов, поддерживающих многоязычность, было автоматизировано. Теперь применить описанную выше идею использования внешних XML-файлов с вариантами текста на разных языках может даже человек, совершенно не владеющий ActionScript. А поможет ему в этом панель Strings.

Откройте панель Strings (командой Window/Other Panels/Strings или просто нажав + ) и внимательно изучите ее. Множество команд и настроек, присутствующих на ней, может отпугнуть даже опытного пользователя. На самом же деле организация многоязычности проекта при помогли панели Strings — это весьма простая операция и сводится она к следующему алгоритму действий:

1.


Сперва панель Strings должна быть настроена подданный фильм. Для этого нажмите расположенную на ней кнопку Settings. Появившаяся панель Settings содержит следующие подлежащие определению опции:

o Select languages. Из этого списка вы должны выбрать языки, которые будут поддерживаться вашим проектом. Найдя необходимую строку, нажмите кнопку Add. При этом стандартный код языка из двух букв (en — английский, de — немецкий и т. д.) будет добавлен в список Available languages. В данном списке отображаются языки, варианты текста на которых могут быть использованы фильмом. Удалить язык из списка Available languages можно, выделив соответствующую ему строку и нажав кнопку Remove.

В списке Select languages имеется всего около десятка наиболее распространенных языков. В нем нет даже русского языка, не говоря уж о других, менее значительных языках. Однако вариант текста можно написать практически на любом языке мира. Ввести же обозначение данного языка необходимо вручную в поле OR, расположенное подсписком Select languages. Коды практически всех языков стандартизированы в ISO 639—1 (этот стандарт имеется, например, по адресу http://www.loc.gov/standards/iso639-2/englangn.html).


Каждый язык задается при помощи двух букв (обычно это первая и вторая буква в его английском названии). Всего в ISO 639-1 прописаны коды более 100 языков и наречий (а в более позднем варианте стандарта ISO 639—2 их несколько сотен). Средствами ActionScript можно с легкостью прочитать код языка, применяемого операционной системой машины пользователя. Для этого предназначено уже знакомое нам свойство System.capabilities.language.

При необходимости к коду языка (хх) может быть прибавлен суффикс с указанием страны по следующей схеме: xx_YY. Здесь YY — две буквы в верхнем регистре, задающие код страны. Данные коды стандартизированы в ISO 3166-1. Необходимость указания вместе с кодом языка кода страны обусловлена тем, что один и тот же язык в разных странах может иметь весьма существенные отличия (типичный пример — американский (en_US) и континентальный (en_GB) диалекты английского языка). Соответственно для каждого диалекта может понадобиться задание собственного варианта текста.

o Select default language. В этом списке, копирующем список выбранных языков, вы должны задать язык, который будет применяться по умолчанию (язык, используемый в случае, если язык операционной системы пользователя не совпадет ни с одним из поддерживаемых фильмом языков).

o URL.


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

o Insert ActionScript for automatic language detection. Настройка задает, будет ли встраиваться в фильм код ActionScript, который автоматически определит язык операционной системы, а затем импортирует исходя из полученных данных нужный XML-файл, проанализирует его и выведет текстовые фрагменты в соответствующие им поля. Описанная настройка всегда должна быть активна, так как без нее теряется смысл использования панели Strings. Какой код генерируется компилятором при включении данной опции.

2. Когда основные настройки панели Settings будут заданы, вернитесь на панель Strings. Далее необходимо связать с каждым полем, которое будет отображать многоязычный текст, специальный идентификатор. Чтобы создать такой идентификатор, выделите поле, а затем введите в строку ID панели Strings любую последовательность символов. Чаще всего в качестве идентификаторов прописываются имена полей или их порядковые номера, Задай ID, нажмите кнопку Apply (или клавишу ). В результате идентификатор поля будет добавлен в первую колонку расположенной в нижней части панели Strings таблицы. При этом к нему будет прибавлен стандартный суффикс «IDS_», необходимость которого обусловлена ограничениями на формат имен в ActionScript (в частности, они не могут начинаться с числа).

Все идентификаторы можно создать одновременно. Чтобы затем связать каждый идентификатор с полем, его необходимо выделить и набрать в строке ID панели Strings текст идентификатора. Нажав Apply, вы прикрепите идентификатор к полю. Так как нужный вариант текста выводится в поле при помощи ActionScript, то ID-идентификатор не может быть создан для статичного текста. Его можно задать только для полей типа Input и Dynamic.

3. Обратите внимание, что в таблице внизу панели Strings, помимо столбца ID, хранящего имена идентификаторов, имеются столбцы, в заголовках которых прописаны в алфавитном порядке коды языков, выбранных при настройке опций панели Settings. В ячейки этих столбцов следует ввести фрагменты текста, заданные на соответствующих языках (для перехода в режим редактирования ячейки по ней необходимо выполнить двойной щелчок мышью). Например, если фильм поддерживает английский, немецкий и русский языки, то в ячейках столбца de должен быть прописан немецкий текст, в столбце en — английский, в столбце ru — русский.

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

Текст, задаваемый при помощи панели Strings, может быть качественно отформатирован. Наиболее технично использовать для этого CSS-разметку, внедряя теги непосредственно в текст ячеек панели Strings. Достаточно проблематично отформатировать многоязычный текст при помощи класса TextFormat. И очень хитрых приемов потребует разметка с использованием HTML (так как строка с текстом присваивается свойству text, а не htmlText поля).

Не всегда возможно прописать текстовые фрагменты непосредственно в ячейках таблицы панели Strings, Например, на момент создания фильма у вас попросту может не быть перевода текста на все необходимые языки. В этом случае нужно использовать строки-заглушки, которые затем вы замените, редактируя генерируемые панелью Strings XML-документы (см. ниже). Аналогичным образом нужно действовать, если текст очень объемен.

4. Один из вариантов текста может быть набран вручную непосредственно в текстовых полях. Это удобнее для дизайнера, который должен видеть, как будет приблизительно выглядеть проект после отображения в полях текст. Чтобы связать набранный вручную текст с соответствующим языком, нужно выбрать код этого языка в списке Stage language панели Strings. При этом текст полей, имеющих ID-идентификаторы, будет автоматически перенесен в ячейки столбца данного языка. Редактирование текста в ячейках будет сопровождаться его изменением в полях (равно как и наоборот). Если выбрать другой язык в списке Stage language, то текст в полях будет заменен текстом из ячеек столбца данного языка. Если ячейка пуста, то и в поле не будет ничего отображаться.

Текст, содержащийся в выделенном поле, отображается в строке String панели Strings. Изменив его здесь и нажав кнопку Apply, вы измените его и в самом поле.

5. Если вы работаете со сторонним переводчиком, далеким от Flash, то наиболее эффективный подход взаимодействия с ним заключается в следующем. Вы вносите в ячейки столбцов всех языков панели Strings текст на родном для вас языке и осуществляется публикацию. Сгенерированные в результате XML-файлы вы отправляете переводчику, указывая, текст в каких тегах должен быть переведен. Переводчик, выполнив свою работу, перешлет измененные XML-файлы обратно. Далее вы можете или сразу поместить данные файлы в положенную для них директорию, или предварительно проверить вереде разработки, корректно ли они были изменены. Для этого их содержимое должно быть импортировано в ячейки соответствующих столбцов панели Strings. Решить эту задачу можно следующей последовательностью действий:

o Нажмите кнопку Import XML панели Strings.

o В меню Language of file появившейся панели Import XML выберите язык, фрагменты текста на котором содержит импортируемый файл. Чтобы код языка имелся в данном меню, он должен быть включен в список поддерживаемых языков на этапе настройки опций панели Strings.

o В открывшемся стандартном окне Windows укажите путь к необходимому XML-файлу.

Если все было сделано верно, то текст из XML-файла заменит старый текст в ячейках столбца данного языка.

Выполнив описанные выше действия, опубликуйте фильм. При этом в директории, содержащей исходный fla-файл, будут созданы папки, имена которых совпадают с кодами языков, вариантами текста на которых располагает фильм — en, de, шит. д. В данные папки будут вложены XML-документы, сгенерированные на основании предоставленной панели Strings информации. Имена этих документов будут заданы по следующей схеме:

Name_lang.xml, где:

• Name — имя swf-файла, текст для которого хранит данный документ,

• lang — код языка, на котором написан текст.

Например, русский текст для фильма movie.swf будет храниться в документе movie_ru.xml директории ru. Если вы измените название swf-фильма, то соответствующим образом должны быть изменены имена и XML-документов, содержащих варианты его текста. Произвольным образом задавать имя XML-документа с текстом нельзя, так как при этом swf-фильм не сможет его импортировать.

По умолчанию папки с XML-документами, содержащими варианты текста, должны располагаться на сервере в той же директории, что и использующий их фильм. Но при желании их можно разнести по различным адресам. Для этого URL, по которому будут находиться папки с XML-документами, должен быть прописан в строке URL панели Settings, вызываемой кнопкой Settings панели Strings. URL может быть как относительным, так и абсолютным. Единственное, задавая его, необходимо учесть требования новой политики сетевой безопасности Flash MX 2004.

При публикации фильма, поддерживающего многоязычность, на его первый кадр помешается код, который по завершении загрузки первого кадра проверит, какой язык используется операционной системой. Исходя из полученных данных будет произведен импорт нужного XML-документа. Если данный документ успешно импортируется, он будет проанализирован и строки, полученные в результате его разбора, сохранятся в специальном объекте. На каждом кадре, содержащем поля с ID-идентификаторами, при публикации разместится код, который будет считывать из данного объекта нужные строки и присваивать их свойству text полей. В том, что все происходит именно так, как было описано выше, можно с легкостью убедиться, использовав один из многочисленных swf-декомпиляторов. Например, если на кадре располагается поле pole с ID=IDS_1, то сгенерируется следующий код:

if (mx.lang.Locale.checkXMLStatus() == true) {
pole.text = mx.lang.Locale.loadString("IDS_1");
} else {
mx.lang.Locale.addDelayedInstance(pole, "IDS_1");
}

Здесь mx.lang.Locale — особый служебный класс, который встраивается в фильм в случае использования панели Strings. Именно при помощи его методов производится импорт и обработка ХМ L-документов с вариантами текста. Никаких суперсложных приемов или недокументированных возможностей класс mx.lang.Locale не применяет. При желании вы бы могли сами его воспроизвести за довольно короткое время. Чтобы в этом убедиться, изучите соответствующий as-файл, который хранится в директории Classes директории Configuration. Как вы помните, в директории Configuration располагаются основные данные, используемые средой разработки, поэтому она чрезвычайно важна для практики. Ее местоположение зависит от операционной системы (в Windows 2000 приблизительный путь к ней – C:\Documents and Settings\user\Local Settings\Application Data\Macromedia\ Flash MX 2004\en\Configuration).

К пакету mx директории Classes относятся и другие служебные классы. Просмотрите их, чтобы понять, как были реализованы многие расширения среды разработки Flash. Импорт и разбор XML-файла с текстом происходит лишь после инициализации первого кадра, поэтому вначале, независимо от языка операционной системы, в полях отобразится тот текст, который был в них введен в среде разработки (так называемый Stage language). Затем, когда загрузка необходимого XML-документа завершится, будет произведена замена текста. Время, которое пройдет между визуализацией первого кадра и обновлением текста, напрямую зависит от размера соответствующего XML-документа и скорости соединения. Чаще всего видимая замена текста в проекте нежелательна. Поэтому, если фильм содержит несколько кадров, то отображать его нужно начать хотя бы после загрузки второго кадра. Если же в фильме только один кадр, то в него стоит ввести буферный кадр.

Чтобы эффективно использовать панель Strings, нужно знать правила, по которым она генерирует XML-документ с текстом. Эти правила не были разработаны компанией Macromedia, а взяты из стандарта XLIFF(XML Localisation Interchange File Format) 1.0. Стандарт XLIFF разработан группой экспертов консорциума OASIS еще в 2000 году. Предназначен он для уменьшения сложности локализации программных продуктов. Проще говоря, если текст элементов интерфейса программы, а также текст справки вынесены в XML-файлы формата XLIFF, то создать национальную версию продукта вендору гораздо легче, чем при использовании более традиционных подходов. Подробное описание стандарта XLIFF имеется по адресу http://www.oasis-open.org/committees/xliff/.

Проанализируем XML-файл, который будет сгенерирован для русского варианта текста некоторого поля:


"http://www.oasis-open.org/committees/xliff/documents/xliff.dtd" >


Привет





Из заголовочных тегов в данном документе можно почерпнуть информацию о том, какая используется версия стандарта XLIFF, какая применяется кодировка и на каком языке задан содержащийся в документе текст. Впрочем, все эти данные имеют скорее теоретическое, нежели практическое значение. Гораздо интереснее тег . В его атрибутах указывается, к полюс каким ID относится вложенный в него текстовый фрагмент. Сам текст заключается в тег . Соответственно произвести локализацию любого программного продукта, использующего XLIFF, очень просто. Для этого достаточно заменить текст в тегах , а также несколько атрибутов, указывающих на язык содержащегося в документе текста.

Оцените статью: (0 голосов)
0 5 0

Статьи из раздела Action Script на эту тему:
Автоматическое удаление пробелов. Свойство condenseWhite
Встраивание в фильм целого шрифта
Динамическая замена выделенного текста. Метод replaceSel()
Динамическое задание выделения. Метод setSelection()
Задание и извлечение текста поля

Вернуться в раздел: Action Script / 13. Работа с текстом