-
Notifications
You must be signed in to change notification settings - Fork 188
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
[Feature] Provide mechanism for remembering selected language #12
Comments
@DmitryEfimenko It's on its way 🙂 |
@shaharkazaz Our enterprise applications have multiple sub-projects to switch between. Sometimes we have language selection coming in from different source than the rest of project. Currently we have to store the selected language in cookie/LS and retrieve it the respective translation module initialization. Future: I would like to see it integrated to translation store itself. {
provide: TRANSLOCO_CONFIG,
useValue: {
prodMode: environment.production,
listenToLangChange: true,
defaultLang: 'en',
persistLanguage: {
persistLanguageAcross: true,
name: 'selected_lanaguage_transloco'
}
}
} So when these options enabled, we will store the selected language also in cookie/Local/Session storage under the given name, and then we can first check for the persisted language in sub-projects else fallback to defaultLanguage. Though this look like a specific usecase, but its also one of the bigger pain points in translations. |
@agugan Hey, we are working on something and a PR should be ready soon, you are welcome to track this 🙂 |
Hey @DmitryEfimenko, Also implementing this feature is pretty easy and doesn't require a lot of code: constructor(private transloco: TranslocoService) {}
ngOnInit() {
// set the saved language from local storage.
this.transloco.setActiveLang(localStorage.getItem('lang'));
// persist the current language in local storage.
this.transloco.langChanges$.pipe(distinctUntilChanged())
.subscribe(lang => localStorage.setItem('lang', lang));
} Does it satisfy your issue? |
it's trivial to save it to the If worrying about the library size, make it a separate addon library just like in the case of ngx-translate-cache, which is separate from ngx-translate. It does not need to be a part of the transloco library itself. As a matter of fact, a lot of the implementation could be straight copy-pasted from ngx-translate-cache. |
@DmitryEfimenko could you check if the following PR resolved this issue, please? https://github.com/ngneat/transloco/pull/34/files Feel free to suggest changes based on your experience and needs. |
@DmitryEfimenko I rewrote it from scratch, the new implementation will be: export function getLangFn({ cachedLang, browserLang, cultureLang, defaultLang }) {
return whatYouWant;
}
@NgModule({
imports: [
TranslocoPersistLangModule.init({
getLangFn,
storage: {
provide: TRANSLOCO_PERSIST_LANG_STROAGE,
useValue: localStorage
},
})
],
})
class AppModule {} We'll also expose the |
That looks clean! |
I'm submitting a...
Proposal
Based on the documentation I didn't see a way to specify a mechanism for remembering the language that user selects. I'd expect something similar to what ngx-translate-cache provides.
Current behavior
Proposed behavior does not exist
Expected behavior
Pending design
What is the motivation / use case for changing the behavior?
There is no need to ask the consumer of this library to write all the boilerplate needed to store the selected language in LocalStorage or Cookies
The text was updated successfully, but these errors were encountered: