PDA

Просмотр полной версии : Многоязычность флешки


palmir
20.02.2006, 22:11
Есть панелька Strings, с помощью которой частично решается проблема многоязычности флешки. Т.е. разные варианты перевода текста хранятся в XML-файлах, и в зависимости от того какой язык системы флешка сама выбирает какой текст загрузить.
Но может быть такое что винда, например, у меня английская, а текст я бы предпочел читать на русском.
Вот и вопросик, какой же код нужен для кнопки, чтобы при нажатии на нее флешка загрузила текст с другим языком.

KUZEN
21.02.2006, 01:39
Ну так вешай такой код который будет грузить нужный xml , в котором собственно и будет написано на нужном языке ...

meiciuc
21.02.2006, 01:39
сама флешка не может распознать, что за язык в нее грузится, да ей этого в общем-то и не надо - это забота программиста. Если имеется мультиланговый сайт, то в нем ну просто обязательно должна быть переменная, в которой и хранятся сведения о текущем языке, согласно этой переменной серверный скрипт и должен подгружать соответствующий XML. Код текста должен быть в уникоде - тогда проблем не будет даже с монгольским.

KUZEN
21.02.2006, 01:41
сама флешка не может распознать, что за язык в нее грузится, да ей этого в общем-то и не надо - это забота программиста. Если имеется мультиланговый сайт, то в нем ну просто обязательно должна быть переменная, в которой и хранятся сведения о текущем языке, согласно этой переменной серверный скрипт и должен подгружать соответствующий XML. Код текста должен быть в уникоде - тогда проблем не будет даже с монгольским.
Сама флешка может узнать какой язык установлен у пользователя

meiciuc
21.02.2006, 01:49
правда, не в курсе. Она что же выдаст метку типа ru, или md?

Antares
21.02.2006, 01:55
Если нужна метка -- то сделаешь массив и будут тебе метки

KUZEN
21.02.2006, 02:00
trace(System.capabilities.language)

meiciuc
21.02.2006, 02:13
у меня возникает ощущение, что мы недопонимаем друг-друга. Я утверждаю, что флеш не распознает языки, подразумевая под этим, что сам плейер не выдает никакой информации по поводу природы символов, загруженных в него пользователем. Единственный способ для разработчика сделать более-менее правдоподобное заключение о том, что за язык был загружен, это проверить диапазон символов уникода - это уже не флеш делает(спасибо разработчику). Если же грузится не уникод - просто дрова, ибо даже совершенные браузеры, уже фиг знает каких версий существующие, далеко не всегда могут разобраться в многообразии национальных кодировок.

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

Пример. Имеется интерфейс пользователя, в который входит набор кнопок. Надписи для них загружаются в соответствующих переменных. Содержимое же переменных зависит от того, в какой языковой версии сидит конкретный пользователь. Если в "ру" то var enter:String = "руки вверх!", если в "de", то "hende hoh!". Текстовым полям назначается variable, и они сами следят за изменениями в переменных. Но при этом сам флеш не знает, что за язык в него грузится, да ему этого и не надо, о чем я и говорил в самом начале.

meiciuc
21.02.2006, 02:16
trace(System.capabilities.language)

согласен, не прав

Homo Sapiens
21.02.2006, 13:00
Если в "ру" то var enter:String = "руки вверх!", если в "de", то "hende hoh!".А может быть рано пока многоязычность делать? Неплохо бы знать языки, на которые будет переведён Flash...

meiciuc
21.02.2006, 14:46
А может быть рано пока многоязычность делать? Неплохо бы знать языки, на которые будет переведён Flash...

для грамотеев.

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

Хотя, наверное без знания тех самых я зыков не стоило и заниматься той работой...

Homo Sapiens
21.02.2006, 15:20
Ага, безумно прикольно для немецкого уха.

palmir
21.02.2006, 16:57
М-да, поспорили может ли флешка распознавать язык системы, а ответа на вопрос так и не дали :)
Ну так вешай такой код который будет грузить нужный xml , в котором собственно и будет написано на нужном языке ...

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

Badim
21.02.2006, 20:00
не пойму, народ вопрос задает, решает какуюто проблему?...
а насчет пногоязычности -почему бы не сделать список всех доступных языков, из него показывать меню - выбор языка, а потом подгружать языковый файл. могу даж исходник кинуть =)

KUZEN
21.02.2006, 21:04
Её моё, ну не тупите, я же написал одну единственную строчку которая нужна для всего этого . Для начала лепим столько языковых файлов сколько нужно и обзываем типа en.xml, ru.xml ..., во флеше создаём массив такого типа lang = ["ru","en","fr"];
дальше в цикле делаем проверку на то есть ли такой язык или нет, если есть то грузим нужный файл, если нет, загружаем допустим английскую версию ...

lang = ["ru","en","fr"];
var len = lang.length;
var sysLang = System.capabilities.language;
for(var i=0;i<len;i++){
if(lang[i]==sysLang){
// ТО грузим нужный языковой файл
my_xml.load(lang[i]+".xml");
}else if(i==len-1){
// То грузим английский
my_xml.load("en.xml");
}

palmir
21.02.2006, 22:54
Эх не туплю, хуже, не знаю :(
Не програмист я, в xml понимаю тока столько чтобы поменять в нем текст с одного языка на другой (в даном случае). А ActionScript поверхностно.

Весь код понятен. Но я его не пишу, и xml-файлы не создаю. Все это за меня делает флеш. Но если появляется надобность вручную переключить язык то под кнопку, насколько я понял, надо вписать например для англиского my_xml.load("en.xml");

Но так как все энто делает флеш, то куда он грузит xml?Не в my_xml он же энто все грузит. Чтобы написать вот эту единственную строчку, куда он грузит?

Прицепил файлик в котором флешка, определяет какой язык системы и соответственно показывает нужный текст.
Там же две кнопки, при нажатии на которые, язык должен менятся. Но что там надо :confused:

KUZEN
22.02.2006, 02:09
Для начала идём и учим основы, а не лезим сразу чёрт знает куда ...

palmir
22.02.2006, 13:36
Раз код понял значит основы AS всетаки знаю. Если было б не очень нужно , не лез бы в эти дебри. Прежде чем спросить, сам пробую решить. Потом поиск. Если не получалось обращался сюда - всегда помогали.
Если чтото не понятно, то скажите что. Если нет ответа, или не хочется ответить так и скажите.

palmir
22.02.2006, 20:18
Если неизвестно куда энта штуковина грузится, то получается что надо грузить в каждое поле отдельно. Реализовать такую загрузку умею токо с отдельных текстовых файлов.Т.е. есть 10 текстовых полей, то будет 10 файлов. А если три языка, то и файлов 30. А если полей не 10 а 50 то файлов 150 :eek: . Можно ли для одного языка подгружать весь текст с одного файла?

__i
22.02.2006, 21:17
Ну дядя ты гонишь. естественно можно.

Я решил твою проблему бы так:

Во флеше дожен быть глобальный объект в котором будут содержаться все ссылки на текстовые поля в которых нужно менять текст. Устроил бы я его где-то так:

_global.allTextField = new Object()
_global.allTextField.myRootTF = _root.myRootTF;
_global.allTextField.myAnyTF = _root.mc.mc1.mc2.anyTF;
...........
//ну и так далее


ХМЛ файл ru.xml

<tf lang='ru'>
<myRootTF>Текс для тестового поля в руте на русском</myRootTF>
<anyTF>Тест для anyTF</anyTF>
...........
</tf>

Теперь после определения языка грузишь нужный xml и проходя по тегам устанавливаешь соответствующие значения текстовым полям в _global.allTextField["ИМЯ ТВОЕГО ПОЛЯ/ИМЯ ТЕГА"].text;

Все!

palmir
23.02.2006, 13:51
Знаю что гоню :), инече не спрашивал бы как это зделать по людски.
Спасибо, буду пробовать.