ToolZen ToolZen
Text converter client

Case Converter

Convert text between camelCase, snake_case, PascalCase, kebab-case, UPPER_SNAKE, and dot.case formats in one click.

Advertisement (Top Banner)
lowercase all lowercase
UPPERCASE ALL UPPERCASE
Title Case Title Case
Sentence case First letter capitalized
camelCase For JavaScript variables
PascalCase For classes and components
snake_case For Python, DB, constants
kebab-case For URLs and CSS
CONST_CASE For constants
dot.case For config files
Advertisement (Bottom)

Changer la casse d'un texte semble l'opération la plus triviale qu'un ordinateur exécute. Elle ne l'est pas, et ses ratés ont cassé de vrais logiciels. Cet outil convertit entre dix conventions d'un coup — mais certaines de ces conversions jettent de l'information définitivement, et il vaut mieux savoir lesquelles.

Passer en majuscules est une porte à sens unique

La plupart des gens supposent que la conversion de casse est réversible. Elle ne l'est pas. Le ß allemand n'a pas de majuscule propre : la mise en majuscules le transforme donc en deux lettres — straße devient STRASSE. Un caractère en est devenu deux.

Revenez maintenant en arrière. STRASSE en minuscules donne strasse — avec ss, pas ß. La lettre d'origine a disparu et rien ne la récupère, car au moment de repasser en minuscules, il ne reste aucune trace du fait que ces deux S ne formaient qu'un ß. Faire faire l'aller-retour à un mot allemand par les majuscules change silencieusement son orthographe.

La ligature fi fait de même et devient FI. C'est pourquoi une colonne de base qui conserve une copie en majuscules d'un nom pour la recherche perd discrètement de l'information, et pourquoi comparer des textes en passant les deux côtés en majuscules est une idée subtilement moins bonne qu'elle n'en a l'air.

Le I turc, qui a mis à terre des systèmes en production

Le turc possède deux lettres I : une pointée et une sans point, et ce sont des lettres différentes au sens différent. Le i pointé en majuscule est İ. Le I sans point en minuscule est ı.

Cela entre en collision avec une habitude qu'ont tous les développeurs. En JavaScript, "title".toUpperCase() donne TITLE. Mais "title".toLocaleUpperCase("tr") donne TİTLE — avec un point sur le I. Si un utilisateur a une locale turque et que votre code passe une chaîne en majuscules pour la comparer à une constante, la comparaison échoue, et elle n'échoue que pour les utilisateurs turcs. L'inverse vaut aussi : "I".toLocaleLowerCase("tr") donne ı, pas i.

Cela a fait tomber de vrais logiciels, à répétition. La règle qui l'évite : la conversion de casse pour comparer doit être indépendante de la locale, celle pour l'affichage doit suivre la locale de l'utilisateur. Ce sont deux opérations différentes qui partagent un nom par hasard. Cet outil convertit pour l'affichage et ne prétend pas être une fonction de comparaison.

Les acronymes survivent dans un sens et pas dans l'autre

Découper un identifiant camelCase en mots est plus délicat qu'il n'y paraît, car une suite de majuscules peut être un acronyme. Un découpage naïf à chaque majuscule transforme parseHTMLDocument en parse_h_t_m_l_document, ce qui n'a aucun sens.

Cet outil s'en sort : parseHTMLDocument devient parse_html_document, XMLHttpRequest devient xml_http_request, getUserID devient get_user_id. Il cherche la frontière où une suite de majuscules rencontre une majuscule suivie d'une minuscule — là s'achève l'acronyme et commence le mot suivant.

Le trajet retour ne peut pas fonctionner, et cela mérite d'être compris plutôt que signalé comme un bug. Reconvertissez parse_html_document en camelCase et vous obtenez parseHtmlDocument, pas parseHTMLDocument. La forme snake_case n'a jamais consigné que html était un acronyme — cette information a été détruite à l'aller, et aucune astuce au retour ne peut l'inventer. Si vous convertissez des identifiants dans une base de code, convertissez une fois et relisez, plutôt que de faire l'aller-retour et de faire confiance.

Le Title Case n'est pas une opération définie

Demandez à deux guides de style de mettre la même phrase en title case et vous obtiendrez deux réponses. Le style AP met une majuscule aux mots de quatre lettres ou plus. Chicago met une majuscule à tout sauf aux articles, conjonctions de coordination et prépositions courtes — sauf s'ils sont le premier ou le dernier mot. Aucun ne dit « majuscule à chaque mot ».

C'est pourtant ce que fait cet outil, car c'est la seule règle qui fonctionne sans connaître votre guide de style, votre langue, ni quels mots sont des noms propres. Une valeur par défaut raisonnable — et pas du vrai title case : vous obtenez « The Lord Of The Rings », là où Chicago dirait « The Lord of the Rings ». Pour les titres qui comptent, prenez la sortie comme point de départ et corrigez les petits mots à la main.

Questions fréquentes

Mon texte est-il envoyé à un serveur ?

Non. Cet outil porte la mention « client » : chaque conversion s'exécute dans votre onglet et rien n'est transmis.

Quelle casse utiliser et pour quoi ?

Suivez le langage, pas votre préférence — chaque écosystème a une convention, et lutter contre elle fait paraître votre code étranger. camelCase pour les variables JavaScript et Java, PascalCase pour les classes et composants, snake_case pour Python et les colonnes de base, kebab-case pour les URL et le CSS, CONSTANT_CASE pour les constantes et variables d'environnement. Le seul endroit où réfléchir plutôt que suivre, ce sont les URL, où kebab-case n'est pas qu'une convention : les tirets bas se voient mal sous le soulignement d'un lien.

Pourquoi mon mot allemand a-t-il changé d'orthographe ?

Vous avez mis un ß en majuscules. Il est devenu SS, et le repassage en minuscules a ramené ss et non ß, car l'information s'est perdue à la première étape. Ce n'est pas de la négligence de cet outil — c'est ce que spécifie Unicode, et toute implémentation correcte fait pareil. S'il vous faut l'original, conservez l'original ; ne le reconstruisez pas depuis une copie en majuscules.

Les majuscules sont-elles sûres pour comparer deux chaînes ?

Pas de façon fiable. Au-delà du problème turc ci-dessus, certains caractères ne font pas l'aller-retour entre majuscule et minuscule : deux chaînes peuvent donc devenir identiques en majuscules tout en étant réellement différentes, et inversement. Pour comparer, utilisez un repli de casse indépendant de la locale — en JavaScript, localeCompare avec sensitivity réglé sur « base » ou « accent » est généralement ce que vous voulez vraiment.

Pourquoi le sentence case se trompe-t-il sur les noms ?

Parce que le sentence case met tout en minuscules après le premier caractère, et n'a aucun moyen de savoir que Paris est un lieu. De « JEAN EST ALLÉ À PARIS » vous obtenez « Jean est allé à paris ». Récupérer les noms propres demande un dictionnaire et, dans les cas ambigus, un humain. Si votre texte vous est arrivé hurlé en capitales, le sentence case vous amène presque au bout et les noms réclament un coup d'œil.