Обыкновенный транслит. Не плагин. Для людей у кого нету русской клавиатуры, ну или не умеют печатать на русском(как я дурак). Короче пишем русские слова английским шрифтом, и при нажатии на «Транслит» он переводица в русский.
Делал давно, так что если не будет работать я подправлю.
Создаём
/templates/skin/Ваш_скин/js/translit.js
var CapsState = false;
function copy() {
let textarea = document.getElementById("textarea");
textarea.select();
document.execCommand("copy");
}
function initArray()
{
this.length = initArray.arguments.length
for (var i = 0; i < this.length; i++)
this[i+1] = initArray.arguments[i]
}
eng_letters = new initArray(1040,1041,1062,1044,1045,1060,1043,1061,1048,1049,1050,1051,1052,1053,1054,1055,1071,1056,1057,1058,1059,1042,1065,1061,1067,1047,91,92,93,94,95,96,1072,1073,1094,1076,1077,1092,1075,1093,1080,1081,1082,1083,1084,1085,1086,1087,1103,1088,1089,1090,1091,1074,1097,120,1099,1079);
second_order = new initArray(72,79,69,85,65,72,77,79,85,65,72,104,111,101,117,97,104,109,111,117,97,104);
first_order = new initArray(1062,1049,1049,1049,1049,1057,1065,1067,1067,1067,1047,1094,1081,1081,1081,1081,1089,1097,1099,1099,1099,1079);
two_result = new initArray(1063,1025,1069,1070,1071,1064,1068,1025,1070,1071,1046,1095,1105,1101,1102,1103,1096,1100,1105,1102,1103,1078);
var nexto = 1;
var language = (navigator.appName=='Netscape');
function getlanguagename()
{
if (language==1) return "Eng";
if (language==0) return "Rus";
}
function changelanguage()
{
if (language==1) {language=0; document.searchform.rus_eng.value="Rus"; document.searchform.comment_text.focus();return 0}
if (language==0) {language=1; document.searchform.rus_eng.value="Eng"; document.searchform.comment_text.focus();return 0}
}
function translate_letter()
{
if(navigator.appName=='Netscape')
{
if (language==0)
{
changelanguage();
alert("The language is swithched to English. Please complete the text and press 'TRANSLITERATE ALL' button");
}
return true;
}
if (language==1) {return true;}
var txt = document.searchform.comment_text.value;
l1 = txt.substr(txt.length - 1,1);
var code = l1.charCodeAt(0);
l2 = txt.substr(txt.length-2,1);
var code2 = l2.charCodeAt(0);
if ((code==39)||(code==35))
//' and '' and # and ## treatment
{
if (code==39)
{
var newcode =1100;
var doublecode =1068;
}
if (code==35)
{
var newcode =1098;
var doublecode =1066;
}
var res = String.fromCharCode(newcode);
txt = txt.substr(0, txt.length-1);
if (code2==newcode)
{
res = String.fromCharCode(doublecode);
txt = txt.substr(0, txt.length-1);
}
document.searchform.comment_text.value = txt + res;
document.searchform.comment_text.focus();
}
if ((code<123) && (code>64))
{
var res = String.fromCharCode(eng_letters[code-64]);
var rus_code = eng_letters[code-64];
txt = txt.substr(0, txt.length-1);
if (nexto==0)
{
nexto = 1;
for (i = 1; i<25; i++)
{
if (rus_code == first_order[i]) nexto = 0;
if ((code==second_order[i])&&(code2==first_order[i]))
{
res = String.fromCharCode(two_result[i]);
txt = txt.substr(0, txt.length-1);
break;
}
}
}
else nexto = 0;
document.searchform.comment_text.focus();
document.searchform.comment_text.value = txt + res;
}
}
function translatesymbol(pretxt,txt)
{
var res = pretxt+txt;
var code = txt.charCodeAt(0);
var code2 = pretxt.charCodeAt(0);
if ((code==39)||(code==35))
//' and '' and # and ## treatment
{
if (code==39)
{
var newcode =1100;
var doublecode =1068;
}
if (code==35)
{
var newcode =1098;
var doublecode =1066;
}
res = pretxt+String.fromCharCode(newcode);
if (code2==newcode)
{
res = String.fromCharCode(doublecode);
}
}
if ((code<123) && (code>64))
{
res = pretxt+String.fromCharCode(eng_letters[code-64]);
for (i = 1; i<25; i++)
{
if ((code==second_order[i])&&(code2==first_order[i]))
{
res = String.fromCharCode(two_result[i]);
break;
}
}
}
return res;
}
function translateAll()
{
var txt = document.searchform.comment_text.value;
var txtnew = translatesymbol("",txt.substr(0,1));
var symb = "";
for (kk=1;kk<txt.length;kk++)
{
symb = translatesymbol(txtnew.substr(txtnew.length-1,1),txt.substr(kk,1));
txtnew = txtnew.substr(0,txtnew.length-1) + symb;
}
document.searchform.comment_text.value = txtnew;
document.searchform.comment_text.focus();
}
function onClickKBButtonEx(btn)
{
if (btn == 'Caps')
CapsState = !(CapsState)
else
{
var txt = document.searchform.comment_text.value;
if (btn == 'BkSp')
{
txt = txt.substr(0, txt.length - 1);
}
else
{
txt = txt + btn;
}
document.searchform.comment_text.value = txt;
}
document.searchform.comment_text.focus();
}
function onClickKBButton(btn)
{
var code = btn.charCodeAt(0);
if (CapsState == false)
{
if (code == 168)
code = 184;
else if (code == 1025)
code = 1105;
else
code = code + 32;
}
btn = String.fromCharCode(code);
onClickKBButtonEx(btn);
}
Далее дебавляем теги в Ну и кнопку транслит. Я добавил транслит себе только в Коментарии. Но можете добавить его куда угодно делея это по схеме с этим. Если есть очень умные люди то можно добавить кнопку транслит в сам ББкод на верх где болд/ италик/. Но я не знаю как.
В конфиге скина добавить:
$config['head']['default']['js'][] = '___path.static.skin___/js/translit.js';
После:
$config['head']['default']['js'][] = '___path.static.skin___/js/template.js';
В форме ответа заменить код на этот.
<form method="post" id="form_comment" onsubmit="return false;" name="searchform" enctype="multipart/form-data">
<textarea name="comment_text" id="form_comment_text" onkeyup="translate_letter()" class="mce-editor markitup-editor input-width-full"></textarea>
<input name="tr_all" onclick="translateAll()" type="button" class="button" value="Транслит">