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.