IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Collection et Stream Java Discussion :

Empêcher ResourceBundle de substituer à une langue manquante celle par défaut, et aller dans le base bundle?


Sujet :

Collection et Stream Java

  1. #1
    Membre très actif

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    608
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 608
    Par défaut Empêcher ResourceBundle de substituer à une langue manquante celle par défaut, et aller dans le base bundle?
    Bonjour,

    De tous les problèmes que je connais, ce sont ceux de localisation qui me font perdre le plus de cheveux.

    J'ai un serveur d'application et web sur ma machine de développement dont la langue par défaut est fr.

    Les fichiers de propriétés de mon application ont dans leur bundle de base l'anglais par défaut. C'est la langue que je veux mettre à disposition en dernier ressort.

    Pour un fichier de propriétés p, j'ai par exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    p_fr.properties
    p_en.properties
    p_vi.properties
    p.properties (= copie de p_en.properties)
    Le serveur web doit appeler occasionnellement un programme externe java E, et il lui transmet la langue préférée d'un utilisateur (internaute). Il est fréquent que le programme externe ait moins de choix de langues à sa disposition.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    e_fr.properties
    e_en.properties
    e.properties (= copie de e_en.properties)

    Et voici la catastrophe.
    Un utilisateur arrive, et dit: moi, je suis vi.

    Le site web "répond":
    Considérant p_fr.properties, p_en.properties, p_vi.properties et p.properties,
    Oui, vi je connais.

    1) Je prends tout ce que je peux de p_vi.properties,
    2) mais ce que je trouverais pas dedans, j'irai le chercher dans p_[Locale.getDefault()].properties = p_fr.properties, puisque c'est la locale par défaut de la machine de développement.
    3) Et si tout cela rate, j'irai farfouiller dans p.properties.

    Puis, il appelle le programme externe E, par un:
    java -Duser.language=vi E

    E répond:
    Considérant e_fr.properties, e_en.properties et e.properties:
    Non, vi je ne connais pas.

    1) Je vais chercher dans e_[Locale.getDefault()].properties = e_vi.properties (oui, car user.language=vi!) qui n'existe pas.
    2) Donc, je me rabats sur le bundle par défaut, e.properties.


    Donc, me voilà face à un schisme.
    Le serveur web va faire: vi, fr, default = en.
    Le programme externe E va faire: vi, default = en.


    J'ai deux solutions:
    Celle que je pense que je vais devoir employer: je ne passe pas ma langue au programme E par user.language, afin qu'il garde la même langue par défaut que celle de la machine de développement.
    Mais foncièrement, je ne l'aime pas: mon serveur de production, lui, est à l'étranger. Et je n'ai pas envie que la langue natale de mon hébergeur colore sa représentation des choses.

    Je préfèrerais pouvoir débrayer le ResourceBundle p, en lui disant: quand tu ne trouve pas la resource dans la langue précisément voulue, ne tente pas la locale par défaut, mais directement le bundle de base: p.properties.

    Est-ce possible?


    En vous remerciant,

    Grunt.

  2. #2
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    Citation Envoyé par grunt2000 Voir le message

    Je préfèrerais pouvoir débrayer le ResourceBundle p, en lui disant: quand tu ne trouve pas la resource dans la langue précisément voulue, ne tente pas la locale par défaut, mais directement le bundle de base: p.properties.

    Est-ce possible?


    En vous remerciant,

    Grunt.
    Le plus propre et le plus facile serait de mettre d'accord ton serveur et ton application extérieure sur ce qu'est la langue 'par défaut'. Donc le -Duser.language que tu passe à ton application extérieure devrais être le même que le Locale.getDefault() de ton serveur. Et la langue voulue par l'utilisateur devrais être fournie via un paramètre séparé. Ton problème c'est que tu passe la langue de ton "client" (vi) comme étant la locale par défaut, ce qui n'est pas le cas de ton serveur (fr). Résultat, comme tu lui dit que c'est vi, tu rate le "fr par défaut" dans l'application extérieure et donc tu perd la langue française en fallback.

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/12/2013, 09h09
  2. Réponses: 9
    Dernier message: 19/11/2009, 17h12
  3. Réponses: 2
    Dernier message: 28/04/2009, 19h02
  4. Réponses: 1
    Dernier message: 24/10/2008, 11h32
  5. Ajouter une toolbar a coté de celle par défaut
    Par romeo9423 dans le forum MFC
    Réponses: 1
    Dernier message: 30/08/2005, 22h05

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo