--- i18ncck.info +++ i18ncck.info @@ -0,0 +1,8 @@ +; $Id$ +name = CCK translation +description = Supports translatable CCK fields. +dependencies[] = i18n +dependencies[] = content +dependencies[] = i18nstrings +package = Multilanguage +core = 6.x --- i18ncck.install +++ i18ncck.install @@ -0,0 +1,17 @@ + t('CCK')); + + case 'refresh': + if ($group == 'cck') { + return i18ncck_locale_refresh(); + } + } +} + +/** + * Makes safe keys for using in tt(). + */ +function i18ncck_get_safe_value($option) { + return html_entity_decode(strip_tags($option), ENT_QUOTES); +} + +/** + * Refresh locale strings. + */ +function i18ncck_locale_refresh() { + $types = content_types($form['#node']->type); + foreach ($types as $type) { + if (isset($type['fields'])) { + foreach ($type['fields'] as $field_name => $field) { + // Localize title and description + if ($field['widget']['label']) { + tt('cck:field:'. $field_name .':label', $field['widget']['label'], NULL, TRUE); + } + if ($field['widget']['description']) { + tt('cck:field:'. $field_name .':description', $field['widget']['description'], NULL, TRUE); + } + + // Localize options + $function = $field['module'] .'_allowed_values'; + $options = function_exists($function) ? $function($field) : (array) content_allowed_values($field); + if (!empty($options)) { + foreach ($options as $option) { + tt('cck:field:'. $field_name .':option_'. i18ncck_get_safe_value($option), $option, NULL, TRUE); + } + } + } + } + } +} + +/** + * Translate widget's labels and descriptions. + */ +function i18ncck_content_type_info_alter(&$info) { + foreach ($info['content types'] as $type => $data) { + if (variable_get('language_content_type_'. $type, 0) && !empty($info['content types'][$type]['fields'])) { + foreach ($info['content types'][$type]['fields'] as $field_name => $field) { + $info['content types'][$type]['fields'][$field_name]['widget']['label'] = tt('cck:field:'. $field_name .':label', $info['content types'][$type]['fields'][$field_name]['widget']['label']); + $info['content types'][$type]['fields'][$field_name]['widget']['description'] = tt('cck:field:'. $field_name .':description', $info['content types'][$type]['fields'][$field_name]['widget']['description']); + } + } + } + + if (!empty($info['fields'])) { + foreach ($info['fields'] as $field_name => $field) { + if (variable_get('language_content_type_'. $field['type_name'], 0)) { + $info['fields'][$field_name]['widget']['label'] = tt('cck:field:'. $field_name .':label', $info['fields'][$field_name]['widget']['label']); + $info['fields'][$field_name]['widget']['description'] = tt('cck:field:'. $field_name .':description', $info['fields'][$field_name]['widget']['description']); + } + } + } +} + +/** + * Translate lists, etc. + */ +function i18ncck_content_allowed_values_alter(&$items, $field) { + if (variable_get('language_content_type_'. $field['type_name'], 0) && !empty($items)) { + foreach ($items as $key => $value) { + $items[$key] = tt('cck:field:'. $field['field_name'] .':option_'. i18ncck_get_safe_value($value), $value); + } + } +} + +/** + * Translate field's values outside the context of the $node, as when fields + * are displayed in Views, etc. + */ +function i18ncck_content_format_item_alter(&$item, $field) { + if (variable_get('language_content_type_'. $field['type_name'], 0)) { + $item['value'] = tt('cck:field:'. $field['field_name'] .':option_'. i18ncck_get_safe_value($item['value']), $item['value']); + } +}