|
|
# locale.xml
|
|
|
|
|
|
In der locale.xml können Sie Übersetzungen für Ihre Erweiterung von QUIQQER zur Verfügung stellen.
|
|
|
Für beliebig viele Sprachen können hier Übersetzungen angelegt werden.
|
|
|
Diese Übersetzungen stehen in PHP und JavaScript über das Locale Objekt zur Verfügung.
|
|
|
Alle Übersetzungen, auch die von QUIQQER finden Sie in locale.xml Dateien. Diese Übersetzungen werden von QUIQQER in Datenbank Tabelle _locale_ gespeichert. Über das Frontend sind diese Übersetzungen editierbar (auch export + import), die locale.xml Dateien werden dadurch nicht verändert. Weitere Informationen der Editierung über das Frontend entnehmen Sie bitte der Benutzer Dokumentation.
|
|
|
|
|
|
Zusätzlich ist es Möglich im Nachhinein Übersetzungen zu überschreiben ohne die locale.xml zu verändern.
|
|
|
|
|
|
## Aufbau
|
|
|
|
|
|
Eine locale xml gliedert sich wie folgt:
|
|
|
|
|
|
```xml
|
|
|
<locales>
|
|
|
<groups name="package/awesome" datatype="js">
|
|
|
<locale name="my.translation.var.in.java.script">
|
|
|
<de><![CDATA[Ich existiere nur in JavaScript]]></de>
|
|
|
<en><![CDATA[I exist only in JavaScript]]></en>
|
|
|
</locale>
|
|
|
</groups>
|
|
|
|
|
|
<groups name="package/awesome" datatype="php">
|
|
|
<locale name="my.translation.var.in.java.script">
|
|
|
<de><![CDATA[Ich existiere nur in PHP]]></de>
|
|
|
<en><![CDATA[I exist only in PHP]]></en>
|
|
|
</locale>
|
|
|
<locale name="my.translation.var.in.java.script" html="true">
|
|
|
<de><![CDATA[<p>ich kann html enthalten und <u>bin mit einem editor editierbar</u></p>]]></de>
|
|
|
<en><![CDATA[<p>I can contain html and <u>i am edited with an editor</u></p>]]></en>
|
|
|
</locale>
|
|
|
</groups>
|
|
|
|
|
|
<groups name="package/awesome" datatype="php,js">
|
|
|
<locale name="my.translation.var.in.javascript.and.php">
|
|
|
<de><![CDATA[Ich existiere in PHP und JavaScript]]></de>
|
|
|
<en><![CDATA[I exist in PHP and JavaScript]]></en>
|
|
|
</locale>
|
|
|
</groups>
|
|
|
</locales>
|
|
|
```
|
|
|
|
|
|
```xml
|
|
|
<locales>
|
|
|
<groups name="package/awesome" datatype="php,js">
|
|
|
<locale name="my.translation.var.in.javascript.and.php" priority="3">
|
|
|
<de><![CDATA[Ich existiere in PHP und JS und überschreibe noch die Variable my.translation.var.in.javascript.and.php ]]></de>
|
|
|
<en><![CDATA[I exist in PHP and JS and override the variable my.translation.var.in.javascript.and.php]]></en>
|
|
|
</locale>
|
|
|
</groups>
|
|
|
</locales>
|
|
|
```
|
|
|
|
|
|
### Erklärung
|
|
|
|
|
|
- `<locales>` = Anfang der locale Definition
|
|
|
- `<groups>` = Übersetzungs Gruppe
|
|
|
- `<locale>` = Übersetzungs Variable
|
|
|
|
|
|
#### `<groups name="my/group">`
|
|
|
|
|
|
Das **name** Attribut ist ein Pflichtattribut. Dies definiert in welcher locale Gruppe die Variable existiert.
|
|
|
|
|
|
Das **datatype** Attribut ist optional. Dieses Attribut legt fest, in welchem Bereich die Variable existiert. D.h. ob die Variable über PHP und/oder JavaScript erreichbar ist.
|
|
|
|
|
|
Mögliche Werte:
|
|
|
|
|
|
+ datatype="php" *(default)*
|
|
|
+ datatype="js"
|
|
|
+ datatype="php,js"
|
|
|
|
|
|
**datatype** wurde aus performance technischen Gründen integriert, damit nicht zu viele Objekte und Werte im JavaScript existieren. Das System kann somit für JavaScript eine eigens compilierte Übersetzungs Datei erstellen.
|
|
|
|
|
|
#### `<locale name="my.translation.var">`
|
|
|
|
|
|
Das *name* Attribut
|
|
|
In dem `<locale>` Node werden alle Übersetzungen der Variable mit einem Sprachkürzel definiert.
|
|
|
|
|
|
`<de>` = deutsch
|
|
|
`<en>` = englisch
|
|
|
|
|
|
Den Inhalt einer Übersetzung bitte mit `<![CDATA[ ]]>` verwenden, damit es keine Probleme mit dem Inhalt gibt.
|
|
|
|
|
|
|
|
|
#### Übersetzungs Texte
|
|
|
|
|
|
##### Variablen
|
|
|
|
|
|
Im Übersetzungs Text können sogenannte **Variablen** verwendet werden, damit vom System Werte im Text platziert werden können. Dem Locale Objekt müssen diese Variablen im Programmcode natürlich übergeben werden.
|
|
|
|
|
|
Die Variablen können frei in die Sprachvariablen eingebunden werden. Hierzu muss der Variablenname einfach in **eckigen Klammern** platziert sein:
|
|
|
|
|
|
Beispiel:
|
|
|
```xml
|
|
|
<locale name="my.awesome.translation">
|
|
|
<de><![CDATA[Mein Benutzername ist [username]]]></de>
|
|
|
<en><![CDATA[My username is [username]]]></en>
|
|
|
</locale>
|
|
|
```
|
|
|
|
|
|
```php
|
|
|
<?php
|
|
|
|
|
|
\QUI::getLocale()->get( 'my/group', 'my.awesome.translation', array(
|
|
|
'username' => $User->getName()
|
|
|
));
|
|
|
|
|
|
?>
|
|
|
```
|
|
|
|
|
|
|
|
|
##### Html
|
|
|
|
|
|
In Übersetzungstexten kann HTMl verwendet werden. Hierfür muss lediglich das Attribut 'html' der Sprachvariablendefinition auf `true` gesetzt sein.
|
|
|
Beispiel:
|
|
|
```xml
|
|
|
<locale name="my.translation.var.in.java.script" html="true">
|
|
|
<de><![CDATA[<p>ich kann html enthalten und <u>bin mit einem editor editierbar</u></p>]]></de>
|
|
|
<en><![CDATA[<p>I can contain html and <u>i am edited with an editor</u></p>]]></en>
|
|
|
</locale>
|
|
|
```
|
|
|
|
|
|
|
|
|
**Zu beachten:**
|
|
|
Mustache rendert HTML nur , wenn die Variable in drei geschweiften Klammern gesetzt ist. Beispiel : {{{variable_mit_html}}}
|
|
|
|
|
|
|
|
|
|
|
|
## Zugriff auf Übersetzungen
|
|
|
|
|
|
In PHP und JavaScript gibt es jeweils ein QUIQQER Locale Objekt.
|
|
|
In diesem Objekt wird automatisch die Umgebungssprache verwendet. Möchten Sie nun eine Variable nutzen geht dies wie folgt:
|
|
|
|
|
|
|
|
|
**PHP**
|
|
|
|
|
|
```php
|
|
|
<?php
|
|
|
|
|
|
\QUI::getLocale()->get( 'my/group', 'my.translation.var' );
|
|
|
|
|
|
\QUI::getLocale()->get( 'my/group', 'my.translation.var', array(
|
|
|
'param1' => $value,
|
|
|
'param2' => $something
|
|
|
));
|
|
|
|
|
|
?>
|
|
|
```
|
|
|
|
|
|
**JavaScript**
|
|
|
|
|
|
```javascript
|
|
|
require(['Locale'], function(Locale)
|
|
|
{
|
|
|
Locale.get( 'my/group', 'my.translation.var' );
|
|
|
|
|
|
Locale.get( 'my/group', 'my.translation.var', {
|
|
|
'param1' : value,
|
|
|
'param2' : something
|
|
|
});
|
|
|
});
|
|
|
|
|
|
```
|
|
|
|
|
|
**HTML (Smarty)**
|
|
|
|
|
|
QUIQQER/smarty liefert ein Smarty Plugin ([Plugin Wiki](https://dev.quiqqer.com/quiqqer/package-smarty/wikis/function_locale)) mit, welches erlaubt Übersetzungen direkt in Smarty Templates aufzurufen:
|
|
|
|
|
|
```
|
|
|
{locale group="my/group" var="my.translation.var"}
|
|
|
```
|
|
|
|
|
|
**XML**
|
|
|
```
|
|
|
<locale group="quiqqer/group" var="variable.name" />
|
|
|
```
|
|
|
|
|
|
## Nutzung - Hinweis
|
|
|
|
|
|
Es macht Sinn sich an bestimmte Namenskonventionen zu halten, damit nicht ungewollt fremde Übersetzungen überschrieben werden. Daher sollten folgende Namenskonventionen für locale Gruppen und Variablen genutzt werden:
|
|
|
|
|
|
### Gruppen
|
|
|
|
|
|
Für Pakete **package/PACKAGE_NAME**
|
|
|
Für Projekte / Templates **project/PROJECT_NAME**
|
|
|
Für das QUIQQER System **system/quiqqer**
|
|
|
Für Zugriffsrechte **locale/permissions**
|
|
|
|
|
|
Beispiel:
|
|
|
|
|
|
```xml
|
|
|
<groups name="package/translator" type="php">
|
|
|
```
|
|
|
|
|
|
### Variablen
|
|
|
|
|
|
Generell sollten aussagekräftige Namen verwendet werden. Es nutzt niemandem wenn es Variablen wie "var.1", "var.2" oder "translate.var.10" gibt.
|
|
|
|
|
|
Für exceptions sollte die variable _immer_ mit **exception.** beginnen und messages (Meldungen) immer mit message.
|
|
|
|
|
|
Beispiel:
|
|
|
|
|
|
```xml
|
|
|
<locale name="exception.no.quiqqer.update.archive">
|
|
|
<de><![CDATA[Das Update konnte nicht durchgeführt werden. Das Archiv ist kein QUIQQER Archiv.]]></de>
|
|
|
<en><![CDATA[The update is not possible. The archive is not a QUIQQER archive.]]></en>
|
|
|
</locale>
|
|
|
```
|
|
|
|
|
|
|