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');
}
}