37

必要なロケールの JavaScript で、文字列を小文字または大文字に変換したいと考えています。私は標準的な機能が好きで、このニーズを満たしていないtoUpperCase()と思います。関数は本来の動作をしません。toLocaleUpperCase()toLocale

たとえば、私のシステムの Safari 4、Chrome 4 Beta、Firefox 3.5.x では、トルコ語文字を含む文字列が正しく変換されません。ブラウザは navigator.languageにそれぞれ"en-US"、として応答します。しかし、私が見つけた限り、ブラウザーでユーザーの設定を取得する方法はありません。すべてのブラウザーのトルコ語ロケールを優先して構成しましたが、 Chrome だけが私に与えてくれます。これらの設定は HTTP ヘッダーにのみ影響すると思いますが、JavaScript 経由でこれらの設定にアクセスすることはできません。"tr""en-US"Accept-Lang"tr"

Mozillaのドキュメントでは、それは言う

文字列内の文字は、現在のロケールを尊重しながら ... に変換されます。ほとんどの言語では、これは ... と同じものを返します。

トルコ語に有効だと思います。enまたはtrとして構成されていることに違いはありません。トルコ語では、またはその逆に変換する必要が"DİNÇ"あり"dinç"ます。"DINÇ""dınç"

このニーズを満たす JavaScript ライブラリはありますか? ユーザーのロケールで正しく変換するだけでなく、ロケールパラメーターを介した変換もサポートする必要があると思います。開発者は、ユーザーが設定した優先言語にアクセスできないためです。

4

5 に答える 5

92

より最新のソリューションを提供するために、この数年後に戻ってきます。

以下のハックは必要ありませんが、

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ç

彼らがあなたのために働くことを願っています。

于 2009-12-05T11:17:03.877 に答える
26

機能をありがとう。本当に好きだった。トルコ文字を連続して入力すると、「未定義」が「ÇÇ」となります。「/+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();
}
于 2011-05-13T11:42:45.123 に答える
3
String.prototype.tUpper = function(){
   return this.replace(/i/g,"İ").toLocaleUpperCase();
}

String.prototype.tLower = function(){
    return this.replace(/I/g,"ı").toLocaleLowerCase();
}
于 2014-03-30T11:01:17.163 に答える
-1

大文字と小文字に変換できるこの小さなコードを調べてください

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;
};
于 2016-08-25T09:08:37.840 に答える