feat: setup translation

This commit is contained in:
Shariq Ansari 2024-04-10 14:36:45 +05:30
parent fe8bcd7911
commit 65e511861a
3 changed files with 49 additions and 0 deletions

12
crm/api/__init__.py Normal file
View 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)

View File

@ -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])
}

View 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
},
})
}