aboutsummaryrefslogtreecommitdiff
path: root/cli/i18n/I18nData.php
diff options
context:
space:
mode:
authorGravatar Alexandre Alapetite <alexandre@alapetite.fr> 2017-12-17 20:28:04 +0100
committerGravatar GitHub <noreply@github.com> 2017-12-17 20:28:04 +0100
commit60f56539c3f30fd3f7ba4f2a3570f7029ac93e5f (patch)
tree1e78bfac7042dceb63898e2215db8fb0c1d7745d /cli/i18n/I18nData.php
parentceda55c75b158fc1cf4813fe0f258527754b9289 (diff)
parent0b1516af91792f86868689392f72ad4b6e32cdcf (diff)
Merge pull request #1720 from FreshRSS/dev
FreshRSS 1.9.0
Diffstat (limited to 'cli/i18n/I18nData.php')
-rw-r--r--cli/i18n/I18nData.php118
1 files changed, 118 insertions, 0 deletions
diff --git a/cli/i18n/I18nData.php b/cli/i18n/I18nData.php
new file mode 100644
index 000000000..cd8ba0765
--- /dev/null
+++ b/cli/i18n/I18nData.php
@@ -0,0 +1,118 @@
+<?php
+
+class I18nData {
+
+ const REFERENCE_LANGUAGE = 'en';
+
+ private $data = array();
+ private $originalData = array();
+
+ public function __construct($data) {
+ $this->data = $data;
+ $this->originalData = $data;
+ }
+
+ public function getData() {
+ return $this->data;
+ }
+
+ /**
+ * Return the available languages
+ *
+ * @return array
+ */
+ public function getAvailableLanguages() {
+ $languages = array_keys($this->data);
+ sort($languages);
+
+ return $languages;
+ }
+
+ /**
+ * Add a new language. It's a copy of the reference language.
+ *
+ * @param string $language
+ */
+ public function addLanguage($language) {
+ if (array_key_exists($language, $this->data)) {
+ throw new Exception('The selected language already exist.');
+ }
+ $this->data[$language] = $this->data[static::REFERENCE_LANGUAGE];
+ }
+
+ /**
+ * Add a key in the reference language
+ *
+ * @param string $key
+ * @param string $value
+ */
+ public function addKey($key, $value) {
+ if (array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) {
+ throw new Exception('The selected key already exist.');
+ }
+ $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)][$key] = $value;
+ }
+
+ /**
+ * Duplicate a key from the reference language to all other languages
+ *
+ * @param string $key
+ */
+ public function duplicateKey($key) {
+ if (!array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) {
+ throw new Exception('The selected key does not exist.');
+ }
+ $value = $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)][$key];
+ foreach ($this->getAvailableLanguages() as $language) {
+ if (static::REFERENCE_LANGUAGE === $language) {
+ continue;
+ }
+ if (array_key_exists($key, $this->data[$language][$this->getFilenamePrefix($key)])) {
+ throw new Exception(sprintf('The selected key already exist in %s.', $language));
+ }
+ $this->data[$language][$this->getFilenamePrefix($key)][$key] = $value;
+ }
+ }
+
+ /**
+ * Remove a key in all languages
+ *
+ * @param string $key
+ */
+ public function removeKey($key) {
+ if (!array_key_exists($key, $this->data[static::REFERENCE_LANGUAGE][$this->getFilenamePrefix($key)])) {
+ throw new Exception('The selected key does not exist.');
+ }
+ foreach ($this->getAvailableLanguages() as $language) {
+ if (array_key_exists($key, $this->data[$language][$this->getFilenamePrefix($key)])) {
+ unset($this->data[$language][$this->getFilenamePrefix($key)][$key]);
+ }
+ }
+ }
+
+ /**
+ * Check if the data has changed
+ *
+ * @return bool
+ */
+ public function hasChanged() {
+ return $this->data !== $this->originalData;
+ }
+
+ public function getLanguage($language) {
+ return $this->data[$language];
+ }
+
+ public function getReferenceLanguage() {
+ return $this->getLanguage(static::REFERENCE_LANGUAGE);
+ }
+
+ /**
+ * @param string $key
+ * @return string
+ */
+ private function getFilenamePrefix($key) {
+ return preg_replace('/\..*/', '.php', $key);
+ }
+
+}