Просмотр полной версии : Сделать транслит
нашел скрипт транслит но незнаю
как сделать чтоб переводил помогите спс :rolleyes:
<script type="text/javascript">
var latin=("a-b-c-d-e-f-g-h-i-j-k-l-m-n-o-p-q-r-s-t-u-v-w-x-y-z-;-A-B-C-D-E-F-G-H-I-J-K-L-M-N-O-P-Q-R-S-T-U-V-W-X-Y-Z").split("-")
var ciril=("а-б-ц-д-е-ф-г-х-и-й-к-л-м-н-о-п-э-р-с-т-у-в-ш-ы-ч-з-я-А-Б-Ц-Д-Е-Ф-Г-Х-И-Й-К-Л-М-Н-О-П-Э-Р-С-Т-У-В-Ш-Ы-Ч-З").split("-")
//(c) subONE [razgona.net]
function translit() {
var omg=document.selection.createRange()
var omg1=omg.text
var xy=0
for(xy=0; xy<=(latin.length-1); xy++) {
var latin1="/"+latin[xy]+"/g"
omg1=omg1.replace(eval(latin1), ciril[xy])
}
omg.text=omg1
}
</script>
<textarea name="Message" id="Message" cols="30" rows="5" class="text"></textarea><br>
<input type="button" value="Транслит" onclick="translit()">
да и как сделать из вот это
<a href="javascript:t.go(0)" title="Перевести в кириллицу">Кириллица</a>
кнопку?
inlanger
23.03.2009, 20:21
<input type=button onclick=t.go(0) value="Йа кнопка">
Pashkela
23.03.2009, 22:18
<script>
var rusChars = new Array('а','б','в','г','д','е','ё','ж','з' ,'и','й','к','л','м','н','о','п','р','с' ,'т','у','ф','х','ч','ц','ш','щ','э','ю' ,'\я','ы','ъ','ь', ' ', '\'', '\"', '\#', '\$', '\%', '\&', '\*', '\,', '\:', '\;', '\<', '\>', '\?', '\[', '\]', '\^', '\{', '\}', '\|', '\!', '\@', '\(', '\)', '\-', '\=', '\+', '\/', '\\');
var transChars = new Array('a','b','v','g','d','e','jo','zh','z','i','j ','k','l','m','n','o','p','r','s','t','u','f','h', 'ch','c','sh','csh','e','ju','ja','y','', '', ' ', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '');
var from = "";
function convert2EN()
{
from = document.getElementById("Message").value;
from = from.toLowerCase();
var to = "";
var len = from.length;
var character, isRus;
for(var i=0; i < len; i++)
{
character = from.charAt(i,1);
isRus = false;
for(var j=0; j < rusChars.length; j++)
{
if(character == rusChars[j])
{
isRus = true;
break;
}
}
to += (isRus) ? transChars[j] : character;
}
document.form1.Message.value = to;
}
</script>
<FORM NAME="form1">
<textarea name="Message" id="Message" cols="30" rows="5" class="text"></textarea><br>
<input type="button" value="Транслит" onclick="convert2EN()">
</FORM>
использовал конвертер в транслит, немного улучшил:
function translit() {
field = document.getElementById('Message');
from = field.value.toLowerCase();
to = '';
len = from.length;
rlen = rusChars.length;
var character, isRus;
for(var i = 0; i < len; i++)
{
var character = from.charAt(i,1);
foundIndex = rusChars.indexOf(character);
to += (foundIndex != -1) ? transChars[foundIndex] : character;
}
field.value = to;
}
в частности там нет необходимости перебирать весь массив с русскими символами, чтобы узнать русский у нас символ или нет. достаточно использовать indexOf
ваще вот лучший пример:
<script type='text/javascript'>
function translit(id) {
var field = document.getElementById(id);
var from = field.value.toLowerCase();
var rusChars = new Array('а','б','в','г','д','е','ё','ж','з' ,'и','й', 'к','л','м','н','о','п','р','с','т','у', 'ф','х','ч ','ц','ш','щ','э','ю','\я','ы','ъ','ь', ' ', '\'', '\"', '\#', '\$', '\%', '\&', '\*', '\,', '\:', '\;', '\<', '\>', '\?', '\[', '\]', '\^', '\{', '\}', '\|', '\!', '\@', '\(', '\)', '\-', '\=', '\+', '\/', '\\');
var transChars = new Array('a','b','v','g','d','e','jo','zh','z','i','j ','k','l','m','n','o','p','r','s','t','u','f','h', 'ch','c','sh','csh','e','ju','ja','y','_', '_', '_', '_', '_', '_', '_', '_', '_', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '', '_', '_', '_', '_', '_');
var to = '';
var len = from.length;
var rlen = rusChars.length;
var character, isRus;
for(var i = 0; i < len; i++)
{
var character = from.charAt(i,1);
var foundIndex = rusChars.indexOf(character);
to += (foundIndex != -1) ? transChars[foundIndex] : character;
}
field.value = to;
}
</script>
<input type='text' id='message' /><input type='button' onclick='translit("message")' value='← to translite' />
Файл должен быть в ansi (windows-1251) кодировке.
astrologer
27.03.2009, 23:30
charAt принимает один параметр
Метод Array.prototype.indexOf не является стандартным и его нет как минимум в ie
hint: {
'а': 'a',
'б': 'b',
'в': 'v'
/* etc */
}
чет я не понимаю..
charsArray - это объект.
как получить его длину?
и как проверить наличие в нём текущей буквы? (в смысле есть ли способ, типа indexOf)?
function translit() {
var charsArray = {
'а':'a',
'б':'b',
'в':'v',
'г':'g',
'д':'d',
'е':'e',
'ё':'jo',
'ж':'zh',
'з':'z',
'и':'i',
'й':'j',
'к':'k',
'л':'l',
'м':'m',
'н':'n',
'о':'o',
'п':'p',
'р':'r',
'с':'s',
'т':'t',
'у':'u',
'ф':'f',
'х':'h',
'ч':'ch',
'ц':'c',
'ш':'sh',
'щ':'csh',
'э':'e',
'ю':'ju',
'\я':'ja',
'ы':'y',
'ъ':'',
'ь':'\'',
' ':'_',
'\'':'',
'\"':'',
'\#':'',
'\$':'',
'\%':'',
'\&':'',
'\*':'',
'\,':'',
'\:':'',
'\;':'',
'\<':'',
'\>':'',
'\?':'',
'\[':'',
'\]':'',
'\^':'',
'\{':'',
'\}':'',
'\|':'',
'\!':'',
'\@':'',
'\(':'',
'\)':'',
'\-':'_',
'\=':'',
'\+':'',
'\/':'',
'\\':''
};
var field = document.getElementById('message');
var from = field.value.toLowerCase();
var to = '';
var character;
for(var i = 0; i < 61; i++)
{
var character = from.charAt(i);
foundIndex = charsArray.indexOf(character);
to += (foundIndex != -1)? charsArray[character] : character;
}
field.value = to;
}
astrologer
28.03.2009, 11:27
чет я не понимаю..
charsArray - это объект.
как получить его длину? Его длина тут не нужна.и как проверить наличие в нём текущей буквы?(character in charsArray)(charsArray[character])
Pashkela
28.03.2009, 11:27
var x = new Array();
x[0] = "Строка";
x[1] = "Еще строка";
var l = x.length; // l равно 2
по поводу поиска без перебора здесь:
http://habrahabr.ru/blogs/javascript/46787/
function translit(id) {
var charsArray = {
'а':'a',
'б':'b',
'в':'v',
'г':'g',
'д':'d',
'е':'e',
'ё':'jo',
'ж':'zh',
'з':'z',
'и':'i',
'й':'j',
'к':'k',
'л':'l',
'м':'m',
'н':'n',
'о':'o',
'п':'p',
'р':'r',
'с':'s',
'т':'t',
'у':'u',
'ф':'f',
'х':'h',
'ч':'ch',
'ц':'c',
'ш':'sh',
'щ':'csh',
'э':'e',
'ю':'ju',
'\я':'ja',
'ы':'y',
'ъ':'',
'ь':'\'',
' ':'_',
'\'':'',
'\"':'',
'\#':'',
'\$':'',
'\%':'',
'\&':'',
'\*':'',
'\,':'',
'\:':'',
'\;':'',
'\<':'',
'\>':'',
'\?':'',
'\[':'',
'\]':'',
'\^':'',
'\{':'',
'\}':'',
'\|':'',
'\!':'',
'\@':'',
'\(':'',
'\)':'',
'\-':'_',
'\=':'',
'\+':'',
'\/':'',
'\\':''
};
var character;
var field = document.getElementById(id);
var from = field.value.toLowerCase();
field.value = '';
for(var i = 0; i < 61; i++)
{
character = from.charAt(i);
field.value += (character in charsArray)? charsArray[character] : character;
}
}
Вот. здесь можно чета улучшить ещё?
astrologer
30.03.2009, 19:41
Вот. здесь можно чета улучшить ещё? Конечно.
for(var i = 0; i < 61; i++)Обрабатываются только первые 62 знака исходного текста. Всё, что после - нет.
'\'': '', '\"': '', '\#': '', '\$': '',
'\%': '', '\&': '', '\*': '', '\,': '',
'\:': '', '\;': '', '\<': '', '\>': '',
'\?': '', '\[': '', '\]': '', '\^': '',
'\{': '', '\}': '', '\|': '', '\!': '',
'\@': '', '\(': '', '\)': '', '\-': '_',
'\=': '', '\+': '', '\/': '', '\\': '' Экранирующий слэш нужен только в первом и последнем случаях. Зачем вообще удалять все эти символы - неясно.
var character;
var field = document.getElementById(id);
var from = field.value.toLowerCase();
field.value = '';Лучше бы функции транслитерации только этим и заниматься, ей передали текст (и таблицу замен - опционально) - она вернула текст, не очищая там попутно левые поля, не заполняя их ничем, но это так, к слову.
character = from.charAt(i);Пусть :)
field.value += (character in charsArray) ? charsArray[character] : character; Можно было обойтись без этой проверки, немного развернув логику - проходить не по строке, а по самой таблице замен. (for..in)
vBulletin® v3.8.14, Copyright ©2000-2026, vBulletin Solutions, Inc. Перевод: zCarot