Skip to content

Commit

Permalink
fix i18n handling
Browse files Browse the repository at this point in the history
Translations are loaded via datatable's language url mechanism now.
  • Loading branch information
splitbrain committed Jul 12, 2023
1 parent aeb9140 commit 077cb16
Show file tree
Hide file tree
Showing 95 changed files with 12,192 additions and 102 deletions.
177 changes: 76 additions & 101 deletions action.php
@@ -1,142 +1,86 @@
<?php

/**
* DataTables Action Plugin
*
* Add DataTables support to DokuWiki
* @license GPL 2 (http://www.gnu.org/licenses/gpl.html)
* @author Giuseppe Di Terlizzi <giuseppe.diterlizzi@gmail.com>
* @copyright (C) 2015-2020, Giuseppe Di Terlizzi
*/

// must be run within Dokuwiki
if (!defined('DOKU_INC')) {
die();
}

/**
* Class DataTables Plugin
*
* Add DataTables support to DokuWiki
*/
class action_plugin_datatables extends DokuWiki_Action_Plugin
{
const ASSET_DIR = __DIR__ . '/assets';
const ASSET_URL = DOKU_BASE . 'lib/plugins/datatables/assets';

public $i18n = array(
'da' => 'Danish',
'fr' => 'French',
'nl' => 'Dutch',
'hi' => 'Hindi',
'fo' => 'Faroese',
'el' => 'Greek',
'bg' => 'Bulgarian',
'pt-br' => 'Brazilian',
'ml' => 'Malayalam',
'cs' => 'Czech',
'hu' => 'Hungarian',
'sk' => 'Slovak',
'fi' => 'Finnish',
'de' => 'German',
'ja' => 'Japanese',
'lt' => 'Lithuanian',
'km' => 'Khmer',
'no' => 'Norwegian',
'sl' => 'Slovenian',
'ru' => 'Russian',
'lb' => 'Luxembourgish',
'pl' => 'Polish',
'af' => 'Afrikaans',
'th' => 'Thai',
'eo' => 'Esperanto',
'ka' => 'Georgian',
'et' => 'Estonian',
'it' => 'Italian',
'is' => 'Icelandic',
'ro' => 'Romanian',
'ta' => 'Tamil',
'ms' => 'Malaysian',
'az' => 'Azerbaijani',
'vi' => 'Vietnamese',
'lv' => 'Latvian',
'uk' => 'Ukrainian',
'cy' => 'Welsh/UK',
'id' => 'Indonesian',
'kk' => 'Kazakh',
'sv' => 'Swedish',
'de-informal' => 'German',
'he' => 'Hebrew',
'zh-tw' => 'Chinese',
'zh' => 'Chinese',
'pt' => 'Portuguese',
'ko' => 'Korean',
'tr' => 'Turkish',
'sq' => 'Albanian',
);

/**
* Register events
*
* @param Doku_Event_Handler $controller
* @param Doku_Event_Handler $controller
*/
public function register(Doku_Event_Handler $controller)
{
$controller->register_hook('TPL_METAHEADER_OUTPUT', 'BEFORE', $this, 'datatables');
$controller->register_hook('DOKUWIKI_STARTED', 'AFTER', $this, 'jsinfo');
}

public function jsinfo(Doku_Event &$event, $param)
/**
* Set config for DataTables in JSINFO
*
* @param Doku_Event $event DOKUWIKI_STARTED
* @param mixed $param
* @return void
*/
public function jsinfo(Doku_Event $event, $param)
{

global $JSINFO;
global $conf;

$datatables_config = array();

// DataTables global configuration
$datatables_config['config'] = array();

// Plugin configuration
$datatables_config['enableForAllTables'] = $this->getConf('enableForAllTables');

$asset_path = dirname(__FILE__) . '/assets/datatables.net-plugins/i18n';

$datatables_lang = sprintf('%s/%s.lang', $asset_path, $this->i18n[$conf['lang']]);

if (file_exists($datatables_lang)) {
$datatables_config['config']['language'] = json_decode(
preg_replace("#(/\*([^*]|[\r\n]|(\*+([^*/]|[\r\n])))*\*+/)|([\s\t]//.*)|(^//.*)#", '',
file_get_contents($datatables_lang)));
// default config
$datatables_config = [
'config' => [
'dom' => 'lBfrtip'
],
'enableForAllTables' => $this->getConf('enableForAllTables'),
];

// find a matching language file
foreach ($this->getLangPath() as $path) {
if (file_exists(self::ASSET_DIR . '/' . $path)) {
$datatables_config['config']['language']['url'] = self::ASSET_URL . '/' . $path;
break;
}
}

$JSINFO['plugin']['datatables'] = $datatables_config;

}

/**
* Add DataTables scripts and styles
*
* @param Doku_Event &$event
* @param Doku_Event $event TPL_METAHEADER_OUTPUT
*/
public function datatables(Doku_Event &$event, $param)
public function datatables(Doku_Event $event, $param)
{

global $ID;
global $conf;
global $JSINFO;

$excluded_pages = $this->getConf('excludedPages');

if (!empty($excluded_pages) && (bool) preg_match("/$excluded_pages/", $ID)) {
return false;
if (!empty($excluded_pages) && (bool)preg_match("/$excluded_pages/", $ID)) {
return;
}

$base_url = DOKU_BASE . 'lib/plugins/datatables/assets';
$base_url = self::ASSET_URL;

$dt_scripts[] = "$base_url/datatables.net/js/jquery.dataTables.min.js";

$dt_scripts[] = "$base_url/datatables.net-fixedheader-dt/js/fixedHeader.dataTables.min.js";
$dt_styles[] = "$base_url/datatables.net-fixedheader-dt/css/fixedHeader.dataTables.min.css";
$dt_styles[] = "$base_url/datatables.net-fixedheader-dt/css/fixedHeader.dataTables.min.css";

$dt_scripts[] = "$base_url/datatables.net-fixedcolumns-dt/js/fixedColumns.dataTables.min.js";
$dt_styles[] = "$base_url/datatables.net-fixedcolumns-dt/css/fixedColumns.dataTables.min.css";
$dt_styles[] = "$base_url/datatables.net-fixedcolumns-dt/css/fixedColumns.dataTables.min.css";

$dt_scripts[] = "$base_url/datatables.net-buttons/js/dataTables.buttons.min.js";
$dt_scripts[] = "$base_url/datatables.net-buttons/js/buttons.html5.min.js";
Expand All @@ -149,32 +93,63 @@ public function datatables(Doku_Event &$event, $param)
switch ($conf['template']) {
case 'bootstrap3':
$dt_scripts[] = "$base_url/datatables.net/js/dataTables.bootstrap.min.js";
$dt_styles[] = "$base_url/datatables.net/css/dataTables.bootstrap.min.css";
$dt_styles[] = "$base_url/datatables.net/css/dataTables.bootstrap.min.css";
$dt_scripts[] = "$base_url/datatables.net-buttons/js/buttons.bootstrap.min.js";
$dt_styles[] = "$base_url/datatables.net-buttons/css/buttons.bootstrap.min.css";
$dt_styles[] = "$base_url/datatables.net-buttons/css/buttons.bootstrap.min.css";
break;
default:
$dt_scripts[] = "$base_url/datatables.net/js/dataTables.jqueryui.min.js";
$dt_styles[] = "$base_url/datatables.net/css/dataTables.jqueryui.min.css";
$dt_styles[] = "$base_url/datatables.net/css/dataTables.jqueryui.min.css";
$dt_scripts[] = "$base_url/datatables.net-buttons/js/buttons.jqueryui.min.js";
$dt_styles[] = "$base_url/datatables.net-buttons/css/buttons.jqueryui.min.css";
$dt_styles[] = "$base_url/datatables.net-buttons/css/buttons.jqueryui.min.css";
}

foreach ($dt_scripts as $script) {
$event->data['script'][] = array(
'type' => 'text/javascript',
'src' => $script,
$event->data['script'][] = [
'type' => 'text/javascript',
'src' => $script,
'defer' => 'defer',
'_data' => null,
);
];
}

foreach ($dt_styles as $style) {
$event->data['link'][] = array(
$event->data['link'][] = [
'type' => 'text/css',
'rel' => 'stylesheet',
'rel' => 'stylesheet',
'href' => $style,
);
];
}
}

/**
* Get possible language file paths for the current language
*
* @return Generator<string> Path relative to the asset locations
*/
protected function getLangPath()
{
global $conf;
[$lang, $dialect] = sexplode('-', $conf['lang'], 2);
$dialect = strtoupper($dialect);

// exact match with dialect
if ($dialect) {
yield "datatables.net-i18n/{$lang}-{$dialect}.json";
}

// exact match with language only
yield "datatables.net-i18n/{$lang}.json";

// fake dialect
$dialect = strtoupper($lang);
yield "datatables.net-i18n/{$lang}-{$dialect}.json";

// any matching language
$glob = self::ASSET_DIR . '/datatables.net-i18n/' . $lang . '*.json';
$result = glob($glob);
if ($result) {
yield 'datatables.net-i18n/' . basename($result[0]);
}
}
}
12 changes: 12 additions & 0 deletions assets/datatables.net-i18n/Ganda.json
@@ -0,0 +1,12 @@
{
"autoFill": {
"cancel": "sazzamu",
"fill": "juza",
"fillHorizontal": "juzaObukiika",
"fillVertical": "juzaObusiimba"
},
"buttons": {
"colvis": "endabikaYolunyilili",
"copy": "Koppa"
}
}
64 changes: 64 additions & 0 deletions assets/datatables.net-i18n/af.json
@@ -0,0 +1,64 @@
{
"infoThousands": ",",
"paginate": {
"first": "eerste",
"last": "laaste",
"next": "volgende",
"previous": "vorige"
},
"aria": {
"sortAscending": ": aktiveer kolom om stygend te sorteer",
"sortDescending": ": aktiveer kolom om dalend te sorteer"
},
"buttons": {
"csv": "CSV",
"excel": "Excel",
"pdf": "PDF",
"print": "Druk",
"collection": "Versameling &lt;span class=\"ui-button-icon-primary ui-icon ui-icon-triangle-1-s\"&gt;&lt;\/span&gt;",
"colvis": "Kolom Sigbaarheid",
"copy": "Kopieër",
"copyKeys": "Druk &lt;i&gt;ctrl&lt;\/i&gt; of &lt;i&gt;u2318&lt;\/i&gt; + &lt;i&gt;C&lt;\/i&gt; om die tabel data to kopieër na jou knipbord.&lt;br&gt;&lt;br&gt;Om te kanselleer, druk Escape.",
"copySuccess": {
"1": "1 ry gekopieër na knipbord",
"_": "%ds rye gekopieër na knipbord"
},
"copyTitle": "Kopieër na knipbord",
"pageLength": {
"-1": "Wys alle rye",
"1": "Wys 1 ry",
"_": "Wys %d rye"
},
"createState": "Skep Staat",
"removeAllStates": "Verwyder Alle State",
"removeState": "Verwyder",
"renameState": "Hernoem",
"savedStates": "Gestoorde State",
"stateRestore": "Staat %d",
"updateState": "Dateer op",
"colvisRestore": "Herwin Sigbaarheid"
},
"searchBuilder": {
"add": "Voeg by",
"clearAll": "Alles uitvee",
"condition": "Voorwaardes",
"data": "Data"
},
"autoFill": {
"cancel": "kanselleer",
"fillHorizontal": "Vul selle horisontaal",
"fillVertical": "Vul selle vertikaal",
"fill": "Vul alle selle met &lt;i&gt;%d&lt;i&gt;&lt;\/i&gt;&lt;\/i&gt;"
},
"emptyTable": "Geen data in tabel nie",
"info": "Wys _START_ tot _END_ uit _TOTAL_ rye",
"infoEmpty": "Wys 0 tot 0 uit 0 rye",
"infoFiltered": "(gefiltreer uit _MAX_ totale rye)",
"lengthMenu": "Wys _MENU_ rye",
"loadingRecords": "Besig om te laai...",
"processing": "Besig om te verwerk...",
"search": "Soek:",
"searchPlaceholder": "Plekhouer",
"thousands": ",",
"zeroRecords": "Geen gepaste rye gevind nie"
}
22 changes: 22 additions & 0 deletions assets/datatables.net-i18n/am.json
@@ -0,0 +1,22 @@
{
"emptyTable": "ባዶ ሰንጠረዥ",
"info": "ከጠቅላላው _TOTAL_ ዝርዝሮች ውስጥ ከ _START_ እስከ _END_ ያሉት ዝርዝር",
"infoEmpty": "ከጠቅላላው 0 ዝርዝሮች ውስጥ ከ 0 እስከ 0 ያሉት ዝርዝር",
"infoFiltered": "(ከጠቅላላው _MAX_ የተመረጡ ዝርዝሮች)",
"infoThousands": ",",
"lengthMenu": "የዝርዝሮች ብዛት _MENU_",
"loadingRecords": "በማቅረብ ላይ...",
"processing": "በማቀናበር ላይ...",
"search": "ፈልግ:",
"zeroRecords": "ከሚፈለገው ጋር የሚሚሳሰል ዝርዝር አልተገኘም",
"paginate": {
"first": "መጀመሪያ",
"last": "መጨረሻ",
"next": "ቀጣዩ",
"previous": "የበፊቱ"
},
"aria": {
"sortAscending": ": ከመጀመሪያ ወደ መጨረሻ(ወጪ) አደራደር",
"sortDescending": ": ከመጨረሻ ወደ መጀመሪያ(ወራጅ) አደራደር"
}
}

0 comments on commit 077cb16

Please sign in to comment.