summaryrefslogtreecommitdiff
path: root/www/wiki/extensions/LocalisationUpdate/includes/LocalisationUpdate.php
diff options
context:
space:
mode:
Diffstat (limited to 'www/wiki/extensions/LocalisationUpdate/includes/LocalisationUpdate.php')
-rw-r--r--www/wiki/extensions/LocalisationUpdate/includes/LocalisationUpdate.php73
1 files changed, 73 insertions, 0 deletions
diff --git a/www/wiki/extensions/LocalisationUpdate/includes/LocalisationUpdate.php b/www/wiki/extensions/LocalisationUpdate/includes/LocalisationUpdate.php
new file mode 100644
index 00000000..a0b5f044
--- /dev/null
+++ b/www/wiki/extensions/LocalisationUpdate/includes/LocalisationUpdate.php
@@ -0,0 +1,73 @@
+<?php
+
+/**
+ * Class for localization update hooks and static methods.
+ */
+class LocalisationUpdate {
+ /**
+ * Hook: LocalisationCacheRecacheFallback
+ * @param LocalisationCache $lc
+ * @param string $code
+ * @param array &$cache
+ * @return true
+ */
+ public static function onRecacheFallback( LocalisationCache $lc, $code, array &$cache ) {
+ $dir = self::getDirectory();
+ if ( !$dir ) {
+ return true;
+ }
+
+ $fileName = "$dir/" . self::getFilename( $code );
+ if ( is_readable( $fileName ) ) {
+ $data = FormatJson::decode( file_get_contents( $fileName ), true );
+ $cache['messages'] = array_merge( $cache['messages'], $data );
+ }
+
+ return true;
+ }
+
+ /**
+ * Hook: LocalisationCacheRecache
+ * @param LocalisationCache $lc
+ * @param string $code
+ * @param array &$cache
+ * @return true
+ */
+ public static function onRecache( LocalisationCache $lc, $code, array &$cache ) {
+ $dir = self::getDirectory();
+ if ( !$dir ) {
+ return true;
+ }
+
+ $codeSequence = array_merge( [ $code ], $cache['fallbackSequence'] );
+ foreach ( $codeSequence as $csCode ) {
+ $fileName = "$dir/" . self::getFilename( $csCode );
+ $cache['deps'][] = new FileDependency( $fileName );
+ }
+
+ return true;
+ }
+
+ /**
+ * Returns a directory where updated translations are stored.
+ *
+ * @return string|false False if not configured.
+ * @since 1.1
+ */
+ public static function getDirectory() {
+ global $wgLocalisationUpdateDirectory, $wgCacheDirectory;
+
+ return $wgLocalisationUpdateDirectory ?: $wgCacheDirectory;
+ }
+
+ /**
+ * Returns a filename where updated translations are stored.
+ *
+ * @param string $language Language tag
+ * @return string
+ * @since 1.1
+ */
+ public static function getFilename( $language ) {
+ return "l10nupdate-$language.json";
+ }
+}