Following upstream
This port follows vue-i18n's releases. That is a commitment, and this page is how it is kept rather than merely stated.
Which vue-i18n does this match?
Answered by a checkout, not by a claim. Upstream is a git submodule in the repository, pinned to the exact commit of the released version being tracked:
| Tracked release | v11.4.8 |
| Commit | de2393bae16676a8a7c293bb493415e3085a521a |
Every conformance corpus is recorded by running that checkout, so "does it behave like vue-i18n" is a question the test suite answers on every run.
Released versions only
The pin never moves to an alpha, beta or release candidate. The question this project answers is "does it behave like the vue-i18n you can install today", and a pre-release is not that.
This matters more than it sounds. vue-i18n 12 changes plural selection — it resolves through Intl.PluralRules when no custom rule is given. Porting from the pre-release would have meant shipping behaviour that no released vue-i18n has.
Version numbers are not shared
This library has its own semantic version. A port needs releases for reasons of its own: a bug in the port, a new Python version, a documentation fix. Every release records the vue-i18n version it tracks, in UPSTREAM.md and in the changelog.
So vue-i18n-python 0.3.0 does not mean vue-i18n 0.3.0, and it never will.
Which is why the correspondence is written down instead: which version tracks which is the table, and vue_i18n.VUE_I18N_VERSION is the same answer from the installed package.
What happens when upstream releases
The new release is noticed — the repository asks for a check at least weekly, and
UPSTREAM.mdcarries the date of the last one.The diff is read, and only in the three source paths this project ports:
shgit -C vendor/vue-i18n diff HEAD..vNEW -- \ packages/message-compiler/src packages/core-base/src packages/shared/src/utils.tsChanges are applied through the file-by-file map in
UPSTREAM.md, which pairs every module here with the upstream file it came from.The corpora are re-recorded against the new pin. A corpus line that moves is upstream changing observable behaviour, which is exactly what wants a human's attention.
The pin moves,
VUE_I18N_VERSIONmoves with it, and a row is added to which version tracks which so the change is findable from the outside.
An empty diff means there is nothing to do but move the pin — which happens more often than not, because most upstream changes are in the Vue bindings this project does not port.
What is not tracked
vue-i18n-core, vue-i18n, petite-vue-i18n and the devtools packages. Components, directives, useI18n and the composition API are Vue bindings. A release that only touches them changes nothing here, and the diff command above will show that in one line.