Het gebeurt wel eens dat je een project hebt waarbij meertalige veldlabels nodig zijn. Een nederlandse gebruiker ziet dan “Achternaam” staan waar een engelse gebruiker “Last name” ziet staan. Thans dat is de bedoeling.
Er zijn op internet wel voorbeelden te vinden van hoe dat kan worden gerealiseerd en ik heb er zelf diverse bedacht, gezien en uitgeprobeerd. De manier die ik hier voorstel is héél eenvoudig uit te breiden én toe te passen. Deze werkwijze is absoluut niet invasief op je bestaande oplossing, want je bouwt het er bij, zonder relaties of wat dan ook toe te voegen.
Gebruik van de labels in een oplossing
In het voorbeeldbestand is er een tabel “L” zonder records, maar met een global-veld voor ieder mogelijk label dat je in je oplossing zou willen gebruiken. Je kan in ieder bestand waar vertaalde labels wordengebruikt, volstaan met alleen de table-occurrence “L” op te nemen in het relatie-schema van het bestand. Er is geen enkele relatie te leggen, dus het schema wordt er niet door vervuild.
in lay-out-modus de merge-velden op de layout zetten:
De labels instellen
met het scriptje Set label-translations kan de gewenste taal worden ingesteld. Op de layout Solution zijn daarvoor 2 knopjes aanwezig waar met een script-parameter de gewenste taal wordt bepaald. De keuzes NL en EN zijn nu beschikbaar, maar dat kan eenvoudig worden uitgebreid.
Nieuwe labels toevoegen
In de velddefinities kunnen labels worden toegevoegd door in de tabel “L” een tekst-veld met globale opslag toe te voegen. Dat laatste de globale opslag is een “verplichting” omdat het anders niet werkt.
Nadat de gewenste label-velden in L zijn aangemaakt, kan de tabel met vertalingen worden uitgebreid. Heel eenvoudig door het script Create translations te draaien worden voor alle ingestelde talen voor alle veldnamen in L waarvoor nog geen records zijn aangemaakt, records gemaakt. Alleen de vertalingen moeten dan nog worden ingevuld.
Als laatste de taal opnieuw instellen met het script en dan zijn alle nieuwe labels van tekst voorzien.
Nog een beetje techniek
Het ophalen van de veldnamen van de L-tabel gaat met een truukje dat sinds FileMaker 12 beschikbaar is. Op dit blog van databuzz staat beschreven hoe je met ExecuteSQL informatie kan opvragen over de structuur van de database. Ik heb die techniek gebruikt om van de tabel “L” alle veldnamen op te vragen.
ExecuteSQL ( "SELECT FieldName FROM FileMaker_Fields WHERE TableName='L' ORDER BY FieldName ASC "; "" ; "" )
Die informatie komt als een lijst terug die in een programma-lus wordt gebruikt om te controleren of er een record is waar die veldnaam in staat voor de betreffende taal. Ook dat doe ik met ExecuteSQL.
ExecuteSQL ( "SELECT "Language" FROM "Translations" WHERE "LabelName"=? AND "Language"=?" ; "" ; "" ; Lower ( $label ) ; Lower ( $language ) )
Is het antwoord op deze query leeg, dan wordt een nieuw record aangemaakt met de taal en naam van het label.
Een taal toevoegen
is heel eenvoudig. In het script Create translations wordt in de eerste set-variable stap de variabele $languages gevuld met:
ExecuteSQL ( “SELECT “Language” ” & ” FROM “Languages” ” ; “” ; “” )
Als daar bijvoorbeeld Frans en Duits aan moeten worden toegevoegd, dan voeg je in de tabel Languages 2 records toe met de waarden FR resp. DU. Vervolgens draai je nogmaals het script Create translations etc.
Een download is er uiteraard ook weer, klik maar op: Multilanguage fieldlabels
Veel plezier en laat maar weten of je er wat aan hebt. mvg, Menno