Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 11.04.2012, 11:46
Новичок на форуме
Отправить личное сообщение для vaalsh Посмотреть профиль Найти все сообщения от vaalsh
 
Регистрация: 10.04.2012
Сообщений: 4

Всем Спасибо!
Буду использовать, с некоторой доработкой, 1-й скрипт.
Нашел возможность разделить рус/лат на заглавные/прописные.

Еще раз, всем большое спасибо за вашу помощь!

Вал.
Ответить с цитированием
  #12 (permalink)  
Старый 28.05.2013, 18:40
Новичок на форуме
Отправить личное сообщение для edmonsur Посмотреть профиль Найти все сообщения от edmonsur
 
Регистрация: 28.05.2013
Сообщений: 1

Сообщение от GuardCat Посмотреть сообщение
dmitriymar, зачем же словарь? Есть ГОСТ 7.79-2000, который обеспечивает безошибочную двухстороннюю транслитерацию. Вот пример в лоб:
//Если с английского на русский, то передаём вторым параметром true.
transliterate = (
	function() {
		var
			rus = "щ   ш  ч  ц  ю  я  ё  ж  ъ  ы  э  а б в г д е з и й к л м н о п р с т у ф х ь".split(/ +/g),
			eng = "shh sh ch cz yu ya yo zh `` y' e` a b v g d e z i j k l m n o p r s t u f x `".split(/ +/g)
		;
		return function(text, engToRus) {
			var x;
			for(x = 0; x < rus.length; x++) {
				text = text.split(engToRus ? eng[x] : rus[x]).join(engToRus ? rus[x] : eng[x]);
				text = text.split(engToRus ? eng[x].toUpperCase() : rus[x].toUpperCase()).join(engToRus ? rus[x].toUpperCase() : eng[x].toUpperCase());	
			}
			return text;
		}
	}
)();
var txt = "Съешь ещё этих мягких французских булок, да выпей же чаю!";
alert(transliterate(txt));
alert(transliterate(transliterate(txt), true));
скрипт не плохой но не доработанный автор ссылаясь на Гост забыл его прочесть как следует. а именно примечание с низу к примеру с буквой "Ц"

Однозначная обратимость обеспечивается специфическим употреблением латинских букв h, у, с и символа `. Буквы h, у не означают сами по себе никаких кирилловских букв и употребляются только в буквосочетаниях.

Для кириллических букв Ц и I установлены два варианта транслитерации. Ц передается либо латинской С, либо сочетанием CZ. Рекомендуется употреблять С перед буквами I, Е, Y, J, а в остальных случаях — CZ.
Ответить с цитированием
  #13 (permalink)  
Старый 16.07.2017, 15:45
Новичок на форуме
Отправить личное сообщение для Vlad Cheater Посмотреть профиль Найти все сообщения от Vlad Cheater
 
Регистрация: 16.07.2017
Сообщений: 1

Привет из 2017)
Вот мой вариант транслита

Добавил возможность не переводить текст между двумя символами (например [])

//Пример:

function translit(text, engToRus, replace){
 var
  rus = "щшчцюяёжъыэабвгдезийклмнопрстуфхь".split(""),
  eng = "shh sh ch cz yu ya yo zh `` y' e` a b v g d e z i j k l m n o p r s t u f x `".split(" ")
  for(var x = 0; x < rus.length; x++){
  text = text.split(engToRus ? eng[x] : rus[x]).join(engToRus ? rus[x] : eng[x]);
   text = text.split(engToRus ? eng[x].toUpperCase() : rus[x].toUpperCase()).join(engToRus ? rus[x].toUpperCase() : eng[x].toUpperCase()); 
 }
 if(replace){
   r = replace.split(",")
   try{
     pr =  new RegExp("([^\\"+r[0]+"]+)(?=\\"+r[1]+")","g")
      text.match(pr).forEach(function(i){
        text=text.split(r[0]+i+r[1]).join(translit(i, engToRus ? "" : true))
     })
   }catch(e){}
 }
  return text;
}

//с английского на русский 
alert(translit("text", true))
//тоже самое, но без перевода того, что написано в [  ]
alert(translit("text [text]", true, "[,]"))

//с русского на английский
alert(translit("текст"))
//тоже самое, но без перевода того, что написано в {[}  {]}
alert(translit("текст {[}текст{]}", true, "{[},{]}"))

Последний раз редактировалось Vlad Cheater, 16.07.2017 в 15:50.
Ответить с цитированием
  #14 (permalink)  
Старый 18.02.2018, 19:56
Новичок на форуме
Отправить личное сообщение для Ingiboy Посмотреть профиль Найти все сообщения от Ingiboy
 
Регистрация: 18.02.2018
Сообщений: 1

Занекропостим
Спасибо всем за идеи, подсократил и, возможно, ускорил код. Применяю для создания url из заголовка статьи в нашем издании:

function translit(str) {
	str = str.toLowerCase().replace(/<.+>/, ' ').replace(/\s+/, ' ');
	var c = {
		'а':'a', 'б':'b', 'в':'v', 'г':'g', 'д':'d', 'е':'e', 'ё':'jo', 'ж':'zh', 'з':'z', 'и':'i', 'й':'j', 'к':'k', 'л':'l', 'м':'m', 'н':'n', 'о':'o', 'п':'p', 'р':'r', 'с':'s', 'т':'t', 'у':'u', 'ф':'f', 'х':'h', 'ц':'c', 'ч':'ch', 'ш':'sh', 'щ':'shch', 'ъ':'', 'ы':'y', 'ь':'', 'э':'e', 'ю':'ju', 'я':'ja', ' ':'-', ';':'', ':':'', ',':'', '—':'-', '–':'-', '.':'', '«':'', '»':'', '"':'', "'":'', '@':''
	}
	var newStr = new String();
	for (var i = 0; i < str.length; i++) {
		ch = str.charAt(i);
		newStr += ch in c ? c[ch] : ch;
	}
	return newStr;
}

Последний раз редактировалось Ingiboy, 18.02.2018 в 20:00.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Транслит с кириллицы на латиницу Beba Events/DOM/Window 3 03.11.2009 15:54