예제 #1
0
/**
 * Translate strings to the page language or a given language.
 *
 * Human-readable text that will be displayed somewhere within a page should
 * be run through the t() function.
 *
 * Examples:
 * @code
 * if (!$info || !$info['extension']) {
 * form_set_error('picture_upload', t('The uploaded file was not an image.'));
 * }
 *
 * $form['submit'] = array(
 * '#type' => 'submit',
 * '#value' => t('Log in'),
 * );
 * @endcode
 *
 * Any text within t() can be extracted by translators and changed into
 * the equivalent text in their native language.
 *
 * Special variables called "placeholders" are used to signal dynamic
 * information in a string which should not be translated. Placeholders
 * can also be used for text that may change from time to time (such as
 * link paths) to be changed without requiring updates to translations.
 *
 * For example:
 * @code
 * $output = t('There are currently %members and %visitors online.', array(
 * '%members' => format_plural($total_users, '1 user', '@count users'),
 * '%visitors' => format_plural($guests->count, '1 guest', '@count guests')));
 * @endcode
 *
 * There are three styles of placeholders:
 * - !variable, which indicates that the text should be inserted as-is. This is
 * useful for inserting variables into things like e-mail.
 * @code
 * $message[] = t("If you don't want to receive such e-mails, you can change your settings at !url.", array('!url' => url("user/$account->uid", array('absolute' => TRUE))));
 * @endcode
 *
 * - @variable, which indicates that the text should be run through
 * check_plain, to escape HTML characters. Use this for any output that's
 * displayed within a Drupal page.
 * @code
 * drupal_set_title($title = t("@name's blog", array('@name' => $account->name)));
 * @endcode
 *
 * - %variable, which indicates that the string should be HTML escaped and
 * highlighted with theme_placeholder() which shows up by default as
 * <em>emphasized</em>.
 * @code
 * $message = t('%name-from sent %name-to an e-mail.', array('%name-from' => $user->name, '%name-to' => $account->name));
 * @endcode
 *
 * When using t(), try to put entire sentences and strings in one t() call.
 * This makes it easier for translators, as it provides context as to what
 * each word refers to. HTML markup within translation strings is allowed, but
 * should be avoided if possible. The exception are embedded links; link
 * titles add a context for translators, so should be kept in the main string.
 *
 * Here is an example of incorrect usage of t():
 * @code
 * $output .= t('<p>Go to the @contact-page.</p>', array('@contact-page' => l(t('contact page'), 'contact')));
 * @endcode
 *
 * Here is an example of t() used correctly:
 * @code
 * $output .= '<p>'. t('Go to the <a href="@contact-page">contact page</a>.', array('@contact-page' => url('contact'))) .'</p>';
 * @endcode
 *
 * Avoid escaping quotation marks wherever possible.
 *
 * Incorrect:
 * @code
 * $output .= t('Don\'t click me.');
 * @endcode
 *
 * Correct:
 * @code
 * $output .= t("Don't click me.");
 * @endcode
 *
 * Because t() is designed for handling code-based strings, in almost all
 * cases, the actual string and not a variable must be passed through t().
 *
 * Extraction of translations is done based on the strings contained in t()
 * calls. If a variable is passed through t(), the content of the variable
 * cannot be extracted from the file for translation.
 *
 * Incorrect:
 * @code
 * $message = 'An error occurred.';
 * drupal_set_message(t($message), 'error');
 * $output .= t($message);
 * @endcode
 *
 * Correct:
 * @code
 * $message = t('An error occurred.');
 * drupal_set_message($message, 'error');
 * $output .= $message;
 * @endcode
 *
 * The only case in which variables can be passed safely through t() is when
 * code-based versions of the same strings will be passed through t() (or
 * otherwise extracted) elsewhere.
 *
 * In some cases, modules may include strings in code that can't use t()
 * calls. For example, a module may use an external PHP application that
 * produces strings that are loaded into variables in Drupal for output.
 * In these cases, module authors may include a dummy file that passes the
 * relevant strings through t(). This approach will allow the strings to be
 * extracted.
 *
 * Sample external (non-Drupal) code:
 * @code
 * class Time {
 * public $yesterday = 'Yesterday';
 * public $today = 'Today';
 * public $tomorrow = 'Tomorrow';
 * }
 * @endcode
 *
 * Sample dummy file.
 * @code
 * // Dummy function included in example.potx.inc.
 * function example_potx() {
 * $strings = array(
 * t('Yesterday'),
 * t('Today'),
 * t('Tomorrow'),
 * );
 * // No return value needed, since this is a dummy function.
 * }
 * @endcode
 *
 * Having passed strings through t() in a dummy function, it is then
 * okay to pass variables through t().
 *
 * Correct (if a dummy file was used):
 * @code
 * $time = new Time();
 * $output .= t($time->today);
 * @endcode
 *
 * However tempting it is, custom data from user input or other non-code
 * sources should not be passed through t(). Doing so leads to the following
 * problems and errors:
 * - The t() system doesn't support updates to existing strings. When user
 * data is updated, the next time it's passed through t() a new record is
 * created instead of an update. The database bloats over time and any
 * existing translations are orphaned with each update.
 * - The t() system assumes any data it receives is in English. User data may
 * be in another language, producing translation errors.
 * - The "Built-in interface" text group in the locale system is used to
 * produce translations for storage in .po files. When non-code strings are
 * passed through t(), they are added to this text group, which is rendered
 * inaccurate since it is a mix of actual interface strings and various user
 * input strings of uncertain origin.
 *
 * Incorrect:
 * @code
 * $item = item_load();
 * $output .= check_plain(t($item['title']));
 * @endcode
 *
 * Instead, translation of these data can be done through the locale system,
 * either directly or through helper functions provided by contributed
 * modules.
 * @see hook_locale()
 *
 * During installation, st() is used in place of t(). Code that may be called
 * during installation or during normal operation should use the get_t()
 * helper function.
 * @see st()
 * @see get_t()
 *
 * @param $string
 * A string containing the English string to translate.
 * @param $args
 * An associative array of replacements to make after translation. Incidences
 * of any key in this array are replaced with the corresponding value. Based
 * on the first character of the key, the value is escaped and/or themed:
 * - !variable: inserted as is
 * - @variable: escape plain text to HTML (check_plain)
 * - %variable: escape text and theme as a placeholder for user-submitted
 * content (check_plain + theme_placeholder)
 * @param $langcode
 * Optional language code to translate to a language other than what is used
 * to display the page.
 * @return
 * The translated string.
 */
function _t($string, $args = array(), $langcode = NULL, $reset = FALSE)
{
    global $language, $cfg;
    static $locale_t = NULL;
    //@TODO se quiser fazer texto custom
    if ($reset) {
        // Reset in-memory cache.
        $locale_t = NULL;
    }
    if (!isset($string)) {
        // Return all cached strings if no string was specified
        return $locale_t;
    }
    $langcode = isset($langcode) ? $langcode : $language['language']->language;
    //@TODO verificr se esta consumindo muita memoria qualquer coisa cachear
    if (isset($language['translate'])) {
        $po = new PO();
        $po->merge_with($language['translate']);
        $string = $po->translate($string);
    }
    if (empty($args)) {
        return $string;
    } else {
        // Transform arguments before inserting them.
        foreach ($args as $key => $value) {
            switch ($key[0]) {
                case '@':
                    // Escaped only.
                    $args[$key] = check_plain($value);
                    break;
                case '%':
                default:
                    //@todo Escaped and placeholder.
                    //$args[$key] = theme('placeholder', $value);
                    break;
                case '!':
                    // Pass-through.
            }
        }
        return strtr($string, $args);
    }
}
예제 #2
0
 /**
  * Configura a linguagem padr�o
  */
 private function GetLanguage()
 {
     $mysql = new MysqlConsulta($this->cfg);
     $this->language['language_default'] = $mysql->getLanguagefromCOUNTRY($this->cfg['ID_COUNTRY']);
     //--> en,pt-br,ja,it
     $this->language['language'] = $mysql->ListLanguages($this->language['language_default']);
     if (isset($this->perfil->user_language)) {
         $this->language['language_default'] = $this->perfil->user_language;
         $this->language['language'] = $mysql->ListLanguages($this->perfil->user_language);
     }
     if (isset($_GET['q'])) {
         $query = getLanguageURL($_GET['q']);
         if ($query[1]) {
             $this->language['language_default'] = $query[1];
             $this->language['language'] = $mysql->ListLanguages($query[1]);
         }
         $_GET['q'] = $query[0];
     }
     if ($this->language['language']->language != language_default()->language) {
         $this->language['translate'] = $mysql->getTranslate($this->language['language']->language);
         if (!$this->language['translate']) {
             $po = loadPO($this->language['language']->language);
             if ($po == false) {
                 //@todo mensagem de errooooo
                 $message = _t("File not found a standard language for this request.");
                 setMessage($message, 'error');
             }
             insertTranslation($po);
         } else {
             $po = new PO();
             $po->set_headers($this->language['translate']->headers);
             $po->merge_with($this->language['translate']);
             //@todo = verificar esta requisições de texto, se a função de tradução não irá cumprir o mesmo papel
         }
         $this->language['translate'] = $po;
     }
 }