Турецкий перевод в JavaScript - PullRequest
28 голосов
/ 05 декабря 2009

Я хочу преобразовать строки в нижний или верхний регистр в JavaScript в нужной мне локали. Я думаю, что стандартные функции, такие как toUpperCase() и toLocaleUpperCase(), не удовлетворяют эту потребность. toLocale функции работают не так, как должны.

Например, в Safari 4, Chrome 4 Beta, Firefox 3.5.x в моей системе неправильно конвертируются строки с турецкими символами. Браузеры отвечают на navigator.language как "en-US", "tr", "en-US" соответственно. Но нет способа получить пользовательскую настройку Accept-Lang в браузере, насколько я мог найти. Только Chrome дает мне "tr", хотя я настроил каждый браузер на турецкий язык. Я думаю, что эти настройки влияют только на заголовок HTTP, но мы не можем получить доступ к этим настройкам через JavaScript.

В документации Mozilla написано

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

Я думаю, что он действителен для турецкого языка, он не отличается, он настроен как en или tr. В турецком это должно преобразовать "DİNÇ" в "dinç" и "DINÇ" в "dınç" или наоборот.

Есть ли библиотека JavaScript, которая удовлетворяет эту потребность? Я думаю, что он должен не только правильно конвертировать в локали пользователя, но и поддерживать конвертацию через параметр локали. Потому что разработчики не могут получить доступ к настроенному пользователем языку.

Ответы [ 5 ]

53 голосов
/ 05 декабря 2009

Возвращаясь к этому спустя годы, чтобы предоставить более современное решение.

Нет необходимости для взлома ниже,

просто используйте String.toLocaleUpperCase () и String.toLocaleLowerCase ()

"dinç".toLocaleUpperCase('tr-TR') // "DİNÇ"

Все браузеры поддерживают это сейчас.


[СТАРЫЙ, НЕ ИСПОЛЬЗУЙТЕ ЭТО]

Попробуйте эти функции

String.prototype.turkishToUpper = function(){
    var string = this;
    var letters = { "i": "İ", "ş": "Ş", "ğ": "Ğ", "ü": "Ü", "ö": "Ö", "ç": "Ç", "ı": "I" };
    string = string.replace(/(([iışğüçö]))+/g, function(letter){ return letters[letter]; })
    return string.toUpperCase();
}

String.prototype.turkishToLower = function(){
    var string = this;
    var letters = { "İ": "i", "I": "ı", "Ş": "ş", "Ğ": "ğ", "Ü": "ü", "Ö": "ö", "Ç": "ç" };
    string = string.replace(/(([İIŞĞÜÇÖ]))+/g, function(letter){ return letters[letter]; })
    return string.toLowerCase();
}

// Example
"DİNÇ".turkishToLower(); // => dinç
"DINÇ".turkishToLower(); // => dınç

Я надеюсь, что они будут работать для вас.

24 голосов
/ 13 мая 2011

Спасибо за функцию. Мне действительно это понравилось. Последовательный результат ввода турецкого символа 'undefined' как 'ÇÇ'. Попробуйте заменить '/ + g' на '/ g'. Функции будут:

String.prototype.turkishToUpper = function(){
var string = this;
var letters = { "i": "İ", "ş": "Ş", "ğ": "Ğ", "ü": "Ü", "ö": "Ö", "ç": "Ç", "ı": "I" };
string = string.replace(/(([iışğüçö]))/g, function(letter){ return letters[letter]; })
return string.toUpperCase();
}

String.prototype.turkishToLower = function(){
var string = this;
var letters = { "İ": "i", "I": "ı", "Ş": "ş", "Ğ": "ğ", "Ü": "ü", "Ö": "ö", "Ç": "ç" };
string = string.replace(/(([İIŞĞÜÇÖ]))/g, function(letter){ return letters[letter]; })
return string.toLowerCase();
}
3 голосов
/ 30 марта 2014
String.prototype.tUpper = function(){
   return this.replace(/i/g,"İ").toLocaleUpperCase();
}

String.prototype.tLower = function(){
    return this.replace(/I/g,"ı").toLocaleLowerCase();
}
0 голосов
/ 04 ноября 2018
    var  a="lişliş lğüğpğp İŞİŞİŞ lşi ĞĞHFGH ÜGFHFHG ühüüüğ üğüğş ş ş Ş  İ i  ılk Ilk";

var s=a.split(' ');

var netice="";

s.forEach(function(g) {
  if (g.length>1)
    netice+=g[0].toLocaleUpperCase('tr')+
      g.slice(1).toLocaleLowerCase('tr')+" "; 
  else
    netice+=g.toLocaleUpperCase('tr')+" ";
});

alert(netice); 
0 голосов
/ 25 августа 2016

Пожалуйста, посмотрите на этот небольшой кусочек кода, который можно преобразовать в верхний и нижний регистр

var manualLowercase = function(s) {
  return isString(s)
      ? s.replace(/[A-Z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) | 32);})
      : s;
};

var manualUppercase = function(s) {
  return isString(s)
      ? s.replace(/[a-z]/g, function(ch) {return String.fromCharCode(ch.charCodeAt(0) & ~32);})
      : s;
};
...