Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/04/2020, à 18:10

Christophe C

traduction

Bonjour,

je sais déjà utiliser les fichiers PO, POT et MO pour les trad.

Je préfère travailler à l'éditeur de texte.

Mais si j'ai un texte de plusieurs lignes, puis-je éviter de faire du ligne à ligne ?

Par exemple dans mon code je peux faire

$"hello world"
$"fine ?"
$"nice day, no ?"

Avec en PO

msgid "hello world"
msgstr "Bonjour le monde"

msgid "fine ?"
msgstr "ça va ?"

msgid "nice day, no ?"
msgstr "Belle journée, non ?"

Ca marche, mais c'est assez lourd.

Puis-je avoir quelque chose de plus simple, genre :

Code :

$"hello world
fine ?
nice day, no ?"

Et en PO :

msgid "hello world
fine ?
nice day, no ?"

msgstr "Bonjour le monde"
ça va ?
Belle journée, non ?"

Cela ne marche pas sous cette forme, mais vous voyez l'idée smile

Y a t'il une solution dans ce genre ? Quelque chose de plus simple pour des textes un peu long, genre des aides.

Dernière modification par Christophe C (Le 24/04/2020, à 18:22)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#2 Le 25/04/2020, à 07:40

Christophe C

Re : traduction

J'ai trouvé :

Code bash :

$"hello world
fine ?
nice day, no ?"

Et en PO :

msgid "hello world\n"
"fine ?\n"
"nice day, no ?"

msgstr "Bonjour le monde\n"
"ça va ?\n"
"Belle journée, non ?"

Dernière modification par Christophe C (Le 25/04/2020, à 07:40)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#3 Le 26/04/2020, à 15:54

LeoMajor

Re : traduction

Y a t'il une solution dans ce genre ? Quelque chose de plus simple pour des textes un peu long, genre des aides.

bonjour,

en gambas, cela est relativement simple pour internationaliser une application. Il y a des .po .mo .pot, qui se font presque automatiquement.
interface, bouton, menu,  texte, notification ...

-projet/propriétés/options   projet traduisible + langue anglais
--> un toolbutton "drapeau bleu" apparaît. Choisir les langues.
-installer gettext* et translate-shell
-outils/préferences/projets/  -> translate-shell  ( si on veut une traduction automatique )

-mettre tout ce que l'on veut traduire entre parenthèses ; cela sera détecté par le toolbutton "drapeau bleu". Compléter pour chaque traduction & vérifier & enregistrer
exemples

System.Language = "ja_JP.utf8"   
'System.Language = "ar_EG.utf8"  
Print ("hello")
Print ("house")
Print ("car")
Public Sub Button1_Click()
  Dim tr As String
  tr = ("the house is pretty")
  Button1.Text = ("open")
  Message(tr)
End
Public Sub Init_Demo_Menu()
  Dim tmp As Menu, lg As New String[5, 3, 5], h, i, j As Short
  System.Language = "ja_JP.utf8"
  
  'horizontal
  lg[0, 0, 0] = "Menu Global"
  lg[0, 1, 0] = "Menu Sup."
  lg[0, 2, 0] = "Options"
  
  'Menu Global
  'vertical
  lg[1, 0, 0] = ("graphics")
  lg[2, 0, 0] = ("utilities")
  lg[3, 0, 0] = ("accessories")
  lg[4, 0, 0] = ("network")

' graphiques  
  lg[1, 0, 1] = "gimp"
  lg[1, 0, 2] = "pinta"
  lg[1, 0, 3] = "dessin"
'utilitaires  
  lg[2, 0, 1] = "foo"
  lg[2, 0, 2] = "bar"
'accessoires  
  lg[3, 0, 1] = "calculatrice"
'réseaux  
  lg[4, 0, 1] = "wireshark"
  lg[4, 0, 2] = "firefox"
  lg[4, 0, 3] = "chromium"
  lg[4, 0, 4] = "opera"

'Menu Sup.
  'vertical
  lg[1, 1, 0] = "a"
  lg[2, 1, 0] = "b"
  lg[3, 1, 0] = "c"
  lg[4, 1, 0] = "d"

' a 
  lg[1, 1, 1] = "aa"
  lg[1, 1, 2] = "ab"
  lg[1, 1, 3] = "ac"
'b 
  lg[2, 1, 1] = "ba"
  lg[2, 1, 2] = "bb"
'c  
  lg[3, 1, 1] = "ca"
'd  
  lg[4, 1, 1] = "da"
  lg[4, 1, 2] = "db"
  lg[4, 1, 3] = "dc"
  lg[4, 1, 4] = "dd"  

'Options
  'vertical
  lg[1, 2, 0] = ("settings")
  lg[2, 2, 0] = "test-ei"
  'settings
  lg[1, 2, 1] = "config"
  lg[1, 2, 2] = "config_plus"
  
  
'Menu Horizontal  
For h = 0 To 2
  If lg[0, h, 0] Then
  tmp = New Menu(FMain)
  tmp.Text = lg[0, h, 0]
  tmp.Name = "H" & CStr(h)
  tmp.Visible = True
  tmp.Tag = h
  If Not ms.ExistByRef(tmp) Then ms[0, h, 0] = tmp
  Endif

'Menu Vertical  
  For i = 1 To 4
    If lg[i, h, 0] Then
      tmp = New Menu(ms[0, h, 0]) As "ei"
      tmp.Name = "V" & CStr(i)  
      tmp.Tag = i & h & 0 
      tmp.Text = lg[i, h, 0]
      If Not ms.ExistByRef(tmp) Then ms[i, h, 0] = tmp
    Endif
    
    
    For j = 1 To 4
      If lg[i, h, j] Then 
        tmp = New Menu(ms[i, h, 0]) As "ej"
        tmp.Name = "M" & CStr(i) & CStr(h) & CStr(j)
        tmp.Tag = i & h & j
        tmp.Text = lg[i, h, j]
        If Not ms.ExistByRef(tmp) Then ms[i, h, j] = tmp
       
        
      Endif
    Next
  
  Next
Next


End

Public Sub ej_Click()
  
  Dim focus As Menu
  focus = Last
  Message.Info(focus.text)
  
End

Public Sub ei_Click()
  
  Dim focus As Menu
  focus = Last
  Message.Info("testa")
  
End

pour vérifier côté utilisateur, client, par exemple une traduction en japonais.

il faut installer les locales language-pack-ja*
et simuler avec

System.Language = "ja_JP.utf8" 
:~$ ls ~/gambas/projet_foo/.lang/
ar.mo  ar.po  en.mo  en.po  FMain.pot  fr.mo  fr.po  ja.mo  ja.po  #project.pot

Hors ligne

#4 Le 26/04/2020, à 18:05

Christophe C

Re : traduction

Je ne vais pas apprendre un langage pour ça. Déjà je n'utilise pas poedit pour bien comprendre ce que je fais ...


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#5 Le 26/04/2020, à 19:10

Hizoka

Re : traduction

Si tu veux faire vraiment simple et que tu n'as pas des centaines de traductions à faire, j'utilise ça pour mes scripts :

# Langue du système
Lang=${LANG:0:2} Lang=${Lang,,}

# Tableau des traductions
declare -Ag Texts

# Remplissage du tableau en fonction de la langue utilisée
if [[ ${Lang,,} == fr ]]
then
    Texts["Hello"]="Bonjour :"
    Texts["HowDoYouDou"]="Comment allez-vous ?"
    Texts["LongText"]="Ce texte\nva à la ligne\n\tet prend en compte les tabulations."
    Texts["LongText2"]="Ce texte
aussi va à la ligne."
else
    Texts["Hello"]="Hello :"
    Texts["HowDoYouDou"]="How do you do?"
    Texts["LongText"]="This text\ngoes to the line\n\tand takes into account the tabulations."
    Texts["LongText2"]="This text
too goes to the line."
fi

echo "${Texts[Hello]} Hizo. ${Texts[HowDoYouDou]}"
echo -e "${Texts[LongText]}"
echo "${Texts[LongText2]}"

Dernière modification par Hizoka (Le 26/04/2020, à 19:15)


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#6 Le 26/04/2020, à 22:15

Christophe C

Re : traduction

Merci, mais je n'en vois pas bien l'intérêt. Un fichier PO, c'est facile à remplir.


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#7 Le 27/04/2020, à 10:20

Hizoka

Re : traduction

S'il n'y a pas énormément de traduction, c'est l'utilisation d'un système tiers plus lent que du fullbash nécessitant d'autres fichiers.

Par contre, si c'est un "vrai" logiciel graphique, oui c'est mieux.
Le gros avantage des fichiers po, c'est que si demain tu changes de langage de programmation, ils seront toujours fonctionnels.
De même si des gens veulent traduire le soft, c'est plus facile.

Voilou smile

Bonne continuation


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#8 Le 27/04/2020, à 11:42

Christophe C

Re : traduction

Bon, vue mes modestes besoins, je crois que je vais rester à l'éditeur de texte et aux .po.

Avec eux au moins je comprends ce que je fais smile

Merci de l'info. Je comprends que pour des projets de grande envergure, une automatisation des gestions de fichiers intégrée dans l'IDE (comme ce qu'indique LeoMajor), c'est très intéressant. Pour moi c'est surdimensionné, par contre. Mais c'est bien de savoir que cela existe.

Merci à vous deux smile

Dernière modification par Christophe C (Le 27/04/2020, à 11:42)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#9 Le 02/05/2020, à 17:30

Hizoka

Re : traduction

Je rajoute une pierre car j'ai du chercher pour un projet sur lequel je me repenche et il utilise justement gettext.

La gestion des textes pouvant être au singulier ou au pluriel.

Fichier po :

# Header du fichier
msgid ""
msgstr ""
"Project-Id-Version: 1\n"
"Language: fr_FR\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Plural-Forms: nplurals=2; plural=n>1;\n" # Important, on lui dit qu'en français, le pluriel commence à 2
# ...

# La traduction en elle-même
msgid "%d file" # Texte original singulier
msgid_plural "%d files" # Texte original pluriel
msgstr[0] "%d fichier" # Traduction si la valeur est de 0 ou de 1
msgstr[1] "%d fichiers" # Traduction si la valeur dépasse 1

Dans le fichier bash :

ngettext "%d file" "%d files" 2

Il faut remplacer la commande gettext par ngettext.
ngettext a besoin du texte singulier, du texte pluriel et de la valeur à appliquer, celle ci doit être remplacée par %d.

Ce qui donnera :

ngettext "%d file" "%d files" 0 # 0 fichier
ngettext "%d file" "%d files" 1 # 1 fichier
ngettext "%d file" "%d files" 2 # 2 fichiers
ngettext "%d file" "%d files" 3 # 3 fichiers
...

Liens utiles :
https://www.gnu.org/software/gettext/ma … ttext.html
http://pology.nedohodnik.net/doc/user/e … ormat.html


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#10 Le 02/05/2020, à 19:36

Christophe C

Re : traduction

Je n'ai pas compris. Ça sert à quoi ?

Et que veut dire msgid "%d file" (par exemple) ?
File est une variable ?


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#11 Le 02/05/2020, à 20:35

Hizoka

Re : traduction

Ça sert à adapter un texte du genre :

10 fichiers ont été trouvés.

C'est propre mais si ce n'est plus le cas avec moins de 2 fichiers :

1 fichier ont été trouvés.

Il est possible de se faire un truc du genre :

1 fichier(s) a/ont été trouvé(s).

mais c'est cracra...

Du coup, il est possible d'adapter le texte à une variable, ici le nombre de fichier.

Et que veut dire msgid "%d file" (par exemple) ?
File est une variable ?

Donc non, la variable n'est pas file mais %d.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#12 Le 03/05/2020, à 08:58

Christophe C

Re : traduction

Ah, ok. Oui c'est intéressant, effectivement, je ne connaissais pas. merci smile

j'aurais eu tendance à mettre 2 chaines dans le programme :

si $occurence = 1 ; alors $"Un fichier a été trouvé" ; sinon $"Des fichiers ont étés trouvés" ; fi

Mais effectivement, c'est bien plus simple comme cela.

Dernière modification par Christophe C (Le 03/05/2020, à 09:01)


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne

#13 Le 03/05/2020, à 10:46

Hizoka

Re : traduction

C'est ce que j'aurai fait aussi mais les pages expliquent bien qu'en fonction des langues, ça ne fonctionne pas.

Ils prennent en exemple le polonais qui a plusieurs déclinaisons en fonction du dernier chiffre.

1 plik
2,3,4 pliki
5-21 pliko'w
22-24 pliki
25-31 pliko'w

Du coup, impossible de bien traduire le soft sans passer par ce système intégré à gettext.


KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github

Hors ligne

#14 Le 03/05/2020, à 11:35

Christophe C

Re : traduction

Argllll. Oui, plusieurs pluriels ... L'inventeur du polonais a du faire un stage avec l'inventeur du bash smile


BountySource - Faite un petit don, ponctuel ou récurent, pour soutenir le développement de XFCE.
Timeshift - Sécurité : pensez à paramétrer des points de restauration système.
Euclide : « Ce qui est affirmé sans preuve peut être nié sans preuve ».

Hors ligne