Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

i18n: Namespacing prüfen und implementieren #5572

Closed
deleonio opened this issue Nov 10, 2023 · 13 comments · Fixed by #5610
Closed

i18n: Namespacing prüfen und implementieren #5572

deleonio opened this issue Nov 10, 2023 · 13 comments · Fixed by #5610
Assignees
Labels
bfit The task is assigned to the BFIT. feature New feature or request

Comments

@deleonio
Copy link
Contributor

Zur Zeit wird kein Namespacing verwendet, was zu Problemen führen könnte, wenn es mehrere aktive Anwendungen auf einer Seite gibt, die i18next verwenden.

Prüfen, ob es hier Sinn Ergeben würde, das i18next Namspacing-Feature zu verwenden, und ggf. implementieren.

@deleonio deleonio converted this from a draft issue Nov 10, 2023
@deleonio deleonio added the feature New feature or request label Nov 10, 2023
@deleonio
Copy link
Contributor Author

@laske185 das Ticket ist für die BFIT sehr interessant!

@deleonio deleonio added the bfit The task is assigned to the BFIT. label Nov 14, 2023
@Chrisdo82
Copy link
Contributor

@deleonio wir verwenden auch i18next und bekommen seit dem Update auf 1.7.4 den Fehler: 'TypeError: Cannot redefine property: I18n'.

Hast du einen schnellen Workaround für uns, womit wir diesen Fehler umgehen können, damit wir nicht auf eine alte Version zurückrollen oder auf den Fix warten müssen?

@deleonio
Copy link
Contributor Author

Hallo @Chrisdo82,

Ich habe das Ticket hochpriorisiert. @laske185 kannst du bitte zeitnah danach schauen?

Danke

@laske185 laske185 self-assigned this Nov 16, 2023
@laske185 laske185 moved this from 📄 Ready to 🏗 In progress in KoliBri Board Nov 20, 2023
laske185 added a commit that referenced this issue Nov 20, 2023
@laske185 laske185 moved this from 🏗 In progress to 🔍Review in KoliBri Board Nov 20, 2023
@laske185
Copy link
Contributor

Hallo @Chrisdo82,

da KoliBri auch i18next nutzt, kann es nun vorkommen, dass i18next bereits durch uns initialisiert ist.

In dem Fall dürft ihr nicht auch das init() aufrufen.

Vermutlich müsstet ihr es analog machen, wie wir es in KoliBri umgesetzt haben:

import i18next from 'i18next';

const init = () => {
  if (!i18next.isInitialized) {
    await i18next.init({
      ns: [I18nextService.namespace],
      lng: "de",
    });
  } else {
    await i18next.loadNamespaces(I18nextService.namespace);
  }
  i18next.addResourceBundle(lng, I18nextService.namespace, translationMap, true);
}

Mit dem PullRequests nutzt KoliBri dann nicht mehr den Standard-namespace „translations“, sondern seinen eigenen mit dem Namen „KoliBri“. Die Änderung wird in Version 1.7.x und 2.0 sein.

@Chrisdo82
Copy link
Contributor

Danke, wann kann ich denn mit dem nächsten Release in dem das drin sein wird rechnen?

@github-project-automation github-project-automation bot moved this from 🔍Review to ✅ Done in KoliBri Board Nov 27, 2023
@nefarius4schmu
Copy link

Hallo @laske185 ,
der Fix scheint die Ursache des Fehlers, welchen schon @Chrisdo82 beschrieben hat, nicht zu lösen.
im BFIT Projekt haben wir mit der letzten Version (1.7.6-RC2) das Problem unverändert reproduzieren können. Der o.g. Fix wurde für den Test auch im Projekt implementiert.

Ein Debugging hat gezeigt, dass der Konflikt an folgender Stelle in der core/index.ts entsteht:

if (STORE.I18n === undefined) {
  const i18n = await I18nextService.createInstance(options?.translation?.name ?? 'de', options?.translations);
  
  // Throws "TypeError: Cannot redefine property: I18n"
  Object.defineProperty(STORE, 'I18n', {
    value: i18n,
    writable: false,
  });
}

Nach der Ausführung der Methode I18nextService.createInstance ist die Property STORE.I18n bereits gesetzt ist. Folglich tritt der Fehler dann immer auf, "wenn" dieser Loop ausgeführt wird.

Wir führen intern weitere Untersuchungen durch, ob das Problem vielleicht auch anderweitig umgangen werden kann.

@Chrisdo82
Copy link
Contributor

Noch als kleine Randnotiz: bei uns tritt der Fehler den ich oben beschrieben habe nur auf, wenn ich den Cache nicht deaktiviere. Sobald der Cache aber deaktiviert wurde, kann man den Fehler nicht mehr nachstellen.

@Chrisdo82
Copy link
Contributor

@nefarius4schmu habt ihr denn rausgefunden ob das Problem umgangen werden kann?

@deleonio
Copy link
Contributor Author

Release 1.7.6 ist draußen.

@nefarius4schmu
Copy link

Hallo zusammen ,
zumindest durch Anpassungen in unserer App lässt sich das Problem scheinbar nicht umgehen.
1.7.6 bringt da auch keine Verbesserung.

Ich konnte das Problem testweise umgehen, indem ich lokal die Sourcen der KoliBri-Library angepasst und die globale Variable "I18n" in "I18nextService" umbenannt habe, sodass sie folglich unter STORE.I18nextService erreichbar ist.
Also:

Object.defineProperty(STORE, 'I18nextService', {
    value: i18n,
    writable: false,
});

(und entsprechend dazugehörige Änderungen im Code)

Danach trat der Fehler nicht mehr auf. Weder im Build oder mit Cache enabled/disabled.
Natürlich konnte ich jetzt eventuelle Nebeneffekte nicht testen, aber es sieht jetzt erstmal vielversprechend aus.

@deleonio
Gibt es Gründe warum die Variable "I18n" heißen muss bzw. könnt ihr den Vorschlag bitte mal evaluieren?

@deleonio
Copy link
Contributor Author

deleonio commented Dec 1, 2023

Vielen Dank für den Input @nefarius4schmu, wir nehmen das mit. Zudem überlegen wir i18next zu einer peerDep zu machen.

@deleonio
Copy link
Contributor Author

deleonio commented Dec 4, 2023

Weiterführende Aktivitäten besprechen.

@deleonio deleonio reopened this Dec 4, 2023
@github-project-automation github-project-automation bot moved this from ✅ Done to 🏗 In progress in KoliBri Board Dec 4, 2023
@laske185
Copy link
Contributor

laske185 commented Dec 7, 2023

In neuem Ticket weiterführen. Namespaces sind nicht das Problem.

@github-project-automation github-project-automation bot moved this from 🏗 In progress to ✅ Done in KoliBri Board Dec 7, 2023
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
bfit The task is assigned to the BFIT. feature New feature or request
Projects
Archived in project
Development

Successfully merging a pull request may close this issue.

4 participants