48 lines
1.1 KiB
JavaScript
48 lines
1.1 KiB
JavaScript
import { createResource } from 'jingrow-ui'
|
|
|
|
export default function translationPlugin(app) {
|
|
app.config.globalProperties.__ = translate
|
|
window.__ = translate
|
|
if (!window.translatedMessages) fetchTranslations()
|
|
}
|
|
|
|
function format(message, replace) {
|
|
return message.replace(/{(\d+)}/g, function (match, number) {
|
|
return typeof replace[number] != 'undefined' ? replace[number] : match
|
|
})
|
|
}
|
|
|
|
function translate(message, replace, context = null) {
|
|
let translatedMessages = window.translatedMessages || {}
|
|
let translatedMessage = ''
|
|
|
|
if (context) {
|
|
let key = `${message}:${context}`
|
|
if (translatedMessages[key]) {
|
|
translatedMessage = translatedMessages[key]
|
|
}
|
|
}
|
|
|
|
if (!translatedMessage) {
|
|
translatedMessage = translatedMessages[message] || message
|
|
}
|
|
|
|
const hasPlaceholders = /{\d+}/.test(message)
|
|
if (!hasPlaceholders) {
|
|
return translatedMessage
|
|
}
|
|
|
|
return format(translatedMessage, replace)
|
|
}
|
|
|
|
function fetchTranslations(lang) {
|
|
createResource({
|
|
url: 'crm.api.get_translations',
|
|
cache: 'translations',
|
|
auto: true,
|
|
transform: (data) => {
|
|
window.translatedMessages = data
|
|
},
|
|
})
|
|
}
|