# Lassen Sie uns über Gladys V4 sprechen

**URL:** <https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578>\
**Category:** Développement\
**Created:** [20. Oktober 2018 um 21:24 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578 "2018-10-20T21:24:26Z")\
**Posts on this page:** 10\
**Page:** 36

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [27. Juli 2020 um 12:38 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/787 "2020-07-27T12:38:01Z")

</div>

Ein paar Neuigkeiten zur Veröffentlichung von Gladys 4 RC!

> [@Gladys 4 Beta ist verfügbar! rocket](https://community.gladysassistant.com/t/gladys-4-beta-est-disponible/4986/310?u=pierre-gilles):
>
> Salut à tous, Là semaine dernière, j’ai déployé une nouvelle version du site Gladys, centré sur la documentation. Aujourd’hui, je reprend le développement de Gladys 4 en elle même. Avant de me lancer tête baissée dans le développement, j’ai fais un point sur les objectifs à court terme du projet, et sur les todos en cours. J’aimerais en parler ici pour pouvoir aussi en discuter avec vous slight_smile Mon object n°1 désormais est de lancer Gladys 4 RC Afin de réaliser cet objectif, j’ai …

---

<div class="post-metadata">

**Author:** ![Terdious](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/terdious/32/6316_2.png) [@Terdious](https://community.gladysassistant.com/u/Terdious)\
**Post date:** [24. April 2022 um 06:36 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/788 "2022-04-24T06:36:22Z")

</div>

> [@pierre-gilles](#):
>
> Im Gegensatz dazu:
> 
> > [@MathieuA](#):
> >
> > Sollte der Übersetzungsordner nicht eher im Client-Ordner sein? XD
> 
> Für mich wird es sowohl auf der Client- als auch auf der Serverseite geben. Zwar wird fast alles auf der Client-Seite sein, aber auf der Serverseite gibt es immer noch Übersetzungen zu machen (z. B. der Titel einer Push-Benachrichtigung, die gesendet werden soll, usw…)

Hallo, ein kleiner Aufruf an die Entwickler:

Ich versuche, an dem Thema der Server-Übersetzung zu arbeiten, insbesondere weil ich nach den Tests und der Sortierung im Netatmo-PR wieder etwas aufgenommen habe, es gibt viele Funktionen, deren Namen eine Übersetzung benötigen. Ich dachte, ich würde eine PR dafür machen.  
Es funktioniert gut, aber:

**Erster Punkt** :

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/fa5e60c2fdce6e46b538316eb51d3e0ac0fabca1.png)  
Ich habe diesen Fehler bei ESLint. Bei der ersten Zeile verstehe ich nicht, warum, denn ich habe i18n direkt unter `/server` installiert. Ich dachte, es würde weitergegeben werden… Haben Sie eine Idee (es ist das erste Mal, dass ich eine Abhängigkeit installiere…)?  
Für die folgenden Zeilen verstehe ich, dass ESLint diese Zeichen einfach verbietet. Können wir ihm manuell neue Regeln zuweisen? Dürfen wir das? Und wenn ja, könnten Sie mir den Weg weisen? 😅

**Zweiter Punkt** :  
Für die Übersetzungssprache standardmäßig «&nbsp;EN&nbsp;», dann verwende ich die Sprache des ersten Benutzers, der beim Start von Gladys erstellt wurde. Derzeit (ich vermute, dass wir es nicht so machen werden, wenn es fertig ist), verwende ich user.update und user.updateBySelector, um die Sprache (falls nötig) von i18n zu aktualisieren. Neue Geräte, die erstellt werden, werden dann in der neuen Sprache erstellt.

Um die Diskussion also wieder aufzunehmen, was halten Sie von der Methodik? Wie strukturiert man das?  
Derzeit habe ich gemacht:

_ **Config-Ordner** _:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/f/f540048aa883f62f9726200916521c513f197834.png)

_ **Datei /server/api/index.js** _:  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/e/ec066365cc67a44e7e395441af564df0b44650d8.png)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/a/ad91ea5f52ea51187aaac7277ecec4674ad1f6e3.png)

_ **Dateien user.updatexx** _:

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/c/cde8c05f757153bb36766e0684efa17332f0aa87.png)

_ **Beispiel für die Verwendung** _:  
 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/9/98c4f449b6d44047aa214611b706f2da24fea011.png)

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/b/b5240f727abe6fee9ed91a340676ff51804f7f39.png)

_Dokumentation i18n_: [i18n - npm](https://www.npmjs.com/package/i18n)

---

<div class="post-metadata">

**Author:** ![Terdious](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/terdious/32/6316_2.png) [@Terdious](https://community.gladysassistant.com/u/Terdious)\
**Post date:** [26. April 2022 um 07:11 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/789 "2022-04-26T07:11:52Z")

</div>

@pierre-gilles, Ideen?

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [26. April 2022 um 16:46 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/790 "2022-04-26T16:46:01Z")

</div>

@Terdious meiner Meinung nach braucht man dafür keine Bibliothek, eine JSON-Datei mit Schlüssel/Wert-Paaren pro Sprache wie im Frontend wird völlig ausreichen!

Man sollte es nicht unnötig kompliziert machen, je einfacher, desto besser 😉

Übrigens, falls es um eine Integration geht, denke ich, dass man das direkt in der Integration machen sollte und nicht im Core-Code.

Wenn du Gerätenamen übersetzen musst, erstellst du einen Ordner mit einer `en.json` und `fr.json` Datei und das erledigt den Job 🙂

Du lädst deine Dateien, wo du sie brauchst, und fertig!

---

<div class="post-metadata">

**Author:** ![Terdious](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/terdious/32/6316_2.png) [@Terdious](https://community.gladysassistant.com/u/Terdious)\
**Post date:** [27. April 2022 um 04:32 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/791 "2022-04-27T04:32:01Z")

</div>

Danke für die Antwort @pierre-gilles,

> [@pierre-gilles](#):
>
> Übrigens, im Fall einer Integration denke ich, dass man das direkt in der Integration machen sollte, nicht im Core-Code.

> [@pierre-gilles](#):
>
> Wenn du Gerätenamen übersetzen musst, erstellst du einfach einen Ordner mit einer `en.json` und `fr.json` Datei und das erledigt den Job 🙂

Wir sind uns einig, dass es nicht der Gerätename als solcher ist, den wir übersetzen wollen, normalerweise sind diese bereits in der API benannt, aus der wir die Geräte beziehen. Für den ersten Anwendungsfall, den ich sah, geht es eher um die Funktionen, die nach ihrer Kategorie/Art benannt werden. Alle Integrationen benennen in der Datenbank die Funktionen als «&nbsp;[Name] - Ein/Aus&nbsp;», «&nbsp;[Name] - Luftfeuchtigkeit&nbsp;», «&nbsp;[Name] - Farbtemperatur&nbsp;», «&nbsp;[Name] - Leistung&nbsp;», usw. Daher sind viele dieser Übersetzungen identisch? Welchen Sinn hat es, die Dateien für jede Integration zu duplizieren?

 ![image](https://gladys-assistant-community.b-cdn.net/uploads/default/original/2X/a/ae85aadbf6c7a96f487d9cad1b8c342541b00edb.png)

> [@pierre-gilles](#):
>
> @Terdious ich glaube nicht, dass man dafür eine Bibliothek braucht, eine JSON-Datei mit Schlüssel/Wert-Paaren pro Sprache, wie wir es im Frontend machen, wird völlig ausreichen!
> 
> Man sollte es nicht unnötig kompliziert machen, je einfacher, desto besser 😉

Genau, ich habe die Funktionsweise und Logik des Frontends mit i18n übernommen… Es hat nur 10 Minuten gedauert, das einzurichten, das erschien mir überhaupt nicht kompliziert 🙂 und vor allem:

> [@pierre-gilles](#):
>
> Du lädst deine Dateien, wo du sie brauchst, und fertig!

Wenn wir eine Sprache hinzufügen, müssen wir dann alle Dateien durchgehen, die eine Übersetzung aufrufen? Das stört mich nicht, aber diesmal nehmen wir die Entwicklungsfreundlichkeit heraus.

---

<div class="post-metadata">

**Author:** ![VonOx](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/vonox/32/10128_2.png) [@VonOx](https://community.gladysassistant.com/u/VonOx)\
**Post date:** [27. April 2022 um 05:14 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/792 "2022-04-27T05:14:59Z")

</div>

Da bin ich mal mit @Terdious einer Meinung, wir sollten die Feature-Übersetzungen zentralisieren.

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [27. April 2022 um 16:37 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/793 "2022-04-27T16:37:11Z")

</div>

> [@Terdious](#):
>
> Also sind viele dieser Übersetzungen identisch? Warum werden die Dateien für jede Integration dupliziert?

Nein, wenn es sich um dieselben Übersetzungen handelt, kann man die Frontend-Dateien im Backend verwenden oder umgekehrt. Ich wusste nicht genau, wie dein Anwendungsfall aussieht!

> [@Terdious](#):
>
> Wenn man eine Sprache hinzufügt, muss man dann alle Dateien durchgehen, die eine Übersetzung aufrufen? Das stört mich nicht, aber diesmal wird die Entwicklungsfreundlichkeit reduziert.

Nein, nein, die Idee ist, einfach ein Übersetzungsobjekt zu haben, das du bei Bedarf einbindest, und wenn du eine Sprache hinzufügst, musst du nichts anpassen.

Ich sprach nur von der Hinzufügung von Bibliotheken, die im Backend nicht unbedingt nötig sind, ein einfaches JS-Objekt erledigt den Job, es ist eine Schlüssel-Wert-Struktur.

Allerdings habe ich deinen Pull Request nicht gelesen, also weiß ich nicht, wie weit deine Entwicklung geht 🙂

---

<div class="post-metadata">

**Author:** ![Terdious](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/terdious/32/6316_2.png) [@Terdious](https://community.gladysassistant.com/u/Terdious)\
**Post date:** [27. April 2022 um 20:09 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/794 "2022-04-27T20:09:11Z")

</div>

> [@pierre-gilles](#):
>
> Keine, tatsächlich, wenn es dieselben Übersetzungen sind, können wir die Dateien vom Frontend im Backend verwenden, oder umgekehrt. Ich wusste nicht genau deinen Anwendungsfall!

Oki super!! Noch besser, wenn wir die vom Frontend wiederverwenden können!! Du bestätigst das später über die PR, wenn du Zeit hast.

> [@pierre-gilles](#):
>
> Nein nein, die Idee ist einfach, ein Übersetzungsobjekt zu haben, das du bei Bedarf erfordert, und dann, wenn du eine Sprache hinzufügst, musst du nichts anpassen.
> 
> Ich sprach nur von der Hinzufügung von Bibliotheken, das ist nicht unbedingt nützlich im Fall des Backends, ein einfaches JS-Objekt erledigt den Job, es ist ein Schlüssel/Wert.
> 
> Danach habe ich deine PR nicht gelesen, also ich weiß nicht den Umfang deiner Entwicklung 🙂

Ok, aber um deine Idee zu testen, habe ich das Erfordernis durch die Sprachdatei getestet, aber dann muss es wohl nicht das Richtige sein, denn in meinem Test mit meinem Verständnis deiner Aussagen rufe ich die beiden Dateien auf, indem ich

```auto
const tradFr = require('../../../config/translate/fr.json')
const tradEn = require('../../../config/translate/en.json')

```

in jeder Datei, die benötigt wird. Daher müsste man im Falle einer Sprachergänzung jede Datei erneut bearbeiten!! Also, wo machst du dein Erfordernis in deiner Idee? (Antworte mir auf GitHub, wenn du Zeit hattest, es noch einmal zu lesen ^^ wir werden es dann besprechen ^^)

---

<div class="post-metadata">

**Author:** ![pierre-gilles](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/pierre-gilles/32/5886_2.png) [@pierre-gilles](https://community.gladysassistant.com/u/pierre-gilles)\
**Post date:** [29. April 2022 um 08:41 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/795 "2022-04-29T08:41:30Z")

</div>

> [@Terdious](#):
>
> In jeder Datei, die es benötigt. Wenn also eine Sprache hinzugefügt wird, müsste man jede Datei erneut bearbeiten! Wo machst du also deine require in deiner Idee?

Du erstellst eine Datei i18n.js (Beispielname, kann alles sein), die enthält:

```auto
const fr = require('./fr.json');
const en = require('./en.json');

module.exports = { 
  en,
  fr
};

```

In allen deinen Dateien machst du:

```auto
const i18n = require('../../config/i18n/i18n.js');

```

Und wenn du eine Übersetzung benötigst:

```auto
const myTitleExample = i18n[lang][key];

```

Das ist nur ein Beispiel aus einem Forenbeitrag, wenn man etwas Komplexeres will, kann man eine Funktion in `i18n` exportieren, um Fehler zu behandeln, usw.

---

<div class="post-metadata">

**Author:** ![Terdious](https://gladys-assistant-community.b-cdn.net/user_avatar/community.gladysassistant.com/terdious/32/6316_2.png) [@Terdious](https://community.gladysassistant.com/u/Terdious)\
**Post date:** [29. April 2022 um 09:30 UTC](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578/796 "2022-04-29T09:30:23Z")

</div>

Vielen Dank,

Ich arbeite daran!^^

[Vorherige Seite](https://community.gladysassistant.com/t/parlons-de-gladys-v4/3578.md?page=35)
