2009-12-04 125 views
24

我想在我想要的語言環境中將字符串轉換爲JavaScript中的大寫或小寫字母。我認爲標準功能如toUpperCase()toLocaleUpperCase()不能滿足這種需求。 toLocale函數不會像他們應該那樣執行。JavaScript中的土耳其語大小寫轉換

例如,在Safari 4,Chrome 4的測試版,我的系統上的Firefox 3.5.x的將它轉換與土耳其的字符不正確的字符串。瀏覽器分別響應navigator.language爲"en-US""tr""en-US"。但我無法在瀏覽器中找到用戶的Accept-Lang設置。儘管我已經配置了每個瀏覽器的土耳其語區域設置,但Chrome瀏覽器只支持"tr"。我認爲這些設置只會影響HTTP標頭,但我們無法通過JavaScript訪問這些設置。

Mozilla documentation它說,同時尊重當前區域

一個字符串中的字符轉換爲...。對於大多數語言,這將返回相同的...

我認爲它適用於土耳其語,它沒有區別它配置爲en或tr。在土耳其語中,它應將"DİNÇ"轉換爲"dinç""DINÇ""dınç",反之亦然。

是否有滿足這種需要任何JavaScript庫?我認爲它不僅應該在用戶的語言環境中正確轉換,還應該支持通過語言環境參數進行轉換。因爲開發人員無法訪問用戶配置的首選語言。

+0

你可能有興趣關注的潛在新SE景點,包括建議[土耳其語&用法(http://area51.stackexchange.com/proposals/30873/turkish-language-usage?referrer=wKPqNxBBY-xKcrw-ScJbLA2)和[StackOverflow的土耳其語](HTTP://area51.stackexchange。COM /提案/ 34945 /堆棧溢出式土?引薦= 6DTBHmak2NY7uyvjVsZajA2)。 – Caleb 2011-12-27 11:44:11

回答

44

說回今年晚些時候提供更多最新的解決方案。

沒有必要對下面的黑客,

只是使用 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ç 

我希望他們會爲你工作。

+0

+1它工作得很好,我已經測試過我的螢火蟲,有趣的問題,很好的方法。 – Sinan 2009-12-05 11:21:39

+1

我在我的項目中使用過這樣的東西: turkishToUpper = function(str) { return str.replace('i','İ').replace('ı','I').toUpperCase(); } 因爲只有'我'和'我'字符是問題。但是我不知道其他語言的其他問題,您可能需要使用特定語言進行案例轉換。所以應該有一個接受locale參數的庫,但是我找不到一個。 感謝您的回答,它也解決了土耳其語的問題。 – sanilunlu 2009-12-05 18:57:39

+0

節省了很多時間,謝謝! – JacopKane 2012-10-14 17:22:07

24

感謝您的功能。我真的很喜歡它。連續的土耳其字符輸入結果'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(); 
} 
+2

謝謝你reyiz。 – JacopKane 2012-10-14 17:21:31

+2

謝謝başkan – scokmen 2016-12-23 06:48:22

+0

@scokmen gotcha – 2017-08-13 09:22:42

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

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

請注意,本網站使用的語言是英語。 – lpapp 2014-03-30 11:21:57

0

請看看這一小段代碼,可以轉換到upppercase和小寫

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