Translation Function
Overview
The translation function t is provided by default for translation.
export type VoerkaI18nTranslate =(
message:string,
vars?:VoerkaI18nTranslateVars,
options?:VoerkaI18nTranslateOptions
)=>stringThe t function can be imported from the languages/index.(js|ts) file.
// Import translation function from current language pack folder's index.js
import { t } from "<myapp>/languages"
// Without interpolation variables
t("中华人民共和国")
// Position interpolation variables
t("中华人民共和国{}","万岁")
t("中华人民共和国成立于{}年,首都{}",1949,"北京")
// When there are only two parameters and the second parameter is of type [], automatically expand the first parameter for position interpolation
t("中华人民共和国成立于{year}年,首都{capital}",[1949,"北京"])
// When there are only two parameters and the second parameter is of type {}, enable dictionary interpolation variables
t("中华人民共和国成立于{year}年,首都{capital}",{year:1949,capital:"北京"})
// Interpolation variables can be synchronous functions, automatically called during interpolation
t("中华人民共和国成立于{year}年,首都{capital}",()=>1949,"北京")
// Enable formatters for interpolation variables
t("中华人民共和国成立于{birthday | year}年",{birthday:new Date()})Special Notes
- Don't use JavaScript template strings to generate translation content, like t(
我是中国人,我喜欢%{car}) is invalid. - The
tfunction is a regular function that only needs an execution environment to perform translation, so it can be used in any framework likeReact/Vue/Solid/Sveltefor translation. - The
tfunction supports an interpolation variable mechanism for content that needs translation, which can be used to implement plural and other mechanisms, see Interpolation Variables.
Common Misconceptions for Beginners
WARNING
The t function is just a regular JS function and won't automatically execute when switching languages.
<template>
<div>
<p>{{ t("你好") }}</p>
<button @click="i18nScope.change('en-US')">Switch Language</button>
</div>
</template>
<script setup>
import { t,i18nScope } from "<myapp>/languages"
</script>Taking the above Vue component as an example, when clicking the Switch Language button, the t function won't automatically execute because it's just a regular function, nothing magical.
So how do we make the t function re-execute?
Essentially, when switching languages, we need to re-render the component so that the t function will be re-executed.
Therefore, the solution is simple - just re-render the component after switching languages.
<template>
<div>
<p>{{ t("你好") }}</p>
<button
@click="i18nScope.change('en-US')">
Switch Language
</button>
</div>
</template>
<script setup>
import { t:tt,i18nScope } from "<myapp>/languages"
import { ref } from "vue"
const render = ref(0)
const t = (message:string,vars?:VoerkaI18nTranslateVars,options?:VoerkaI18nTranslateOptions)=>{
render.value // Depends on render's value, component will re-render when render's value changes
return tt(message,vars,options)
}
i18nScope.on("change",()=>{
render.value++
})
</script>This way, when switching languages, the value of render will change, triggering the component to re-render, and the t function will be re-executed, achieving language switching.
The t function is the basic translation function, and different frontend frameworks provide corresponding libraries to simplify this process, including vue/vue2/svelte/nextjs/... etc.
Note
In actual applications, VoerkaI18n provides integration libraries for frameworks like React/Vue/Svelte, which can be used directly to simplify automatic updates during language switching.