[OSM-talk-fr] Faut-il ajouter systématiquement name:fr ? Was:Outil pour ajout de name:fr ?
Philippe Verdy
verdy_p at wanadoo.fr
Mer 20 Nov 12:57:48 UTC 2013
En gros ce que je propose c'est, pour éviter les redondances de noms,
d'ajouter "name:lang=fr".
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=*".
Prenons par exemple
- 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)
- La base contient:
"name=Perpignan"
"name:lang=fr;wa"
"name=Perpignan"
"name:ca=Perpinya"
"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)
L'algo est le suivant:
- 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à)
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).
Il faut raffiner :
* 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"
* on fait la recherche comme précédemment, donc on recherchera dans l'ordre
correspondant à la requête:
- pour "fr-fr", regarder "name:fr-fr=*", sinon si "fr-fr" est présent dans
"name:lang=*" (si oui prendre la valeur de "name=*")
- pour "de", regarder "name:de=*", sinon si "de" est présent dans
"name:lang=*" (si oui prendre la valeur de "name=*")
- pour "oc", regarder name:oc=*", sinon si "oc" est présent dans
name:lang=*" (si oui prendre la valeur de name=*")
* 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" :
- pour "fr", regarder "name:fr=*", sinon si "fr-fr" est présent dans
"name:lang=*" (si oui prendre la valeur de "name=*")
- pour "en", regarder "name:en=*", sinon si "en" est présent dans
"name:lang=*" (si oui prendre la valeur de "name=*")
- pour "es", regarder "name:es=*", sinon si "es" est présent dans
"name:lang=*" (si oui prendre la valeur de "name=*")
- pour "it", regarder "name:it=*", sinon si "it" est présent dans
"name:lang=*" (si oui prendre la valeur de "name=*")
* Ensuite viennent les fallbacks des données elles-mêmes, à traiter en
commençant par les langues de l'utilisateur:
- 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=*"
- 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=*"
- 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=*"
* Puis les langues de fallbacks des données imposés des langues de
l'utilisateur:
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).
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)
-------------- section suivante --------------
Une pièce jointe HTML a été nettoyée...
URL: <http://lists.openstreetmap.org/pipermail/talk-fr/attachments/20131120/24ba3fdc/attachment.htm>
Plus d'informations sur la liste de diffusion Talk-fr