JavaScript中的土耳其语案例转换

时间:2009-12-04 23:02:56

标签: javascript internationalization uppercase lowercase turkish

我想在我想要的语言环境中将字符串转换为JavaScript中的大小写。我认为像toUpperCase()toLocaleUpperCase()这样的标准函数不能满足这种需求。 toLocale函数的行为不正常。

例如,在我的系统上的Safari 4,Chrome 4 Beta,Firefox 3.5.x中,它会错误地转换包含土耳其语字符的字符串。浏览器分别以"en-US""tr""en-US"的形式回复navigator.language。但是我无法在浏览器中找到用户的Accept-Lang设置。只有Chrome为我提供了"tr",尽管我已将所有浏览器土耳其语区域设置为首选。我认为这些设置仅影响HTTP标头,但我们无法通过JavaScript访问这些设置。

Mozilla documentation中说

  

字符串中的字符将转换为...,同时尊重当前区域设置。对于大多数语言,这将返回与...相同的

我认为它对土耳其语有效,它没有区别它被配置为en或tr。在土耳其语中,它应将"DİNÇ"转换为"dinç",将"DINÇ"转换为"dınç",反之亦然。

是否有满足此需求的JavaScript库?我认为它不仅应该在用户的语言环境中正确转换,而且还应该支持通过locale参数进行转换。因为开发人员无法访问用户配置的首选语言。

5 个答案:

答案 0 :(得分:53)

回到这些年后,提供更多最新的解决方案。

下面没有必要进行黑客攻击,

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

我希望他们能为你效劳。

答案 1 :(得分: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 :(得分:3)

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

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

答案 3 :(得分: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;
};

答案 4 :(得分:0)

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