2009-12-04 25 views
24

Quiero convertir cadenas en mayúsculas o minúsculas en JavaScript en la configuración regional que quería. Creo que las funciones estándar como toUpperCase() y toLocaleUpperCase() no satisfacen esta necesidad. toLocale las funciones no se comportan como deberían.Conversión de mayúsculas y minúsculas en JavaScript

Por ejemplo, en Safari 4, Chrome 4 Beta, Firefox 3.5.x en mi sistema, convierte cadenas con caracteres turcos incorrectamente. Los navegadores responden a navigator.language como "en-US", "tr", "en-US" respectivamente. Pero no hay forma de obtener la configuración Accept-Lang del usuario en el navegador hasta donde pude encontrar. Solo Chrome me da "tr", aunque configuré todos los navegadores preferidos por el navegador. Creo que estas configuraciones solo afectan al encabezado HTTP, pero no podemos acceder a estas configuraciones a través de JavaScript.

En el Mozilla documentation Dice

Los caracteres dentro de una cadena se convierten en ... respetando la localización actual. Para la mayoría de los idiomas, esto devolverá lo mismo que ...

Creo que es válido para el turco, no difiere de que esté configurado como en o tr. En turco debe convertir "DİNÇ" en "dinç" y "DINÇ" en "dınç" o viceversa.

¿Hay alguna biblioteca de JavaScript que satisfaga esta necesidad? Creo que no solo debe convertirse correctamente en la configuración regional del usuario, sino que también debe admitir la conversión a través de un parámetro de configuración regional. Porque los desarrolladores no pueden acceder al idioma preferido configurado por el usuario.

+0

Usted puede estar interesado en el seguimiento de las propuestas de nuevos sitios potenciales SE incluidos [Idioma y uso turcos] (http://area51.stackexchange.com/proposals/30873/turkish-language-usage?referrer=wKPqNxBBY-xKcrw-ScJbLA2) y [StackOverflow en turco] (http: //area51.stackexchange.com/proposals/34945/stack-overflow-in-turkish? referrer = 6DTBHmak2NY7uyvjVsZajA2). – Caleb

Respuesta

44

Volviendo a esto años después para proporcionar una solución más actualizada.

No hay necesidad de que el truco a continuación,

sólo tiene que utilizar String.toLocaleUpperCase() y String.toLocaleLowerCase()

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

todos los navegadores soportan esto ahora.


[VIEJO, NO USE ESTE]

Pruebe estas funciones

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ç 

espero que van a trabajar para usted.

+0

+1 funciona bastante bien, he probado con mi Firebug, tema interesante, buen enfoque. – Sinan

+1

He usado algo como esto en mis proyectos: turkishToUpper = function(str) { return str.replace('i','İ').replace('ı','I').toUpperCase(); } Porque solo los caracteres 'i' e 'I' son el problema. Pero no conozco otros problemas en otros idiomas, es posible que desee realizar la conversión de casos en un idioma específico. Entonces debería haber una biblioteca que acepte un parámetro de configuración regional, pero no podría haber encontrado uno. Gracias por la respuesta, también resuelve el problema para el turco. – sanilunlu

+0

ahorró mucho tiempo gracias! – JacopKane

24

Gracias por la función. Realmente me gustó. Los resultados consecutivos de entrada de caracteres en turco 'indefinido' como 'ÇÇ'. Intente reemplazar '/ + g' con '/ g'. Las funciones serían:

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

gracias reyiz. – JacopKane

+2

gracias 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

Tenga en cuenta que el idioma utilizado en este sitio es inglés. – lpapp

0

favor ver esta pequeña pieza de código que puede convertir a upppercase y minúsculas

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; 
}; 
Cuestiones relacionadas