Je développe actuellement une application qui gère les traductions. Dans le prototype, l'application peut gérer les traductions de l'anglais vers l'allemand.
Actuellement, j'ai des éléments entourés d'éléments
:
<label className="m-translation-card__native-field-label" aria-label="Original (English)"> English <textarea className="m-translation-card__native-field-input" placeholder="English translation" onChange="..." value="..." /> </label> <label className="m-translation-card__translated-field-label" aria-label="Translation (Deutsch)"> Deutsch <textarea className="m-translation-card__translated-field-input" placeholder="German translation" onChange="..." value="..." /> </label>
Lorsque l'on accède à la zone de texte "Traduction anglaise" via le clavier, le lecteur d'écran lit à haute voix le contenu de l'attribut textarea value
en anglais. Cela a du sens - l'attribut lang
de la balise
est défini sur "en" - et est la fonctionnalité voulue.
Mais, quand on accède à la zone de texte "Traduction allemande", le lecteur d'écran prononce à nouveau le contenu de l'attribut textarea value
en anglais - une prononciation souvent très différente de la prononciation allemande correcte. Idéalement, la prononciation serait en allemand.
Je voudrais ajouter un attribut pour que le lecteur d'écran sache que le contenu de la deuxième zone de texte est allemand. J'ai essayé d'utiliser l'attribut lang = "de"
, mais cela n'a pas affecté la prononciation.
Y a-t-il un moyen d'y parvenir?
p >
3 Réponses :
L'utilisation de l'attribut lang
(et xml: lang
en XHTML) est la bonne manière.
Cependant, tous les lecteurs d'écran ne prennent pas en charge lang
, et pour ceux qui le prennent en charge, toutes les langues ne sont pas nécessairement prises en charge.
Si le lecteur d'écran prétend le prendre en charge, mais que cela ne fonctionne toujours pas, vous pouvez essayer d'ajouter un conteneur div
avec l'attribut lang
(en prenant simplement un supposition sauvage ici, peut-être que le lecteur d'écran a des problèmes lorsqu'il n'est spécifié que sur l'élément textarea
).
(Notez que le placeholder
de la textarea
allemande doit également être en allemand.)
Vous le faites correctement, mais à moins que vous n'ayez installé différentes langues avec votre lecteur d'écran, vous n'entendrez peut-être pas de différence. Vous n'avez pas mentionné le lecteur d'écran que vous utilisez.
Avec VoiceOver, du moins sur iOS, je pense que vous obtenez la plupart des langues par défaut. Je ne suis pas sûr de VoiceOver sur Mac. Avec NVDA et JAWS , je suis presque sûr que vous devez installer des modules linguistiques.
Les éléments suivants changent tous automatiquement de langue. Il fonctionnait avec VoiceOver sur iOS.
<div lang="fr"> <label for="frinput">c'est en français</label> <textarea id="frinput"></textarea><br> </div>
Notez que l'attribut lang
se trouve sur et non sur le
car c'est la zone de texte qui reçoit le focus. Il y a cependant quelques nuances avec VoiceOver. Si j'utilise le geste normal de balayage vers la droite pour naviguer dans les champs, le focus se déplace d'un champ à l'autre et j'entends le changement de langue. Mais si je tape directement sur l'étiquette et que je mets le focus dessus, alors l'étiquette elle-même est lue en anglais, car le
n'a pas d'attribut
lang
. p>
Dans votre cas, vous avez le comme conteneur, donc si la langue est sur le conteneur, alors tout ce qu'il contient aura aussi la langue. Donc, ce qui suit fonctionne aussi:
<label for="frinput" lang="fr">c'est en français <textarea id="frinput"></textarea><br> </label>
Lorsque le focus se déplace vers le champ, il est lu en français. Si je tape intentionnellement sur l'étiquette elle-même, elle est également lue en français.
Si je voulais que mon premier exemple de code fonctionne, avoir le (Notez que dans tout mes exemples, je spécifie toujours l'attribut et le
en tant que frères et sœurs, alors je pourrais avoir un conteneur <label for="eninput">this is in english</label>
<textarea id="eninput"></textarea><br>
<label for="deinput">das ist in deutsch</label>
<textarea id="deinput" lang="de"></textarea><br>
<label for="frinput">c'est en français</label>
<textarea id="frinput" lang="fr"></textarea><br>
<label for="ruinput">ÑÑо по-ÑÑанÑÑзÑки</label>
<textarea id="ruinput" lang="ru"></textarea><br>
for
sur le pour explicitement associer le libellé à son
Les lecteurs d'écran ne devinent pas ou ne détectent pas automatiquement la langue d'une chaîne, mais ont besoin de l'attribut HTML lang
afin d'utiliser le moteur de synthèse vocale approprié ou la table Braille (ou les deux). (Je n'ai jamais vu la prise en charge du lecteur d'écran pour l'attribut xml: lang
de XHTML qui est mentionné dans l'une des autres réponses.) Le L'attribut lang
peut être utilisé sur n'importe quel élément, y compris les éléments de formulaire et leurs étiquettes.
Par exemple, vous pouvez utiliser le code suivant dans un document où lang = "en"
est déjà défini sur un élément ancêtre tel que html
:
<label className="m-translation-card__native-field-label" for="english-translation">English </label> <textarea id="english-translation" className="m-translation-card__native-field-input"></textarea> <label className="m-translation-card__native-field-label" for="german-translation">German </label> <textarea id="german-translation" className="m-translation-card__native-field-input" lang="de"></textarea>
Quelques autres commentaires:
aria-label
sur les éléments label
; un élément label
étiquette un élément de formulaire et n'a pas besoin d'étiquette pour lui-même.