<div dir="ltr">En gros ce que je propose c'est, pour éviter les redondances de noms, d'ajouter "name:lang=fr".<div>On pourrait aussi ajouter "name:ca:lang=oc" pour préciser que la valeur de "name:ca=*" est aussi utilisable en occitan sans créer un "name:oc=*" de même valeur que "name:ca=*".</div>
<div><br></div><div>Prenons par exemple<br></div><div><div>- un utilisateur qui demande "fr-fr;de;oc" (j'omet les valeur comme "=0.5" ajoutée après chaque code dans la requête HTTP pour les ordonner explicitement)</div>
<div>- La base contient:<br></div></div><div> "name=Perpignan"</div><div> "name:lang=fr;wa"</div><div> "name=Perpignan"</div><div> "name:ca=Perpinya"<br></div><div> "name:ca:lang=oc" (pas la peine de mentionner "=ca;oc" car ca est déjà inclus en tête de liste du fait du nom du tag)</div>
<div><br></div><div>L'algo est le suivant:</div><div>- regarder s'il y a un name:xx correspondant à chacune des langues dans l'ordre donné par l'utilisateur, donc "name:fr-fr=*" (non trouvé), "name:fr=*" (non trouvé), name:en=* (trouvé ! on s'arrête là)</div>
<div><br></div><div>On voit que le nom anglais est pris avant le nom français par défaut. C'est normal le nom anglais est redondant (on aurait du mettre "name:lang=fr:wa;en" mais on peut éviter ça).</div><div>
<br></div><div>Il faut raffiner :</div><div><br></div><div>* regarder d'abord si on a "name:lang=*" c'est le cas ici on trouve "fr;wa" dedans, cela a pour effet de transformer "name=Perpignan" comme si c'était "name:fr=Perpignan" + "name:wa=Perpignan"</div>
<div><br></div><div>* on fait la recherche comme précédemment, donc on recherchera dans l'ordre correspondant à la requête:</div><div><br></div><div>- pour "fr-fr", regarder "name:fr-fr=*", sinon si "fr-fr" est présent dans "name:lang=*" (si oui prendre la valeur de "name=*")</div>
<div>- pour "de", regarder "name:de=*", sinon si "de" est présent dans "name:lang=*" (si oui prendre la valeur de "name=*")</div><div class="gmail_extra">- pour "oc", regarder name:oc=*", sinon si "oc" est présent dans name:lang=*" (si oui prendre la valeur de name=*")</div>
<div class="gmail_extra"><br></div><div class="gmail_extra">* Ensuite viennent les fallbacks raisonnables de l'utilisateur : "fr-fr" a un fallback imposé par le standard "fr", et un autre raisonnable "en"; "de" n'a que "en" comme raisonnable, "oc" pourrait avoir "fr", "es", "it", "en" comme raisonnables. la liste est donc "fr", "en", es", "it" :</div>
<div class="gmail_extra"><div><br></div><div>- pour "fr", regarder "name:fr=*", sinon si "fr-fr" est présent dans "name:lang=*" (si oui prendre la valeur de "name=*")</div>
<div>- pour "en", regarder "name:en=*", sinon si "en" est présent dans "name:lang=*" (si oui prendre la valeur de "name=*")</div><div><div>- pour "es", regarder "name:es=*", sinon si "es" est présent dans "name:lang=*" (si oui prendre la valeur de "name=*")</div>
</div><div><div>- pour "it", regarder "name:it=*", sinon si "it" est présent dans "name:lang=*" (si oui prendre la valeur de "name=*")</div></div><div><br></div><div>* Ensuite viennent les fallbacks des données elles-mêmes, à traiter en commençant par les langues de l'utilisateur:</div>
<div><br></div><div>- pour "fr-fr", regarder "name:fr-fr:lang=*" et voir si il contient une des langues de l'utilisateur (fr-fr; de; oc) si c'est le cas prendre la valeur de "name:fr-fr=*"</div>
<div>- pour "de", regarder "name:de:lang=*" et voir si il contient une des langues de l'utilisateur (fr-fr; de; oc) si c'est le cas prendre la valeur de "name:de=*"</div><div>- pour "oc", regarder "name:oc:lang=*" et voir si il contient une des langues de l'utilisateur (fr-fr; de; oc) si c'est le cas prendre la valeur de "name:oc=*"</div>
<div><br></div><div>* Puis les langues de fallbacks des données imposés des langues de l'utilisateur:</div><div><div><br></div></div><div>vous comprenez le principe. on va aboutir finalement à détecter "name:ca:lang=oc" avant même d'avoir trouvé le nom par défaut (mentionnant "fr", et non précisément "fr-fr"), et donc aboutir à utiliser la valeur trouvée dans "name:ca=*" (donc le nom en catalan).</div>
<div><br></div><div>Mais si l'utilisateur a demandé non pas "fr-fr;de;oc" mais "fr;de;oc", il obtiendra bien le nom par défaut (mentionnant "fr"), donc le nom en français (français générique même si c'est le français canadien)</div>
<div><br></div></div></div>