我想在我想要的语言环境中将 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 header ,但我们无法通过 JavaScript 访问这些设置。
The characters within a string are converted to ... while respecting the current locale. For most languages, this will return the same as ...
我认为它对土耳其语有效,配置为 en 或 tr 没有区别。在土耳其语中,它应该将 "DıNÇ"
转换为 "dinç"
并将 "DINÇ"
转换为 "dınç"
或反之-反之亦然。
有没有JavaScript库可以满足这个需求?我认为它不仅应该在用户的区域设置中正确转换,而且还应该支持通过区域设置参数进行转换。因为开发人员无法访问用户配置的首选语言。
最佳答案
几年后回到这里提供更多最新的解决方案。
不需要下面的 hack,
只需使用 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ç
我希望它们能为你工作。
关于javascript - JavaScript 中的土耳其语大小写转换,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1850232/