feat: setup translation
This commit is contained in:
parent
fe8bcd7911
commit
65e511861a
12
crm/api/__init__.py
Normal file
12
crm/api/__init__.py
Normal file
@ -0,0 +1,12 @@
|
|||||||
|
import frappe
|
||||||
|
from frappe.translate import get_all_translations
|
||||||
|
|
||||||
|
|
||||||
|
@frappe.whitelist(allow_guest=True)
|
||||||
|
def get_translations():
|
||||||
|
if frappe.session.user != "Guest":
|
||||||
|
language = frappe.db.get_value("User", frappe.session.user, "language")
|
||||||
|
else:
|
||||||
|
language = frappe.db.get_single_value("System Settings", "language")
|
||||||
|
|
||||||
|
return get_all_translations(language)
|
||||||
@ -19,6 +19,7 @@ import {
|
|||||||
frappeRequest,
|
frappeRequest,
|
||||||
FeatherIcon,
|
FeatherIcon,
|
||||||
} from 'frappe-ui'
|
} from 'frappe-ui'
|
||||||
|
import translationPlugin from './translation'
|
||||||
import { createDialog } from './utils/dialogs'
|
import { createDialog } from './utils/dialogs'
|
||||||
import socket from './socket'
|
import socket from './socket'
|
||||||
import { getCachedListResource } from 'frappe-ui/src/resources/listResource'
|
import { getCachedListResource } from 'frappe-ui/src/resources/listResource'
|
||||||
@ -45,6 +46,7 @@ setConfig('resourceFetcher', frappeRequest)
|
|||||||
app.use(FrappeUI)
|
app.use(FrappeUI)
|
||||||
app.use(pinia)
|
app.use(pinia)
|
||||||
app.use(router)
|
app.use(router)
|
||||||
|
app.use(translationPlugin)
|
||||||
for (let key in globalComponents) {
|
for (let key in globalComponents) {
|
||||||
app.component(key, globalComponents[key])
|
app.component(key, globalComponents[key])
|
||||||
}
|
}
|
||||||
|
|||||||
35
frontend/src/translation.js
Normal file
35
frontend/src/translation.js
Normal file
@ -0,0 +1,35 @@
|
|||||||
|
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: 'crm.api.get_translations',
|
||||||
|
cache: 'translations',
|
||||||
|
auto: true,
|
||||||
|
transform: (data) => {
|
||||||
|
window.translatedMessages = data
|
||||||
|
},
|
||||||
|
})
|
||||||
|
}
|
||||||
Loading…
x
Reference in New Issue
Block a user