Подтвердить что ты не робот

Преобразование турецкого дела в JavaScript

Я хочу преобразовать строки в нижний или верхний регистр в 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, которая удовлетворяет эту потребность? Я думаю, что он должен не только правильно преобразовываться в локали пользователя, но также должен поддерживать преобразование через параметр locale. Потому что разработчики не могут получить доступ к настраиваемому пользователем языку.

4b9b3361

Ответ 1

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

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

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

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

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


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

Попробуйте выполнить эти функции

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ç

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

Ответ 2

Спасибо за функцию. Мне действительно это понравилось. Последовательные турецкие char вводят результаты '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

String.prototype.tUpper = function(){
   return this.replace(/i/g,"İ").toLocaleUpperCase();
}

String.prototype.tLower = function(){
    return this.replace(/I/g,"ı").toLocaleLowerCase();
}

Ответ 4

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

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;
};