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

Thanks for the function. I really liked it. Consecutive Turkish char input results 'undefined' as 'ÇÇ'. Try replacing '/+g' with '/g'. The functions would be:

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  a="lişliş lğüğpğp İŞİŞİŞ lşi ĞĞHFGH ÜGFHFHG ühüüüğ üğüğş ş ş Ş  İ i  ılk Ilk";

var s=a.split(' ');

var netice="";

s.forEach(function(g) {
  if (g.length>1)
    netice+=g[0].toLocaleUpperCase('tr')+
      g.slice(1).toLocaleLowerCase('tr')+" "; 
  else
    netice+=g.toLocaleUpperCase('tr')+" ";
});

alert(netice); 
于 2018-11-04T16:55:43.677 回答
-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 回答