From 7699efd5938338b9f44a770422f34abe2011c79f Mon Sep 17 00:00:00 2001 From: "Edward Z. Yang" Date: Mon, 18 Jun 2007 02:25:27 +0000 Subject: [PATCH] Implement bare minimum extra functions for language implementation. git-svn-id: http://htmlpurifier.org/svnroot/htmlpurifier/trunk@1156 48356398-32a2-884e-a903-53898d9a118a --- library/HTMLPurifier/Language.php | 22 ++++++++++++++++++++-- library/HTMLPurifier/LanguageFactory.php | 16 ++++++++-------- tests/HTMLPurifier/LanguageTest.php | 17 +++++++++++------ 3 files changed, 39 insertions(+), 16 deletions(-) diff --git a/library/HTMLPurifier/Language.php b/library/HTMLPurifier/Language.php index f4f638f5..722a9264 100644 --- a/library/HTMLPurifier/Language.php +++ b/library/HTMLPurifier/Language.php @@ -43,16 +43,34 @@ class HTMLPurifier_Language } /** - * Retrieves a localised message. Does not perform any operations. + * Retrieves a localised message. * @param $key string identifier of message * @return string localised message */ function getMessage($key) { if (!$this->_loaded) $this->load(); - if (!isset($this->messages[$key])) return ''; + if (!isset($this->messages[$key])) return "[$key]"; return $this->messages[$key]; } + /** + * Formats a localised message with passed parameters + * @param $key string identifier of message + * @param $param Parameter to substitute in (arbitrary number) + * @return string localised message + */ + function formatMessage($key) { + if (!$this->_loaded) $this->load(); + if (!isset($this->messages[$key])) return "[$key]"; + $raw = $this->messages[$key]; + $args = func_get_args(); + $substitutions = array(); + for ($i = 1; $i < count($args); $i++) { + $substitutions['$' . $i] = $args[$i]; + } + return strtr($raw, $substitutions); + } + } ?> \ No newline at end of file diff --git a/library/HTMLPurifier/LanguageFactory.php b/library/HTMLPurifier/LanguageFactory.php index 57f97180..3a3bf08b 100644 --- a/library/HTMLPurifier/LanguageFactory.php +++ b/library/HTMLPurifier/LanguageFactory.php @@ -102,15 +102,15 @@ class HTMLPurifier_LanguageFactory // you can bypass the conditional include by loading the // file yourself if (file_exists($file) && !class_exists($class)) { - include_once $file; - } + include_once $file; + } } if (!class_exists($class)) { // go fallback - $fallback = HTMLPurifier_Language::getFallbackFor($code); + $fallback = HTMLPurifier_LanguageFactory::getFallbackFor($code); $depth++; - $lang = Language::factory( $fallback ); + $lang = HTMLPurifier_LanguageFactory::factory( $fallback ); $depth--; } else { $lang = new $class; @@ -174,15 +174,15 @@ class HTMLPurifier_LanguageFactory // merge fallback with current language foreach ( $this->keys as $key ) { - if (isset($cache[$key]) && isset($fallback_cache[$key])) { + if (isset($cache[$key]) && isset($fallback_cache[$key])) { if (isset($this->mergeable_keys_map[$key])) { $cache[$key] = $cache[$key] + $fallback_cache[$key]; } elseif (isset($this->mergeable_keys_list[$key])) { $cache[$key] = array_merge( $fallback_cache[$key], $cache[$key] ); } - } else { - $cache[$key] = $fallback_cache[$key]; - } + } else { + $cache[$key] = $fallback_cache[$key]; + } } } diff --git a/tests/HTMLPurifier/LanguageTest.php b/tests/HTMLPurifier/LanguageTest.php index dd88c90f..21e55206 100644 --- a/tests/HTMLPurifier/LanguageTest.php +++ b/tests/HTMLPurifier/LanguageTest.php @@ -7,14 +7,19 @@ class HTMLPurifier_LanguageTest extends UnitTestCase var $lang; - function setup() { - $factory = HTMLPurifier_LanguageFactory::instance(); - $this->lang = $factory->create('en'); + function test_getMessage() { + $lang = new HTMLPurifier_Language(); + $lang->_loaded = true; + $lang->messages['htmlpurifier'] = 'HTML Purifier'; + $this->assertIdentical($lang->getMessage('htmlpurifier'), 'HTML Purifier'); + $this->assertIdentical($lang->getMessage('totally-non-existent-key'), '[totally-non-existent-key]'); } - function test_getMessage() { - $this->assertIdentical($this->lang->getMessage('htmlpurifier'), 'HTML Purifier'); - $this->assertIdentical($this->lang->getMessage('totally-non-existent-key'), ''); + function test_formatMessage() { + $lang = new HTMLPurifier_Language(); + $lang->_loaded = true; + $lang->messages['error'] = 'Error is $1 on line $2'; + $this->assertIdentical($lang->formatMessage('error', 'fatal', 32), 'Error is fatal on line 32'); } }