41 lines
903 B
JavaScript
41 lines
903 B
JavaScript
import { createResource } from 'frappe-ui'
|
|
|
|
export default function translationPlugin(app) {
|
|
app.config.globalProperties.__ = translate
|
|
window.__ = translate
|
|
if (!window.translatedMessages) fetchTranslations()
|
|
}
|
|
|
|
function translate(message) {
|
|
let translatedMessages = window.translatedMessages || {}
|
|
let translatedMessage = translatedMessages[message] || message
|
|
|
|
const hasPlaceholders = /{\d+}/.test(message)
|
|
if (!hasPlaceholders) {
|
|
return translatedMessage
|
|
}
|
|
return {
|
|
format: function (...args) {
|
|
return translatedMessage.replace(
|
|
/{(\d+)}/g,
|
|
function (match, number) {
|
|
return typeof args[number] != 'undefined'
|
|
? args[number]
|
|
: match
|
|
}
|
|
)
|
|
},
|
|
}
|
|
}
|
|
|
|
function fetchTranslations(lang) {
|
|
createResource({
|
|
url: 'lms.lms.api.get_translations',
|
|
cache: 'translations',
|
|
auto: true,
|
|
transform: (data) => {
|
|
window.translatedMessages = data
|
|
},
|
|
})
|
|
}
|