DEU-Übersetzung für BC14 NL Datenbank erstellen

19. Januar 2021 13:27

Moin zusammen,

wir haben aktuell zwei BC14 OnPrem Datenbank für unsere ausländischen Niederlassungen.
1.: Niederlande mit der niederländischen Version von BC14.
2.: Polen mit einer polnischen Lokalisierung auf Basis der W1-Version.

Die NL-Version enthält von Haus aus ENU und NLD.
Die PL-Version enthält nur ENU, da die polnische Übersetzung als Extension abgebildet ist.

Jetzt möchten wir natürlich die beiden Datenbanken auch auf DEU bedienen können, ohne jedoch die DEU-Captions in die Objekte zu importieren, da die Objekte im Originalzustand (NL bzw. W1) bleiben sollen.

Hierzu habe ich in einer separaten W1-Datenbank den DEU-Sprachlayer (*.flm) importiert und die Translations in eine Textdatei exportiert.
Diese Textdatei habe ich in das Translation-Tool des Object Managers geladen, daraus ein DEU-Wörterbuch generiert und auf alle Lokalisierungen angewendet, so dass in den lokalen Objekten zumindest die bekannten Begriffe (wie "Customer No.", ...) übersetzt werden können.
Diese Übersetzung kann ich jetzt wieder in eine Textdatei exportieren, welche ich in die Datenbank-Objekte importieren könnte, aber letzteres möchte ich ja ausdrücklich nicht.

Unter NAV2017 musste ich diese Textdatei einfach nur in UTF8 (ohne BOM) konvertieren und in dem Unterordner "Translations" des ServiceTiers (bzw. dessen Instanz) ablegen.
Nach dem Neustart des Services standen dann die Übersetzungen zur Verfügung, ohne dass ich die Objekte ändern musste.
Unter BC14 funktioniert der Trick mit dem Translations-Ordner anscheinend nicht mehr.

Fragen:
a) Unterstützt BC14 wirklich keine Translations-Ordner mehr wie unter NAV2017 oder was mache ich falsch?
b) Wenn die Translations-Ordner nicht mehr unterstützt werden, wie übersetze ich dann eine NL-Datenbank in DEU?

Ich hatte hier im Forum auch zwei PowerShell-Scripte (TXT2XLF / XLF2TXT) von Kowa gesehen, welche die Textdatei in eine XLF konvertieren sollen, aber leider wirft die PowerShell einen Syntaxfehler.
Und selbst, wenn das Script die Datei erfolgreich konvertiert bekommt, was mache ich dann mit der XLF-Datei?
Muss ich die irgendwo in das ServiceTier-Verzeichnis kopieren oder muss ich aus der XLF-Datei eine Extension erzeugen, welche ich in den BC14-Datenbanken installieren kann?

Im Netz finde ich nur Informationen, wie ich XLF-Übersetzungen für meine eigenen Extensions erstellen kann, aber nicht, wie ich Übersetzungen zu bereits in der Datenbank vorhandenen Objekten erstelle.

Auffällig ist, dass die IDs in XLF-Dateien aus eigenen Extensions völlig anders aussehen als die IDs in der per PowerShell konvertierten Textdatei.
Hat das damit zu tun, dass die Elemente in den NAV-Objekten der Datenbank auch weiterhin mit dem alten ID-Format (T36-F3-P4711-A1031) adressiert werden, während die Elemente in Extensions mit dem neuen ID-Format benannt werden?

Re: DEU-Übersetzung für BC14 NL Datenbank erstellen

19. Januar 2021 18:58

Timo Lässer hat geschrieben:Ich hatte hier im Forum auch zwei PowerShell-Scripte (TXT2XLF / XLF2TXT) von Kowa gesehen, welche die Textdatei in eine XLF konvertieren sollen, aber leider wirft die PowerShell einen Syntaxfehler.

Ich habe das TXT2XLF spaßeshalber mal wieder ausgeführt, läuft bei mir weiterhin einwandfrei (Leerzeichen im Dateipfad sind nicht zulässig). Welcher Syntaxfehler kommt bei dir denn?
Mit den Anforderungen der Extensions hat das aber ohnehin nichts zu tun. Die Trans-unit ID ist ja in den XLIFFs für AL vollkommen verschieden (lt. MS berechnet über die Roslyn hash method, weil die Namen sonst zu lang für die IDs der XLIFF werden können)
https://github.com/dotnet/roslyn/blob/master/src/Compilers/Core/Portable/InternalUtilities/Hash.cs
https://www.yammer.com/dynamicsnavdev/threads/1002744300
Code:
 long FNVHash(string name)
{
const int FnvOffsetBias = unchecked((int)2166136261);
const int FnvPrime = 16777619;
 
byte[] data = Encoding.Unicode.GetBytes(name);
 
int hashCode = FnvOffsetBias;
 
for (int i = 0; i < data.Length; i++)
{
hashCode = unchecked((hashCode ^ data[i]) * FnvPrime);
}
 
return (long)hashCode + Int32.MaxValue;
}


Zum Konvertieren der alten Sprachdateien liefert MS dieses Skript:
https://github.com/microsoft/AL/blob/master/scripts/Txt2Xliff.ps1
https://github.com/MicrosoftDocs/dynamics365smb-devitpro-pb/issues/758

Working with Translation Files