2009-12-04 33 views
24

Tôi muốn chuyển đổi chuỗi thành chữ thường hoặc chữ hoa trong JavaScript ở ngôn ngữ tôi muốn. Tôi nghĩ các chức năng tiêu chuẩn như toUpperCase()toLocaleUpperCase() không thỏa mãn nhu cầu này. Các hàm toLocale không hoạt động như chúng cần.Chuyển đổi kiểu chữ Thổ Nhĩ Kỳ trong JavaScript

Ví dụ: trong Safari 4, Chrome 4 Beta, Firefox 3.5.x trên hệ thống của tôi, nó chuyển đổi chuỗi bằng ký tự tiếng Thổ Nhĩ Kỳ không chính xác. Các trình duyệt tương ứng với navigator.language là "en-US", "tr", "en-US" tương ứng. Nhưng không có cách nào để có được cài đặt Accept-Lang của người dùng trong trình duyệt theo như tôi có thể tìm thấy. Chỉ Chrome cung cấp cho tôi "tr" mặc dù tôi đã định cấu hình mọi ngôn ngữ Thổ Nhĩ Kỳ của trình duyệt được ưu tiên. Tôi cho rằng các cài đặt này chỉ ảnh hưởng đến tiêu đề HTTP, nhưng chúng tôi không thể truy cập vào các cài đặt này thông qua JavaScript.

Trong Mozilla documentation nó nói

Các nhân vật trong một chuỗi được chuyển đổi thành ... đồng thời tôn trọng các miền địa phương hiện nay. Đối với hầu hết các ngôn ngữ, điều này sẽ trả về giống như ...

Tôi nghĩ nó hợp lệ cho tiếng Thổ Nhĩ Kỳ, nó không khác với cấu hình của nó là vi hoặc tr. Ở Thổ Nhĩ Kỳ, nó phải chuyển đổi "DİNÇ" thành "dinç""DINÇ" thành "dınç" hoặc ngược lại.

Có thư viện JavaScript nào đáp ứng nhu cầu này không? Tôi nghĩ rằng nó không chỉ chuyển đổi một cách chính xác trong miền địa phương của người dùng, nhưng nó cũng nên hỗ trợ chuyển đổi thông qua một tham số miền địa phương. Bởi vì các nhà phát triển không thể truy cập ngôn ngữ ưa thích được cấu hình của người dùng.

+0

Bạn có thể quan tâm sau đây đề nghị cho tiềm năng trang web SE mới bao gồm [Ngôn ngữ & sử dụng tiếng Thổ Nhĩ Kỳ] (http://area51.stackexchange.com/proposals/30873/turkish-language-usage?referrer=wKPqNxBBY-xKcrw-ScJbLA2) và [StackOverflow bằng tiếng Thổ Nhĩ Kỳ] (http: //area51.stackexchange.com/proposal/34945/stack-overflow-in-turkish? referrer = 6DTBHmak2NY7uyvjVsZajA2). – Caleb

Trả lời

44

Quay lại năm sau để cung cấp giải pháp cập nhật hơn.

Không cần cho việc hack dưới đây,

chỉ cần sử dụng String.toLocaleUpperCase()String.toLocaleLowerCase()

"dinç".toLocaleUpperCase('tr-TR') // "DİNÇ" 

Tất cả các trình duyệt hỗ trợ này ngay bây giờ.


[OLD, KHÔNG SỬ DỤNG NÀY]

Hãy thử những chức năng

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ç 

Tôi hy vọng họ sẽ làm việc cho bạn.

+0

+1 nó hoạt động khá tốt, tôi đã thử nghiệm với firebug của tôi, vấn đề thú vị, cách tiếp cận tốt đẹp. – Sinan

+1

Tôi đã sử dụng một cái gì đó như thế này trong các dự án của tôi: turkishToUpper = function(str) { return str.replace('i','İ').replace('ı','I').toUpperCase(); } Vì chỉ có các ký tự 'i' và 'Tôi' là vấn đề. Nhưng tôi không biết các vấn đề khác trong các ngôn ngữ khác, bạn có thể muốn thực hiện chuyển đổi trường hợp bằng một ngôn ngữ cụ thể. Vì vậy, cần phải có một thư viện mà chấp nhận một tham số miền địa phương, nhưng tôi không thể tìm thấy một. Cảm ơn câu trả lời, nó cũng giải quyết được vấn đề cho tiếng Thổ Nhĩ Kỳ. – sanilunlu

+0

đã tiết kiệm rất nhiều thời gian cảm ơn bạn! – JacopKane

24

Cảm ơn chức năng. Tôi thực sự thích nó. Các kết quả đầu vào char kiểu Thổ Nhĩ Kỳ liên tục 'không xác định' là 'ÇÇ'. Thử thay thế '/ + g' bằng '/ g'. Các chức năng sẽ là:

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

cảm ơn bạn reyiz. – JacopKane

+2

cảm ơn bạn başkan – scokmen

+0

@scokmen gotcha –

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

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

Xin lưu ý rằng ngôn ngữ được sử dụng trên trang web này là tiếng Anh. – lpapp

0

hãy nhìn vào mảnh này nhỏ mã mà có thể chuyển đổi để tử viết hoa và chữ thường

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; 
}; 
Các vấn đề liên quan