2009-12-04 11 views
24

Voglio convertire le stringhe in lettere maiuscole o minuscole in JavaScript nella lingua desiderata. Penso che funzioni standard come toUpperCase() e toLocaleUpperCase() non soddisfino questa esigenza. Le funzioni toLocale non si comportano come dovrebbero.Conversione del caso turco in JavaScript

Ad esempio, in Safari 4, Chrome 4 Beta, Firefox 3.5.x sul mio sistema, converte erroneamente stringhe con caratteri turchi. I browser rispondono a navigator.language come "en-US", "tr", "en-US" rispettivamente. Ma non c'è modo di ottenere l'impostazione Accept-Lang dell'utente nel browser per quanto ho potuto trovare. Solo Chrome mi dà "tr" anche se ho configurato le preferenze di ogni browser turco. Penso che queste impostazioni influiscano solo sull'intestazione HTTP, ma non possiamo accedere a queste impostazioni tramite JavaScript.

Nel Mozilla documentation si dice

I caratteri all'interno di una stringa vengono convertiti in ... nel rispetto della locale corrente. Per la maggior parte delle lingue, questo restituirà lo stesso di ...

Penso che sia valido per il turco, non è diverso è configurato come en o tr. In turco dovrebbe convertire "DİNÇ" in "dinç" e "DINÇ" in "dınç" o viceversa.

C'è qualche libreria JavaScript che soddisfa questa esigenza? Penso che non dovrebbe solo convertire correttamente nelle impostazioni locali dell'utente, ma dovrebbe anche supportare la conversione tramite un parametro locale. Perché gli sviluppatori non possono accedere alla lingua preferita configurata dell'utente.

+0

Potreste essere interessati a seguire le proposte di potenziali nuovi siti SE compreso [Lingua e uso turco] (http://area51.stackexchange.com/proposals/30873/turkish-language-usage?referrer=wKPqNxBBY-xKcrw-ScJbLA2) e [StackOverflow in turco] (http: //area51.stackexchange.com/proposte/34945/stack-trabocco-in-turco? referrer = 6DTBHmak2NY7uyvjVsZajA2). – Caleb

risposta

44

Tornando a questi anni più tardi per fornire una soluzione più aggiornata.

v'è alcuna necessità per l'hack di seguito,

basta usare String.toLocaleUpperCase() e String.toLocaleLowerCase()

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

tutti i browser supportano questo momento.


[VECCHIO, non utilizzare questo]

provare queste funzioni

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ç 

spero che lavorerà per voi.

+0

+1 funziona abbastanza bene, ho provato con il mio firebug, un problema interessante, un buon approccio. – Sinan

+1

Ho usato qualcosa di simile nei miei progetti: turkishToUpper = function(str) { return str.replace('i','İ').replace('ı','I').toUpperCase(); } Perché solo i caratteri 'i' e 'I' rappresentano il problema. Ma non conosco altri problemi in altre lingue, potresti voler fare la conversione del caso in una lingua specifica. Quindi dovrebbe esserci una libreria che accetta un parametro locale, ma non avrei potuto trovarne uno. Grazie per la risposta, risolve anche il problema per il turco. – sanilunlu

+0

risparmiato molto tempo grazie! – JacopKane

24

Grazie per la funzione. Mi è veramente piaciuto. L'input di char consecutivo in turco risulta "indefinito" come "ÇÇ". Prova a sostituire '/ + g' con '/ g'. Le funzioni sarebbero:

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

grazie reyiz. – JacopKane

+2

grazie 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

Si prega di notare che la lingua utilizzata in questo sito è l'inglese. – lpapp

0

Si prega di guardare in questo piccolo pezzo di codice che può convertire in in maiuscolo e minuscolo

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; 
}; 
Problemi correlati