mirror of
https://github.com/wekan/wekan.git
synced 2025-12-17 07:50:12 +01:00
Add email notifications language localization feature
This commit is contained in:
parent
a0b5c2e88c
commit
2ab9bd3172
6 changed files with 142 additions and 118 deletions
58
server/lib/emailLocalization.js
Normal file
58
server/lib/emailLocalization.js
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
// emailLocalization.js
|
||||
// Utility functions to handle email localization in Wekan
|
||||
|
||||
import { TAPi18n } from '/imports/i18n';
|
||||
import { ReactiveCache } from '/imports/reactiveCache';
|
||||
|
||||
// Main object for email localization utilities
|
||||
EmailLocalization = {
|
||||
/**
|
||||
* Send an email using the recipient's preferred language
|
||||
* @param {Object} options - Standard email sending options plus language options
|
||||
* @param {String} options.to - Recipient email address
|
||||
* @param {String} options.from - Sender email address
|
||||
* @param {String} options.subject - Email subject i18n key
|
||||
* @param {String} options.text - Email text i18n key
|
||||
* @param {Object} options.params - Parameters for i18n translation
|
||||
* @param {String} options.language - Language code to use (if not provided, will try to detect)
|
||||
* @param {String} options.userId - User ID to determine language (if not provided with language)
|
||||
*/
|
||||
sendEmail(options) {
|
||||
// Determine the language to use
|
||||
let lang = options.language;
|
||||
|
||||
// If no language is specified but we have a userId, try to get the user's language
|
||||
if (!lang && options.userId) {
|
||||
const user = ReactiveCache.getUser(options.userId);
|
||||
if (user) {
|
||||
lang = user.getLanguage();
|
||||
}
|
||||
}
|
||||
|
||||
// If no language could be determined, use the site default
|
||||
if (!lang) {
|
||||
lang = TAPi18n.getLanguage() || 'en';
|
||||
}
|
||||
|
||||
// Translate subject and text using the determined language
|
||||
const subject = TAPi18n.__(options.subject, options.params || {}, lang);
|
||||
let text = options.text;
|
||||
|
||||
// If text is an i18n key, translate it
|
||||
if (typeof text === 'string' && text.startsWith('email-')) {
|
||||
text = TAPi18n.__(text, options.params || {}, lang);
|
||||
}
|
||||
|
||||
// Send the email with translated content
|
||||
return Email.send({
|
||||
to: options.to,
|
||||
from: options.from || Accounts.emailTemplates.from,
|
||||
subject: subject,
|
||||
text: text,
|
||||
html: options.html
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// Add module.exports to make it accessible from other files
|
||||
module.exports = EmailLocalization;
|
||||
Loading…
Add table
Add a link
Reference in a new issue