2009-11-11 6 views
2

J'ai un fichier de langue avec une longue liste de chaînes pour mes fichiers de vue. Ma question est comment passer une variable ou un élément de configuration à un fichier de langue?Codeigniter: Variables/éléments de configuration dans les fichiers de langue

<?php $lang['error_activation_key_expired'] = 'The activation key you have attempted using has expired. Please request a new Activation Key <a href="'.$this->config->item('base_url').'member/request_activation" title="Request a New Activation Key">here</a>.'; 

Je pouvais se contenter de

<?php $lang['error_activation_key_expired'] = 'The activation key you have attempted using has expired. Please request a new Activation Key <a href="'.$base_url.'member/request_activation" title="Request a New Activation Key">here</a>.'; 

et passer le base_url à lui en quelque sorte. Je ne sais pas comment.

Merci!

Répondre

4

Votre meilleur pari est probablement de mettre un espace réservé là-dedans, puis l'échanger dans votre contrôleur.

fichier Lang:

<?php $lang['error_activation_key_expired'] = 'The activation key you have attempted using has expired. Please request a new Activation Key <a href="%s/member/request_activation" title="Request a New Activation Key">here</a>.'; 

Contrôleur:

$activation_message = sprintf($this->lang->line('error_activation_key_expired'), $base_url); 
+0

Je référence les base_url à plusieurs reprises tout au long de ce fichier de langue. Y aura-t-il un problème avec la répétition? –

+0

Vous ne savez pas exactement ce que vous voulez dire. Répétition où? – Thody

+0

Désolé, nm. Votre solution a parfaitement fonctionné. Merci! –

4

Forum CI, nlogachev suggère une meilleure solution.
Il peut changer l'ordre des variables.

<?php if (! defined('BASEPATH')) exit('No direct script access allowed'); 

class MY_Language extends CI_Language 
{ 

    function MY_Language() 
    { 
     parent::CI_Language(); 
    } 

    /** 
    * Fetch a single line of text from the language array. Takes variable number 
    * of arguments and supports wildcards in the form of '%1', '%2', etc. 
    * Overloaded function. 
    * 
    * @access public 
    * @return mixed false if not found or the language string 
    */ 
    public function line() 
    { 
     //get the arguments passed to the function 
     $args = func_get_args(); 

     //count the number of arguments 
     $c = count($args); 

     //if one or more arguments, perform the necessary processing 
     if ($c) 
     { 
      //first argument should be the actual language line key 
      //so remove it from the array (pop from front) 
      $line = array_shift($args); 

      //check to make sure the key is valid and load the line 
      $line = ($line == '' OR ! isset($this->language[$line])) ? FALSE : $this->language[$line]; 

      //if the line exists and more function arguments remain 
      //perform wildcard replacements 
      if ($line && $args) 
      { 
       $i = 1; 
       foreach ($args as $arg) 
       { 
        $line = preg_replace('/\%'.$i.'/', $arg, $line); 
        $i++; 
       } 
      } 
     } 
     else 
     { 
      //if no arguments given, no language line available 
      $line = false; 
     } 

     return $line; 
    } 


} 

?> 

cas d'utilisation ~

//in english 
$lang['some_key'] = 'Some string with %1 %2.'; 

//in another language 
$lang['some_key'] = 'Some string %2 with %1.'; 

//the actual usage 
echo $this->lang->line('some_key','first','second'); 
+2

Réponse parfaite. À mon avis, votre réponse devait être acceptée. –

Questions connexes