diff --git a/potx.inc b/potx.inc index 2ab1db5..c8ea50b 100644 --- a/potx.inc +++ b/potx.inc @@ -2051,6 +2051,7 @@ function _potx_load_yaml_translation_patterns($path) { if (is_array($item)) { $yaml_translation_patterns[$match]['keys'][] = $item['key']; $yaml_translation_patterns[$match]['contexts'][$item['key']] = $item['context']; + $yaml_translation_patterns[$match]['array_translatables'][$item['key']] = isset($item['array_translatables']) ? $item['array_translatables'] : FALSE; } else { $yaml_translation_patterns[$match]['keys'][] = $item; @@ -2137,13 +2138,17 @@ function _potx_parse_yaml_file($code, $file_name, $file_path, $save_callback) { * Callback function used to save strings. * @param $top_level * Indicates that the top-level keys are being scanned. + * @param $extract_array + * Set to TRUE to cause all array keys' values to be treated as translatable + * at this level of the YAML. */ -function _potx_find_yaml_translatables($yaml, $trans_list, $file_name, $save_callback, $top_level) { - $extract_values = $top_level && $trans_list['top_level_translatables']; +function _potx_find_yaml_translatables($yaml, $trans_list, $file_name, $save_callback, $top_level = FALSE, $extract_all = FALSE) { + $extract_values = ($top_level && $trans_list['top_level_translatables']) || + $extract_all; foreach ($yaml as $key => $value) { - if (in_array($key, $trans_list['keys'], TRUE)) { + if (in_array($key, $trans_list['keys'], TRUE) || $extract_all) { if (isset($trans_list['contexts'][$key])) { $context_key = $trans_list['contexts'][$key]; if (isset($yaml[$context_key])) { @@ -2160,9 +2165,12 @@ function _potx_find_yaml_translatables($yaml, $trans_list, $file_name, $save_cal if (!is_array($value)) { $save_callback(addcslashes($value, "\0..\37\\\""), $context, $file_name); } + elseif (isset($trans_list['array_translatables'][$key]) && $transl_list['array_translables'][$key]) { + _potx_find_yaml_translatables($value, $trans_list, $file_name, $save_callback, FALSE, TRUE); + } } elseif (is_array($value)) { - _potx_find_yaml_translatables($value, $trans_list, $file_name, $save_callback, FALSE); + _potx_find_yaml_translatables($value, $trans_list, $file_name, $save_callback); } elseif ($extract_values) { $save_callback(addcslashes($value, "\0..\37\\\""), POTX_CONTEXT_NONE, $file_name); diff --git a/yaml_translation_patterns.yml b/yaml_translation_patterns.yml index 264b692..41f3acd 100644 --- a/yaml_translation_patterns.yml +++ b/yaml_translation_patterns.yml @@ -5,6 +5,7 @@ translation_patterns: - description - package - regions + array_translatables: true - matches: '*.routing.yml' translatable_keys: - key: _title