aboutsummaryrefslogtreecommitdiff
path: root/plugin.php
diff options
context:
space:
mode:
authorKevin Chabowski <kevin@kch42.de>2012-03-03 20:19:53 +0100
committerKevin Chabowski <kevin@kch42.de>2012-03-03 20:19:53 +0100
commitc101c845587a02afeb591620c95d10fb7a428796 (patch)
tree70d4d1cd9b455cab676eeec8aac3dcc874a0231c /plugin.php
downloadcustom_translation-c101c845587a02afeb591620c95d10fb7a428796.tar.gz
custom_translation-c101c845587a02afeb591620c95d10fb7a428796.tar.bz2
custom_translation-c101c845587a02afeb591620c95d10fb7a428796.zip
Initial commit.
Diffstat (limited to 'plugin.php')
-rw-r--r--plugin.php113
1 files changed, 113 insertions, 0 deletions
diff --git a/plugin.php b/plugin.php
new file mode 100644
index 0000000..81c8b10
--- /dev/null
+++ b/plugin.php
@@ -0,0 +1,113 @@
+<?php
+
+class custom_translation extends RatatoeskrPlugin
+{
+ public $current_language;
+ public $current_translation;
+
+ public function ste_tag_cunstom_translation($ste, $params, $sub)
+ {
+ $this->load_language($ste->vars["language"]);
+ if($ste->evalbool($params["raw"]))
+ return (string) $this->current_translation[$params["for"]];
+ else
+ return htmlesc((string) $this->current_translation[$params["for"]]);
+ }
+
+ public function pluginpage(&$data, $url_now, &$url_next)
+ {
+ global $languages;
+ $this->prepare_backend_pluginpage();
+
+ $tr_langs = $this->kvstorage["languages"];
+ $translation_keys = $this->kvstorage["translation_keys"];
+
+ $translations = array();
+ foreach($tr_langs as $l)
+ $translations[$l] = $this->kvstorage["translation_$l"];
+
+ if(isset($_POST["tr_translation_enter"]) and (!empty($_POST["tr_translation_key"])) and (!empty($_POST["tr_lang"])))
+ {
+ if(!isset($translations[$_POST["tr_lang"]]))
+ {
+ $tr_langs[] = $_POST["tr_lang"];
+ $translation = array();
+ }
+ else
+ $translation = $translations[$_POST["tr_lang"]];
+
+ if(empty($_POST["tr_translation"]))
+ {
+ if(in_array($_POST["tr_translation_key"], $translation_keys))
+ {
+ unset($translation[$_POST["tr_translation_key"]]);
+ if(empty($translation))
+ {
+ $tr_langs = array_filter($tr_langs, function($l) { return $l != $_POST["tr_lang"]; });
+ $this->kvstorage["languages"] = $tr_langs;
+ }
+ }
+ }
+ else
+ {
+ $translation[$_POST["tr_translation_key"]] = $_POST["tr_translation"];
+ if(!in_array($_POST["tr_translation_key"], $translation_keys))
+ $translation_keys[] = $_POST["tr_translation_key"];
+ }
+
+ $translations[$_POST["tr_lang"]] = $translation;
+ $this->kvstorage["translation_" . $_POST["tr_lang"]] = $translation;
+ $this->kvstorage["translation_keys"] = $translation_keys;
+ }
+
+ sort($tr_langs);
+
+ $this->kvstorage["languages"] = $tr_langs;
+
+ $this->ste->vars["tr_langs"] = array_map(function($l) use ($languages) { return $languages[$l]["language"]; }, $tr_langs);
+ $this->ste->vars["tr_translations"] = array();
+ foreach($translation_keys as $tk)
+ {
+ $this->ste->vars["tr_translations"][$tk] = array();
+ $nothinghere = True;
+ foreach($tr_langs as $lang)
+ {
+ $translation = (string) @$translations[$lang][$tk];
+ $this->ste->vars["tr_translations"][$tk][] = $translation;
+ if(!empty($translation))
+ $nothinghere = False;
+ }
+ if($nothinghere)
+ {
+ unset($this->ste->vars["tr_translations"][$tk]);
+ $translation_keys = array_filter($translation_keys, function($k) use ($tk) { return $tk != $k; });
+ $this->kvstorage["translation_keys"] = $translation_keys;
+ }
+ }
+
+ echo $this->ste->exectemplate($this->get_template_dir() . "/backend.html");
+ }
+
+ private function load_language($langcode)
+ {
+ if($langcode == $this->current_language)
+ return;
+
+ $this->current_translation = (array) $this->kvstorage["translation_$langcode"];
+ $this->current_language = $langcode;
+ }
+
+ public function install()
+ {
+ $this->kvstorage["languages"] = array();
+ $this->kvstorage["translation_keys"] = array();
+ }
+
+ public function init()
+ {
+ $this->ste->register_tag("custom_translation", array($this, "ste_tag_cunstom_translation"));
+ $this->register_backend_pluginpage("Custom Translations", array($this, "pluginpage"));
+ }
+}
+
+?>