コード例 #1
0
ファイル: LanguageController.php プロジェクト: elvyrra/hawk
 /**
  * Display the list of the translation keys
  *
  * @param array $filters The filters to display the list
  */
 public function listKeys($filters = array())
 {
     if (empty($filters)) {
         $filters = $this->getFilters();
     }
     // Find all files in main-plugin, plugins dans userfiles
     $files = array();
     $dirs = array(MAIN_PLUGINS_DIR, PLUGINS_DIR, USERFILES_PLUGINS_DIR . Lang::TRANSLATIONS_DIR);
     foreach ($dirs as $dir) {
         if (is_dir($dir)) {
             $result = App::fs()->find($dir, '*.*.lang', FileSystem::FIND_FILE_ONLY);
         }
         foreach ($result as $file) {
             list($plugin, $language, $ext) = explode('.', basename($file));
             if (empty($files[$plugin])) {
                 $files[$plugin] = array();
             }
             if (empty($files[$plugin][$language])) {
                 $files[$plugin][$language] = array();
             }
             $files[$plugin][$language][$dir == USERFILES_PLUGINS_DIR . Lang::TRANSLATIONS_DIR ? 'translation' : 'origin'] = $file;
         }
     }
     $keys = array();
     foreach ($files as $plugin => $languages) {
         foreach ($languages as $tag => $paths) {
             foreach ($paths as $name => $file) {
                 $translations = parse_ini_file($file);
                 foreach ($translations as $key => $value) {
                     if (!is_array($value)) {
                         // This is a single key
                         $langKey = "{$plugin}.{$key}";
                         if (empty($keys[$langKey])) {
                             $keys[$langKey] = array();
                         }
                         $keys[$langKey][$tag] = $value;
                     } else {
                         // This is a multiple key
                         foreach ($value as $multiplier => $val) {
                             $langKey = $plugin . '.' . $key . '[' . $multiplier . ']';
                             if (empty($keys[$langKey])) {
                                 $keys[$langKey] = array();
                             }
                             $keys[$langKey][$tag] = $val;
                         }
                     }
                 }
             }
         }
     }
     $data = array();
     foreach ($keys as $langKey => $values) {
         if ($filters['keys'] != 'missing' || empty($values[$filters['tag']])) {
             $data[] = (object) array('langKey' => $langKey, 'origin' => isset($values[Lang::DEFAULT_LANGUAGE]) ? $values[Lang::DEFAULT_LANGUAGE] : '', 'translation' => isset($values[$filters['tag']]) ? $values[$filters['tag']] : '');
         }
     }
     $param = array('id' => 'language-key-list', 'action' => App::router()->getUri('language-keys-list'), 'data' => $data, 'controls' => array(array('type' => 'submit', 'icon' => 'save', 'label' => Lang::get('main.valid-button'), 'class' => 'btn-primary'), array('icon' => 'plus', 'label' => Lang::get('language.new-lang'), 'href' => App::router()->getUri('edit-language', array('tag' => 'new')), 'target' => 'dialog', 'class' => 'btn-success'), array('href' => App::router()->getUri('import-language-keys'), 'target' => 'dialog', 'icon' => 'download', 'label' => Lang::get('language.import-btn'), 'class' => 'btn-info')), 'fields' => array('langKey' => array('label' => Lang::get('language.key-list-key-label')), 'origin' => array('label' => Lang::get('language.key-list-default-translation-label', array('tag' => Lang::DEFAULT_LANGUAGE))), 'translation' => array('label' => Lang::get('language.key-list-default-translation-label', array('tag' => $filters['tag'])), 'display' => function ($value, $field, $line) use($filters) {
         $key = str_replace(array('[', ']'), array('{', '}'), $line->langKey);
         return "<textarea name='translation[{$filters['tag']}][{$key}]' cols='40' rows='5'>{$value}</textarea>";
     }), 'clean' => array('search' => false, 'sort' => false, 'display' => function ($value, $field, $line) {
         return Icon::make(array('icon' => 'undo', 'class' => 'text-danger delete-translation', 'title' => Lang::get('language.delete-translation-btn'), 'data-key' => $line->langKey));
     })));
     $list = new ItemList($param);
     return $list->__toString();
 }