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,
|
||||
FeatherIcon,
|
||||
} from 'frappe-ui'
|
||||
import translationPlugin from './translation'
|
||||
import { createDialog } from './utils/dialogs'
|
||||
import socket from './socket'
|
||||
import { getCachedListResource } from 'frappe-ui/src/resources/listResource'
|
||||
@ -45,6 +46,7 @@ setConfig('resourceFetcher', frappeRequest)
|
||||
app.use(FrappeUI)
|
||||
app.use(pinia)
|
||||
app.use(router)
|
||||
app.use(translationPlugin)
|
||||
for (let key in globalComponents) {
|
||||
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