Bonjour,
je peine avec l'utilisation de i18n dans les composants.
- D'abord dans le composant, en mode csDesigning, je suis surpris dans la plupart de ceux fournis dans le répertoire lazarus/components de ne pas y trouver un code du genre
...code que je placerais par exemple dans le constructeur.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 procedure TmyComponent.TranslateIT; {uses LResources, Translations, gettext} var PODirectory, Lang, FallbackLang : String; begin PODirectory := IncludeTrailingPathDelimiter('languages'); Lang := ''; FallbackLang := ''; GetLanguageIDs(Lang,FallbackLang); Translations.TranslateUnitResourceStrings('myComponent', PODirectory+'myComponent.%s.po', Lang, FallbackLang); end;
En mode csDesigning, est-ce que cela signifie que le i18n activé qui pointe vers le répertoire languages/ du composant suffit* à assurer la traduction au niveau de l'IDE ? Quelque soit la solution employée, je n'ai rien obtenu de fonctionnel.
* : sans plus de code que la déclaration de l'unit DefaultTranslation -et encore pas dans tous- dans les uses du composant
Question 1 : Une solution qui fonctionne ?
- Maintenant, en mode utilisation de myComponent dans un projet, si une méthode du composant envoie un message (resourcestring) lors de l'exécution du projet, par exemple à la suite d'un Try Except incorporé à une méthode, je me demande comment peut être réalisée la traduction.
Le resourcestring appartient au composant. A ce titre, comment peut-il (pourrait-il ?) être traduit en "mode exécution" (même si on plaçait les myComponent.xx.po du composant dans le répertoire languages/ du projet) ?
Question 2 : La traduction dans ce cas de figure est-elle envisageable ?
Merci.
Cordialement. Gilles
Partager