JavaScript 中的土耳其语大小写转换

新手上路,请多包涵

我想在我想要的语言环境中将字符串转换为 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 标头,但我们无法通过 JavaScript 访问这些设置。

Mozilla 文档 中它说

字符串中的字符将转换为 …,同时尊重当前语言环境。对于大多数语言,这将返回与 …

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

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

原文由 sanilunlu 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 663
1 个回答

几年后回来提供更多最新的解决方案。

不需要下面的黑客,

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

我希望他们能为你工作。

原文由 Serkan Yersen 发布,翻译遵循 CC BY-SA 4.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题