|
|
|||||
@kacbip
Зачем тут Dictionary? Тут обычного Object вполне себе хватит.
__________________
...вселенская грусть |
|
|||||
Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
|
на каждый символ регулярное выражение составлять или можно чтобы массив искомых символов менялся на массив конечных символов (с соответствием мест символов в массивах конечно)?
|
|
|||||
gloomyBrain, да, пожалуй.
|
|
|||||
Modus ponens
|
kackbip: А зачем для этого Dictionary?
Если чесно, я не совсем представляю, как вы будете решать это с помощью регулярных выражений. Еще такой момент: перевод из кириллицы в латиницу не 100% совпадает туда и обратно (т.как количество элементов в алфавитах разное). И вообще, как по мне, то идея граничит с абсурдом... А что будете делать, если файлы будут по-китайски называться? Есть стандартное решение: escape() или encodeURIComponent() - почитайте про них, выберите то, что больше подходит, и, так, по крайней мере можно однозначно перевести из большего алфавита в меньший и обратно, без потерь по дороге.
__________________
Hell is the possibility of sanity |
|
|||||
Нашел какой-то жаваскрипт и перевел во флеш.
var A:Array = new Array(); A["Ё"] = "YO"; A["Й"] = "I"; A["Ц"] = "C"; A["У"] = "U"; A["К"] = "K"; A["Е"] = "E"; A["Н"] = "N"; A["Г"] = "G"; A["Ш"] = "SH"; A["Щ"] = "SCH"; A["З"] = "Z"; A["Х"] = "H"; A["Ъ"] = "'"; A["ё"] = "yo"; A["й"] = "i"; A["ц"] = "c"; A["у"] = "u"; A["к"] = "k"; A["е"] = "e"; A["н"] = "n"; A["г"] = "g"; A["ш"] = "sh"; A["щ"] = "sch"; A["з"] = "z"; A["х"] = "h"; A["ъ"] = "'"; A["Ф"] = "F"; A["Ы"] = "I"; A["В"] = "V"; A["А"] = "A"; A["П"] = "P"; A["Р"] = "R"; A["О"] = "O"; A["Л"] = "L"; A["Д"] = "D"; A["Ж"] = "ZH"; A["Э"] = "E"; A["ф"] = "f"; A["ы"] = "i"; A["в"] = "v"; A["а"] = "a"; A["п"] = "p"; A["р"] = "r"; A["о"] = "o"; A["л"] = "l"; A["д"] = "d"; A["ж"] = "zh"; A["э"] = "e"; A["Я"] = "YA"; A["Ч"] = "CH"; A["С"] = "S"; A["М"] = "M"; A["И"] = "I"; A["Т"] = "T"; A["Ь"] = "'"; A["Б"] = "B"; A["Ю"] = "YU"; A["я"] = "ya"; A["ч"] = "ch"; A["с"] = "s"; A["м"] = "m"; A["и"] = "i"; A["т"] = "t"; A["ь"] = "'"; A["б"] = "b"; A["ю"] = "yu"; var txt:String = 'ту транслит'; txt = txt.replace(/([\u0410-\u0451])/g, function (str, p1, offset, s) { if (A[str] != 'undefined'){return A[str];} } ); trace(txt);
__________________
Кодинг, багинг, алгоритминг. me @ |
|
|||||
Modus ponens
|
И как вы за один проход замените регулярным выражением 32 разных элемента набором из 25-и разных элементов? Я не говорю, что это невозможно, но это крайне непродуктивно. Кроме того, а как вы будете заменять твердый знак, например?
Но самый главный вопрос это зачем именно транслитерация, когда для задачи она 1. не работает для всего возможного ввода. 2. иногда работает неправильно в оба конца (YO -> Ё | Yo -> Ё, Ё -> YO). 3. даже когда работает правильно, иногда создает строки которые все равно прийдется еще раз перекодировать, если их нужно использовать как имена файлов / пересылать как URI компонент (твердый знак по ГОСТу - #).
__________________
Hell is the possibility of sanity Последний раз редактировалось wvxvw; 01.07.2011 в 11:38. |
|
|||||
Регистрация: Mar 2009
Адрес: Киев
Сообщений: 95
|
да уж, наверное, лучше вообще грузить на сервер файлы, не сохраняя исходные названия. Присваивать, например, сразу им какие-то цифровые уникальные имена (например отметку времени в млсек) и так уже потом аплодить, а исходные имена можно (если они потом могут понадобиться) отдельно в виде текстового поля в базу прописывать или в соответствующий узел xml
|
|
|||||
Сорри за оффтоп, вот мне как раз понадобилось по быстрому оттранслитить, воспользовался вариантом gloomyBrain, как самым прекрасным)) может кому пригодится работающая версия:
private static const _cyrrilic:Object = {а:"a",б:"b",в:"v",г:"g",д:"d",е:"e",ё:"yo",ж:"zh",з:"z",и:"i", к:"k",л:"l",м:"m",н:"n",о:"o",п:"p",р:"r",с:"s",т:"t",у:"u",ф:"f", х:"h",ц:"c",ч:"ch",ш:"sh",щ:"sch",ь:"'",ы:"i",ъ:"'",э:"e",ю:"yu",я:"ya"}; public static function getLatin(cyr:String):String //передаем строчку { var i:uint; var translt:String=""; for(i=0;i<cyr.length;i++) { var letter:String = cyr.charAt(i).toLowerCase(); if (!letter in _cyrrilic) throw new ArgumentError("Буква не зарегистрирована!"); translt = translt.concat(_cyrrilic[letter]); } return translt as String; } public static function getLatin(cyr:String):String { var i:uint; var translt:String=""; for(i=0;i<cyr.length;i++) { var letter:String = cyr.charAt(i).toLowerCase(); var isWSpace:Boolean = CharacterUtil.isWhitespace(cyr.charCodeAt(i)); if(isWSpace) { translt = translt.concat("_"); } else translt = translt.concat(_cyrrilic[letter]); //если кириллические символы из структуры if (!letter in _cyrrilic) translt = translt.concat(letter); } return translt +".png" as String; } |
Часовой пояс GMT +4, время: 02:24. |
|
« Предыдущая тема | Следующая тема » |
|
|