2009-12-04 19 views
24

Je veux convertir les chaînes en minuscules ou majuscules en JavaScript dans l'environnement que je voulais. Je pense que les fonctions standard comme toUpperCase() et toLocaleUpperCase() ne satisfont pas ce besoin. toLocale fonctions ne se comportent pas comme ils le devraient. Par exemple, dans Safari 4, Chrome 4 Beta, Firefox 3.5.x sur mon système, il convertit incorrectement les chaînes avec des caractères turcs. Les navigateurs répondent à navigator.language comme "en-US", "tr", "en-US" respectivement. Mais il n'y a aucun moyen d'obtenir le paramètre Accept-Lang de l'utilisateur dans le navigateur autant que je pourrais trouver. Seul Chrome me donne "tr" bien que j'ai configuré tous les paramètres de navigation turque préféré. Je pense que ces paramètres n'affectent que l'en-tête HTTP, mais nous ne pouvons pas accéder à ces paramètres via JavaScript.Turc conversion de cas en JavaScript

Dans le Mozilla documentation il dit

Les caractères dans une chaîne sont convertis en ... tout en respectant les paramètres régionaux en cours. Pour la plupart des langues, cela retournera le même que ...

Je pense que c'est valable pour le turc, il ne diffère pas, il est configuré comme en ou tr. En turc, il doit convertir "DİNÇ" en "dinç" et "DINÇ" en "dınç" ou vice versa.

Existe-t-il une bibliothèque JavaScript répondant à ce besoin? Je pense qu'il devrait non seulement convertir correctement dans les paramètres régionaux de l'utilisateur, mais il devrait également soutenir la conversion via un paramètre de paramètres régionaux. Parce que les développeurs ne peuvent pas accéder à la langue préférée de l'utilisateur.

+0

Vous pourriez être intéressé à suivre les propositions de potentiels nouveaux sites SE dont [Langue turque et utilisation] (http://area51.stackexchange.com/proposals/30873/turkish-language-usage?referrer=wKPqNxBBY-xKcrw-ScJbLA2) et [StackOverflow en turc] (http: //area51.stackexchange.com/proposals/34945/stack-overflow-en-turc? referrer = 6DTBHmak2NY7uyvjVsZajA2). – Caleb

Répondre

44

Pour revenir à ces années plus tard pour fournir une solution plus à jour.

Il n'y a pas besoin de le hack ci-dessous,

il suffit d'utiliser String.toLocaleUpperCase() et String.toLocaleLowerCase()

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

Tous les navigateurs prennent en charge maintenant.


[VIEUX, NE PAS UTILISER CE]

Essayez ces fonctions

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ç 

J'espère qu'ils vont travailler pour vous.

+0

+1 ça marche plutôt bien, j'ai testé avec mon firebug, problème intéressant, approche sympa. – Sinan

+1

J'ai utilisé quelque chose comme ça dans mes projets: turkishToUpper = function(str) { return str.replace('i','İ').replace('ı','I').toUpperCase(); } Parce que seuls les caractères 'i' et 'I' sont le problème. Mais je ne connais pas d'autres problèmes dans d'autres langues, vous pouvez vouloir faire la conversion de cas dans une langue spécifique. Donc, il devrait y avoir une bibliothèque qui accepte un paramètre de locale, mais je n'aurais pas pu en trouver un. Merci pour la réponse, il résout également le problème pour le turc. – sanilunlu

+0

sauvé beaucoup de temps merci! – JacopKane

24

Merci pour la fonction. J'aime vraiment ça. Les résultats d'entrée de caractères turcs consécu- tifs 'indéfini' sont 'ÇÇ'. Essayez de remplacer '/ + g' par '/ g'. Les fonctions seraient:

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

merci reyiz. – JacopKane

+2

merci 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

Veuillez noter que la langue utilisée sur ce site est l'anglais. – lpapp

0

S'il vous plaît regarder dans ce petit morceau de code qui peut convertir en upppercase et en minuscules

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