Download & Extend

Multi-language support for email templates in OG Settings / Messaging & Notifications

Project:Organic groups
Version:6.x-2.x-dev
Component:og.module
Category:task
Priority:normal
Assigned:Unassigned
Status:active

Issue Summary

I wanted to share something that took me a while. I have discovered today Multilingual Variables. Hurray!

Actually, if you have i18n module installed, there's an easy way to translate OG mail templates. Here's how to for OG 2.0:

1) Edit your settings.php and add the $conf['i18n_variables'] array as described here: Multilingual Variables.

2) Append to the list of variables the following list:

  // Organic Groups.
  'og_new_node_subject',
  'og_new_node_body',
  'og_admin_email_subject',
  'og_admin_email_body',
  'og_approve_user_subject',
  'og_approve_user_body',
  'og_deny_user_subject',
  'og_deny_user_body',
  'og_invite_user_subject',
  'og_invite_user_body',
  'og_request_user_subject',
  'og_request_user_body',
  'og_new_admin_subject',
  'og_new_admin_body',

3) Now, visit admin/og/og in any language to configure OG email templates for that language. ie. saving this page from es/admin/og/og will save your email templates in spanish version of OG variables. save from fr/admin/og/og to save them in french, and so on.

This could be obvious for some, but it took me a while. Maybe this could be documented in the OG readme? <--- feature request or task?

BTW, if you're looking for a way to translate mail templates in Notifications/Messaging, then take a look at #265680: Translation of email templates . Needs testing and feedback! :)

Comments

#1

Subscribing

#2

Please remove.

#3

Hi,

I've used this technique and I can translate the email messages, but the translations aren't actually used when sending emails to -say- a french user.

For invitation emails I managed to use the translated variable in the email using hook_mail_alter() , but for the other messages it didn't work. The other messages seem to be pre-generated by messages/notifications module, which add a header and footer to them.

Normally $message would contain the strings/values which I can use to replace @body and @description tokens with, but the $message variable of the emails that are modified by messages/notifications don't contain these strings/values...

How did this work for you, Markus? Did you use the messages & notifications modules?

<?php
function caubo_bilingual_mail_alter(&$message) {

  switch(
$message['id']) {
 
  case
"og_invite_link_invite_to_group":
     
$user_language = _caubo_get_language_from_mail($message['to']);
      if(
$user_language == 'fr') {

             
// set variables to create the full link with token. ($group_url)
       
$group_id = $message['params']['invitation']->group_nid;
       
$user_id = $message['params']['invitation']->uid;
       
$key = $message['params']['invitation']->token;
       
       
$group_url = 'http://caubo.ca/fr/group/'.$group_id.'/join/'.$user_id.'/'.$key;
       
$group_title = $message['params']['group']->title;
       
$group_description = $message['params']['group']->body;
       
$group_message = $message['params']['additional_message'];
       
       
$myBody = i18n_variable_get('og_invite_user_body', 'fr');
       
       
$myBody = str_replace('@group', $group_title, $myBody);
       
$myBody = str_replace('@description', $group_description, $myBody);
       
$myBody = str_replace('!group_url', $group_url, $myBody);
       
$myBody = str_replace('@body', $group_message, $myBody);

       
$myBody = check_markup($myBody);
       
        if (
is_array($message['body'])) {
         
$message['body'][0] = $myBody;
        }else{
         
$message['body'] = $myBody;
        }
       
   
$message['subject'] = i18n_variable_get('og_invite_user_subject', 'fr');
       
      }

      break;
  }
 
dsm($message);
 
//dsm($message['id']);
}
?>
nobody click here