如何为自定义 Drupal 7 模块生成翻译文件?

Posted

技术标签:

【中文标题】如何为自定义 Drupal 7 模块生成翻译文件?【英文标题】:How to generate translation file for a custom Drupal 7 module? 【发布时间】:2011-07-11 00:43:57 【问题描述】:

我使用的是 CentOS 5.5 Linux(没有 X)、php 5.3 和 Drupal 7.0。

我网站的核心语言是俄语(不是英语)!

我创建了一个 game.info 和以下 game.module,它们为首页生成 3 个块:

function game_block_info() 
  return array(
  'game_main' => array(
    'info' => t('Set FlashVars and show the flash game.'),
    'cache' => DRUPAL_NO_CACHE,
  ),
  'game_winner' => array(
    'info' => t('Show the winner of the last week.'),
    'cache' => DRUPAL_NO_CACHE,
  ),
  'game_leader' => array(
    'info' => t('Show the leader of the current week.'),
    'cache' => DRUPAL_NO_CACHE,
  );



function game_block_view($block_name = '') 
  global $user;

  if ($block_name == 'game_main') 
    if (user_is_logged_in()) 
      $content = t('User is logged in.');
     else 
      $content = t('User is an anonymous user.');
    
    drupal_set_message("<pre>$output</pre>\n");
    return array(
      'subject' => t('Main Game'),
      'content' => $content,
    );
   else if ($block_name == 'game_winner') 
    ....
   else if ($block_name == 'game_leader') 
    ....
  

它工作正常,但我需要所有字符串都是俄语,并且不想将它们硬编码到我的 game.module 文件中。

我是否需要创建名为 game.po 的第三个文件并将其添加到 game.info 中?

如何创建 .po 文件?如果可能的话,我更喜欢对该文件进行简单的编辑,不要使用晦涩的工具。

我也试过一个工具:

# xgettext -n game/game.module --keyword=t
xgettext: warning: file `game/game.module' extension `module' is unknown; will try C
game/game.module:87: warning: unterminated character constant
game/game.module:100: warning: unterminated character constant

【问题讨论】:

【参考方案1】:

这些应该是步骤:

    要生成.pot文件,安装模块Translation template extractor

    转到区域设置管理界面上的“提取字符串”选项卡,选择您的模块并提交表单。您将生成一个模板文件。

    然后您可以使用 Poedit (http://www.poedit.net) 之类的工具翻译字符串。

    完成后,应将文件复制到模块文件夹中的“翻译”子文件夹中,以便在安装游戏模块时由 Drupal 自动导入。

请提供反馈并说明您遇到了什么问题。谢谢

【讨论】:

虽然这一切都是正确的,但对于贡献的模块,本地化字符串的提取会在localize.drupal.org 发布新版本时自动发生。然后,drupal.org/project/l10n_update 可用于从那里获取翻译。但自定义模块是另一回事,显然...... 如果您正在翻译一个自定义模块,您需要重新安装它才能应用翻译。当您不想这样做时(例如,您不想在卸载时丢失所有权限和数据库表),您可以运行 drush 命令来强制加载翻译:drush php-eval "locale_system_update(array('yourmodule_name'));drush_backend_batch_process();" @corbacho:我按照您的步骤操作,但对我不起作用

以上是关于如何为自定义 Drupal 7 模块生成翻译文件?的主要内容,如果未能解决你的问题,请参考以下文章

Drupal 8 更新自定义模块的 language.po 文件

启用视图自定义模块会导致 Drupal 7 上的 Ajax HTTP 错误

使用 drupal 7 翻译 node.tpl.php 文件中的字段

如何为 JSF 自定义组件动态生成 CSS

Drupal 8 自定义模块未显示在块布局中

markdown 使用Drupal Console生成自定义模块