Pages : 1
#1 Le 24/04/2020, à 17: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
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, à 17: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, à 06: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, à 06: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, à 14: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, à 17: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, à 18: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, à 18:15)
KDE Neon 64bits
Tous mes softs (MKVExtractorQt, HizoSelect, HizoProgress, Qtesseract, Keneric, Services menus...) sont sur github
Hors ligne
#6 Le 26/04/2020, à 21: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, à 09: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
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, à 10: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
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
Dernière modification par Christophe C (Le 27/04/2020, à 10: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, à 16: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, à 18: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, à 19: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, à 07:58
- Christophe C
Re : traduction
Ah, ok. Oui c'est intéressant, effectivement, je ne connaissais pas. merci
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, à 08: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, à 09: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, à 10:35
- Christophe C
Re : traduction
Argllll. Oui, plusieurs pluriels ... L'inventeur du polonais a du faire un stage avec l'inventeur du bash
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
Pages : 1