Преобразование турецкого дела в 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. Потому что разработчики не могут получить доступ к настраиваемому пользователем языку.
Ответы
Ответ 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;
};