intlify / vue-i18n

Vue I18n for Vue 3
https://vue-i18n.intlify.dev/
MIT License
2.21k stars 337 forks source link

Make availableLocales reactive #1893

Open markusand opened 4 months ago

markusand commented 4 months ago

Clear and concise description of the problem

Using availableLocales in a component is a list of strings that doesn't update reactively when adding new messages.

const { availableLocales } = useI18n();  // string[]

i18n.global.setLocaleMessage('ca', messages); // Does not trigger an update to availableLocales 

Suggested solution

Would be useful if availableLocales was a computed list so any list or selector or whatever that is using it can update automatically

const { availableLocales } = useI18n(); // ComputedRef<string[]>

Not sure if changing line https://github.com/intlify/vue-i18n/blob/e9ab3e0933b8ac9cb859578235b363876065fdf2/packages/vue-i18n-core/src/composer.ts#L2559 to something like the following would do the trick.

return computed(() => Object.keys(_messages.value).sort());

Alternative

No response

Additional context

No response

Validations

kazupon commented 4 months ago

Thank you for your feedback! You can contribute it! We are waiting for your PR :)

markusand commented 4 months ago

Thanks for your answer. I'd love to be a contributor, but I'm afraid I don't know the code so deep to be confident. Moreover, the proposed change would be a breaking change and I'm sure there are plenty of procedures for how you want to handle this.