multi-langues

Publié : 21.04.2005 - 14h41 par Krynn

Bonjour,

C'est pas pour tout de suite, mais je me demande si certain d'entre vous ont deja fait leur application en plusieurs langue (interface) et si oui, comment avez-vous procédé pour vous facilité la vie?

Merci


Re: multi-langues

Publié : 21.04.2005 - 20h26 par Jérôme Rosat

Krynn a écrit :C'est pas pour tout de suite, mais je me demande si certain d'entre vous ont deja fait leur application en plusieurs langue (interface) et si oui, comment avez-vous procédé pour vous facilité la vie?

Bonjour,

Je n'ai jamais développé une application en plusieurs langues mais on peut imaginer la solution suivante:

Un dossier "langage" avec des sous dossiers pour chaque langue contenant un fichier texte pour chaque "stack". Dans les fichiers on trouve le texte des étiquettes, boutons et menus entre des tags qui font référence au numéro d'ID de l'objet. Par exemple, si l'ID de mon champ "Label" est 1004, alors le texte est ainsi: <1004>Texte de l'étiquette</1004>. Avec cette méthode il est possible de prévoir du texte sur plusieurs lignes pour les menus par exemple.

Ainsi, lorsqu'un utilisateur choisit une langue, on définit une variable globale qui sera utilisée pour identifier le dossier correspondant dans une procédure preOpenCard. Dans la même procédure on définit le texte des objets en faisant référence à l'ID de l'objet et donc du tag.

J'espère que c'est pas trop confus.


Publié : 22.04.2005 - 13h39 par Krynn

Bonne l'idée, j'imagine comment ca fonctionne. Je n'ai pus qu'a reussir a coder.
Il faudra peut-etre aussi faire un fichier avec les texte qui ne sont pas dans des objets (comme le fenetre de dialogue, ...)

Merci


Publié : 22.04.2005 - 19h59 par Jérôme Rosat

Krynn a écrit :Il faudra peut-etre aussi faire un fichier avec les texte qui ne sont pas dans des objets (comme le fenetre de dialogue, ...)

Où alors utiliser des "cartes" comme fenêtres de dialogue !


Publié : 11.05.2005 - 1h20 par Krynn

Merci pour l'astuce, j'ai un peu changer, mais l'idée est toujours la:
- un fichier par langue
- comme je recrée des boutons lorsque je change de grandeur, j'ai un problème avec les ID, alors j'utilise les "custom propriété" avec un numéro que je peux retrouvé ailleurs.

Voila un peu le look:

Code : Tout sélectionner

On MouseUP
  lock screen
  put the label of btn Langue into VarLangue
  set the itemDelimiter to tab
  repeat with VarX = 1 to the number of fields of this card
    if the Numero of field VarX is not empty then
      put the Numero of field VarX into VarText
      repeat with VarY = 1 to the number of lines of fld VarLangue
        if the item 1 of line VarY of fld VarLangue = VarText then
          put item 2 of line VarY of fld VarLangue into field VarX
        end if
      end repeat
    end if
  end repeat
  unlock screen
end MouseUP


ca c'est pour les camps, j'en ai un autre pour les btn et un dernier pour le texte qui change dans les champs suivant ce que je survole.

J'ai pas encore sorti ça dans un fichier, mais ce n'est pas très compliqué.
C'est sûrement pas très optimiser comme code, mais j'ai fait avec ce que je connais.


Publié : 19.08.2006 - 7h18 par Jürg Studer

Bonjour Krynn

J'ai fait deux logiciels multilangues qui ont des structures différentes:
- Geld herausgeben CH.rev (chaque langue a sa propre carte)
- Uhrzeit_l'heure.rev (le contenu change d'après la langue choisie)

Tu trouves ces piles ici:
http://web.mac.com/juerg.studer/iWeb/We ... ommen.html
puis cliquer sur «Lernprogramme Rechnen"

Salutations et excuse les fautes orthographiques
Jürg, de langue maternelle allemande ;-)


Publié : 20.11.2006 - 14h33 par legallou

J'ai, sous Hypercard, fait, à l'époque 1982, un environnement complet d'administration du multi-langue.

1 - Fichiers indépendants par langue pour les messages d'erreur, et bulle d'aide.
2 - Utilitaire qui change dynamiquement les noms de bouton, et champs.

Et d'autres outils, du genre liste des routines utilisant une routine.

A voir, si cela, vaut la peine de convertir en Revolution. Je peux mettre le code à votre disposition. Pour ma part, j'ai abandonné l'idée de passer à Revolution. Je passe à AppleScript Studio. Là, le multi-langue est géré di-facto.


Publié : 11.02.2007 - 13h56 par xApple

Faire un fichier avec les infos dedans c'est fastidieux !
Le plus simple c'est d'utiliser le fait que les objets peuvent avoir des customs propriétés.
Puis il suffit de cycler tous les objets lorsque l'on change.
Voici le script à mettre dans le stack:


Code : Tout sélectionner

on changeLanguage theLanguage
  put "loc" & theLanguage into theCustomProp
  repeat with x = 1 to the number of cards of this stack
    put the objects of card x into cardObjects
    repeat with y = 1 to the number of lines of cardObjects
      put line y of cardObjects into currentObject
      do merge("put the [[theCustomProp]] of currentObject into myText")
      if myText is empty then next repeat
      put replaceText(myText,return,quote & " & return & " & quote) into myText
      put word 1 of the name of currentObject into objectType
      -----------
      switch objectType
      case "field"
        do format("put (\"%s\") into %s",myText,currentObject)
        break
      case "button"
        do format("set the label of %s to (\"%s\")",currentObject,myText)
        break
      default
        answer error "Unknown object type while appliying a localized translation." & \
            return & return & "Object type:" && objectType &\
        return & "Obeject Name:" && currentObject
      end switch
    end repeat
  end repeat
end changeLanguage


getProp objects
  repeat with x = 1 to number of controls of the target
    put the long name of control x of the target & return after myList
  end repeat
  sort myList
  return myList
end objects


Puis il suffit d'appeler "changeLanguage French" depuis la message box par exemple. Et tous les objects qui doivent changer leur texte doivent avoir une custom prop nommée "locFrench" ou "locEnglish" contenant le nouveau texte.

Je pense que c'est vraiment la meilleur facon de faire. Que pensez-vous ?