French Traduire une application

Serge Bertet

Active Member
Licensed User
Salut,
J'ai trouvé le classe "Localizator version 1.01".
Est-ce que c'est la dernière méthode pour traduire une appli ?
Je ne trouve pas le convertisseur fichier excel vers la base de données SQLite pour générer le fichier strings.db
Il y a bien les fichiers source pour B4J mais je me souviens avoir utilisé il y a longtemps ce convertisseur sous forme de .exe
Merci
Serge
 

Serge Bertet

Active Member
Licensed User
Bon, OK j'ai trouvé le .jar pour convertir (pas l'habitude de Java)
en revanche je ne vois pas comment automatiser la conversion avec "#CustomBuildAction:"
B4X:
#CustomBuildAction: folders ready, "C:\Users\Serge\Documents\backup files Drago\B4XLocalizator.jar", ..\Files\strings.xlsx ..\Files\strings.db
 

klaus

Expert
Licensed User
Longtime User
J'ai tout récemment regardé Localizator pour un collègue en Allemagne et j'ai écrit des versions pas encore publiées.
Ce sont les versions de Erel, mais un peu modifiées.
Le convertisseur permet d'établir deux sortes de bases de données la version d'origine de Erel pour compatibilité et la mienne:
- Dans la BD version Erel, il y a trois colonnes: key, lang, value. Donc pour chaque mot ou phrase une une ligne pour chaque langue.,
- Dans la BD nouvelle version il y la colonne key puis une colonne par langue, même structure que la table Excel, ce qui donne des bases de données moins volumineuses et plus lisibles.
S'il y a des cases vides, non traduites, ces cases restent aussi vides dans la base de données, c'est le Localizator qui se charge des les remplir.
Il peut aussi lire des fichiers *xls.
Le fichier Excel peut avoir une ou des lignes titre / sous-titre.
Et on peut avoir des lignes commentaires, une ligne dont la deuxième colonne est vide est considérée comme commentaire.

La classe Localizator2 reconnait automatiquement les bases de données anciennes ou nouvelles.

Ci-joint:
- le programme B4J de conversion Excel > BD ConverterLocalizator2.
- un fichier Excel de test.
- un projet B4XPages Localizator2Demo qui contient la classe Localizaror2 et deux bases de données test.
 

Attachments

  • ConverterLocalizator2.zip
    10.9 KB · Views: 104
  • TestXLSX.xlsx
    9 KB · Views: 99
  • Localizator2Demo.zip
    36.1 KB · Views: 96

Serge Bertet

Active Member
Licensed User
OK super, je vais installer tout ça.
Effectivement je me souviens d'avoir vu quelque part sur le forum cette feuille Excel avec une colonne par langue.
Merci.
 

Serge Bertet

Active Member
Licensed User
J'ai commencé à traduire l'application, ça fonctionne pour les 3 langues : 'en', 'de' et 'fr'
J'ai voulu ajouter une colonne 'es' mais l'appli plante au démarrage.
B4X:
android.database.sqlite.SQLiteException: no such column: es (code 1): , while compiling: SELECT key, es FROM data
C'est pas possible ou je m'y prends mal ?
 

Attachments

  • strings.xls
    18.5 KB · Views: 107

Serge Bertet

Active Member
Licensed User
OK super, j'ai recompilé, ça fonctionne ! Merci.

J'ai remarqué une chose c'est que quand j'appelle : LocalizeLayout(Me) ça ne fonctionne pas.
Ca ne me dérange pas, je ne passe jamais Activity, je ne passe que Panel en argument.
 

klaus

Expert
Licensed User
Longtime User
J'ai remarqué une chose c'est que quand j'appelle : LocalizeLayout(Me) ça ne fonctionne pas.
C'est normal. Me représente le module d'Activity.
Dans un programme purement B4A tu dois utiliser LocalizeLayout(Activity)
 

Serge Bertet

Active Member
Licensed User
Waou !... effectivement, j'avais pas saisi la différence.
Merci
 

Serge Bertet

Active Member
Licensed User
Allons à Messine pêcher la sardine, allons à Lorient pêcher le hareng .... 😁
Ouais, ça Bosphore et surtout ça phosphore !
Bientôt une nouvelle version en vue ... garde ton énergie, je vais avoir besoin de toi.
 

Serge Bertet

Active Member
Licensed User
J'avais des problèmes avec la localisation des labels multilignes.
J'ai ajouté la classe AutoTextSizeLabel Version 1.3 mais si la chaine de caractère ne contient pas de CRLF ça reste sur une ligne ou l'ajustement se fait mal même avec minSize et maxSize.
J'ai trouvé une parade (même si je sais que je ne devrais pas le faire 😁), j'ai modifié la classe Localizator2 que j'ai renommée :
B4X:
' Localizes the given key.
' If the key does not match then the key itself is returned.
' Note that the key matching is case insensitive.
' Insert a line break if "\n" is found.
Public Sub Localize(Key As String) As String
    Dim rep As String = strings.GetDefault(Key.ToLowerCase, Key)
    If rep.Contains("\n") Then
        rep = rep.SubString2(0, rep.IndexOf("\n")) & CRLF & rep.SubString(rep.IndexOf("\n")+2)
    End IF
    Return rep
End Sub
J'obtiens de très bons résultats 😎 (même avec les textes en allemand !) ça peut peut-être te donner des idées ...
Il y a peut-être une autre solution aussi ....
 

Marc DANIEL

Well-Known Member
Licensed User
Avec l'aide précieuse de mon vieux frère Klaus, j'avais développé une application de traitement des fichiers GEDCOM (généalogies) en plusieurs langues tout simplement avec des fichiers TXT (français, anglais, allemand, italien et espagnol)
Voir ICI

(Pour essayer cette application, il faut télécharger un fichier GEDCOM (Fichier.GED) dans le répertoire "Download" du Smartphone ... En voici un en PJ)
 

Attachments

  • GED.zip
    2.5 KB · Views: 87
Last edited:

Serge Bertet

Active Member
Licensed User
Merci Marc,
Vu la méthode avec fichiers texte et numéros de lignes, effectivement les retours à la ligne sont dans le fichier pas de soucis.
J'ai trouvé un fichier GED exemple (pas facile à trouver) et j'ai pu l'exécuter, pas mal cette appli, un sacré boulot là !
 

Marc DANIEL

Well-Known Member
Licensed User
Je t'en avais mis un en PJ (Petite généalogie de Victor HUGO)
Oui, j'avais bossé longtemps sur ça mais Klaus m'avait énormément aidé.
J'ai développé depuis une application destinée à ma propre famille avec photos téléchargeables, etc ... et on remonte dans certaines branches, du côté de mon arrière-grand-mère maternelle bourguignonne jusqu'à Charlemagne et même Charles MARTEL sur 48 générations (Voir "chemin")

Mais je ne suis pas le seul dans ce cas, voir cet article ...
 

Attachments

  • 48generations.pdf
    284.9 KB · Views: 99
Last edited:

klaus

Expert
Licensed User
Longtime User
J'ai ajouté la classe AutoTextSizeLabel Version 1.3 mais si la chaine de caractère ne contient pas de CRLF ça reste sur une ligne ou l'ajustement se fait mal même avec minSize et maxSize.
Désolé, mais je n'ai pas bien compris le problème.
Peux-tu s.t.p. l'expliquer plus en détail.
 

Serge Bertet

Active Member
Licensed User
Le cœur de la classe que j'utilise (la classe originale de Erel contient cette même Sub) est cette sub :
B4X:
Public Sub setText(value As Object)
    mlbl.Text = value
    Dim multipleLines As Boolean = mlbl.Text.Contains(CRLF) ' <= ICI
    Dim size As Float
    For size = minSize To maxSize
        If CheckSize(size, multipleLines) Then Exit
    Next
    size = size - 0.5
    If CheckSize(size, multipleLines) Then size = size - 0.5
    Sleep(0)
    mlbl.TextSize = size
End Sub
On voit que le label doit contenir un CRLF pour être considéré multi lignes.

AutoTextSizeLabel essaye de mettre tout le texte dans une seule ligne même si le label est multi lignes.
(pourtant il y a une case à cocher 'Single Line' dans le designer qui pourrait être utilisé par la classe)

NB: je viens de me souvenir qu'on pouvait rajouter un CRLF dans Excel en faisant Ctrl+Enter, je viens de tester et ça fonctionne, je supprime donc ma modif dans la classe Localizator : plus besoin de mes "\n".
 
Top