将pot文件转换为数组 -- 7 领域 和 i18n-l10n 领域 drupal 相关 的问题

Convert pot file to array


2
vote

问题

中文

所以,我需要做的是将 998887660 文件的内容转换为数组。

我知道有 _locale_import_read_po() ,但是当我用以下代码尝试使用它时,我收到错误。

  $translations = _locale_import_read_po('db-store', 'translations.pot');   

translations.pot 文件位于包含我写入的代码的文件的同一目录中。

使用 dpm($translations) 是下面的错误。

错误消息

翻译导入失败,因为无法读取文件。

这是来自 9988877665 函数的代码,输出该错误。

  // The file will get closed by PHP on returning from this function. $fd = fopen($file->uri, 'rb'); if (!$fd) {   _locale_import_message('The translation import failed, because the file %filename could not be read.', $file);   return FALSE; }   

据我所知 'rb' 文件打开模式是打开非文本文件。

为什么我会得到那个错误消息?

英文原文

So, what I need to do is to convert the contents of a .pot file to an array.

I know there is _locale_import_read_po(), but when I tried using it with the following code, I got an error.

$translations = _locale_import_read_po('db-store', 'translations.pot'); 

The translations.pot file is located in the same directory containing the file with the code I wrote.

The error I get with dpm($translations) is the following one.

Error message

The translation import failed, because the file could not be read.

This is the code from the _locale_import_read_po() function, that outputs that error.

// The file will get closed by PHP on returning from this function. $fd = fopen($file->uri, 'rb'); if (!$fd) {   _locale_import_message('The translation import failed, because the file %filename could not be read.', $file);   return FALSE; } 

As far as I know the 'r file open mode is to open non-text files.

Why do I get that error message?

     

回答列表

1
 
vote
vote
最佳答案
 

_locale_import_read_po() 是一个Drupal文件对象,在Drupal 7中只是一个 stdClass 对象。

使用该函数的更快方式并将文件对象传递,因为它期望使用类似于以下一个的代码。

   $po_files = file_scan_directory('./', '^translation.po$', array('recurse' => FALSE));  if (count($po_files)) {    require_once DRUPAL_ROOT . '/includes/locale.inc';    $po_file = reset($po_files);    _locale_import_read_po('db-store', $po_file);  }   

请注意, <代码> file_scan_directory() 是一个 preg_match() 正则表达式,不是文件名。

使用该代码,您无需使用文件API ,它基本上无用,因为文件系统中已经存在一个文件。
file_save() 存储数据库中的文件;对于用于单个操作的文件,如此,它不是必需的。

我使用了 998877610 < / code> 作为编写此答案中显示的代码的示例。

您还可以使代码显示更多通用以接受正则表达式和目录名称,并使用它加载更多文件。

  comment1  
 

The second parameter of _locale_import_read_po() is a Drupal file object, which in Drupal 7 is simply a stdClass object.

The quicker way to use that function and pass a file object as it expects is using code similar to the following one.

 $po_files = file_scan_directory('./', '^translation\.po$', array('recurse' => FALSE));  if (count($po_files)) {    require_once DRUPAL_ROOT . '/includes/locale.inc';    $po_file = reset($po_files);    _locale_import_read_po('db-store', $po_file);  } 

Notice that the second argument of file_scan_directory() is a preg_match() regular expression, not a filename.

Using that code, you don't need to save the file using the file API, which is essentially useless, since there is already a file in the file system.
file_save() stores the file in the database; for a file that is used for a single operation like that, it's not necessary.

I used st() as example for writing the code I shown in this answer.

You could also make the code I show more generic to accept a regular expression and a directory name, and use it to load more files.

function mymodule_import_translations($directory, $pattern) {   $po_files = file_scan_directory($directory, $pattern, array('recurse' => FALSE));   if (count($po_files)) {     require_once DRUPAL_ROOT . '/includes/locale.inc';     foreach ($po_files as $po_file) {       _locale_import_read_po('db-store', $po_file);     }   } } 
 
 
0
 
vote

comment2 参数需要是与po文件相对应的 drupal文件对象

您可以使用 file_save功能:

  comment3  

 

The $file parameter needs to be a Drupal file object corresponding to the PO file to import.

You can create one using the file_save function:

$file = file_save((object)array(     'filename' => $file_name,     'uri' => $destination_uri,     'status' => FILE_STATUS_PERMANENT,     'filemime' => file_get_mimetype($destination_uri),   )); 
 
 

相关问题

0  Memcache干扰简单  ( Memcache interfering with simpletest ) 
将一些测试添加到较旧的Drupal 7站点和一些测试检查自定义缓存项的存在或缺少。 在settings.php中似乎使用默认数据库缓存会更简单地干扰(如本地设置覆盖的Settings.php包含在settings.php中): $conf['cache_backends'][] = 'sites/all/mo...

0  如何在视图中添加带有用户字段图像的配置文件封面? [关闭]  ( How to add a profile cover with a user field image in a view ) 
关闭。这个问题需要详细信息或清晰度。它目前不接受答案。 想要改进这个问题?添加详细信息并阐明编辑此帖的问题。 关闭 2年前。 ...

1  将导入的字符串转换为数组  ( Convert imported strings into array ) 
我已使用 _locale_import_read_po 函数导入 .pot 文件,如下所示: $po_files = file_scan_directory('/', '/.*.pot$/'); if (count($po_files)) { require_once DRUPAL_ROOT . '/incl...

0  如何切换所需字段?  ( How can i toggle required field ) 
使用Drupal 7. 我正在尝试根据单击单击单击单击单键按钮切换必填字段。 我已经尝试了在这篇文章但它没有工作。 这是我的代码: $(context).find('.field-name-field-stop-displaying-after').hide(); $(conte...

1  如何从视图中获取面包屑来使用动态标题?  ( How do i get crumbs to use the dynamic title from a view ) 
我有一个查看: 内容:具有分类学术语ID(深度) 当我预览时,我看到标题... 但是,当我转到视图URL的调试选项卡时,在crumbs中: 如何从视图中获取面包屑来识别此标题? ...

0  测验模块持久性实现详细信息  ( Quiz module persistance implementation details ) 
代码的哪个部分是存储在数据库中的新测验?责任在提交数据库中存储新测验的功能是什么,以创建新测验? 我正在尝试完成两件事: 每个问题定时器 动态问题选择策略 测验模块版本:7.x-5.3 ...

0  我的ajax呼叫我的提交按钮不起作用?  ( My ajax call for my submit button does not work ) 
我正在使用表单构建器构建形式,但我甚至无法让我的按钮将其Ajax函数与回调。它不是在页面上进行正常的Ajax呼叫,而是重新加载整个页面。 我在这里做错了什么? DPM函数甚至不运行,所以我甚至不触发Ajax呼叫,但我将函数名称粘贴到回调中,所以我不确定为什么不触发提交?< / p> $form['sugge...

0  可用的节点语言仅英文  ( Available node language only english ) 
我有一个自定义内容类型,"将自定义语言设置为默认为新内容" 和"需要语言" 。自定义默认语言是当前语言。 实体转换由"当前语言" 定义为"默认语言" 并"从可用语言中排除语言中性" 启用。 我有24种语言启用,但在创建新节点时,只有英语只出现一种语言。但我需要能够设置任何24种语言 我缺少什么? ...

0  尝试用于西班牙语版本的URL别名 - “路径* / *是无效的,或者您无法访问它。”  ( Attempt url alias for spanish version of page the path is either invalid ) 
drupal 7.59。我们有页面.tld /谢谢,谢谢.tld / es /谢谢。 我正在尝试将Whater.tlp / gracias设置为ES /谢谢的URL别名,它说"路径'es /谢谢'是无效的,或者您无法访问它。" 页面本身是视图引用的tpl.php文件,并在其上翻译上单个块。 这个翻译东西超越了我。...

0  使用PHP的WebForm提交值  ( Webform submission values with php ) 
我正在使用webform 2 pdf模块,在那里我尝试将自定义内容设置为pdf文件。 我想加入WebForm提交数据,但我不知道如何做到这一点。基本上我想访问它们并将它们用作令牌。 我是一个渣滓和php的基本级别,这意味着我有限制。 //simple first section <h1 align="ce...

0  节点API挂钩可用于更改字段之前按照视图加载?  ( Node api hook that can be used to alter fields before loaded by views ) 
我需要在Drupal 7中使用节点API挂钩在显示之前改变一些节点内容。 它刚刚发生在我身上,虽然如果我使用 hook_node_view() ,它不会影响显示这些节点字段(右?)的视图的输出。 我需要在任何视图中更改 的字段显示节点的显示和节点的显示。希望这可以在一个函数中完成,而且在 hook_node_view...

0  设置cookie到期日期时的性能考虑因素  ( Performance considerations when setting the cookie expiration date ) 
在将未来10或20年过期时,是否会考虑到任何绩效考虑? 我知道无法根据cookie规范设置一个cookie以从不按照cookie规范过期,但我看到人们在这个堆栈overflow线程上显示了在2038的cookie到期日期的方法: https://stackoverflow.com/creestions/32904...

0  在ContentType创建或编辑节点时,在ContentType B中编辑字段  ( Edit field in contenttype b when creating or editing node of contenttype a ) 
当我创建或编辑ContentType a的节点时,我需要在ContentType B中编辑一个字段。 我知道它可以使用规则,但我需要有更多的控制,所以我想在我自己的模块中做到这一点。 尝试了没有成功的代码: function MYMODULE_node_presave($node) { MYMODULE_...

0  禁用单个表单的引导工具提示  ( Disable bootstrap tooltips for individual form ) 
是否可以为单个表单(表单中的所有组件)禁用引导工具提示?我知道我可以在引导程序设置中进行,这将关闭所有表单的工具提示,但我只想为一个形式关闭它 - 对于该表单中的所有组件。 我看到了如何禁用Bootstrap中的字段帮助文本的工具提示?,显示如何将其关闭为单个组件,但我想将其关闭整个形式。 ...

1  如何以编程方式填充一个国家/地区字段  ( How to programmatically populate a country field ) 
我们正在使用国家模块,以提供编辑可以选择一个国家/地区的国家/地区它在前端显示。它绝对有效。 但我们希望通过自定义模块以编程方式填充该字段。无论我们提供哪些价值来填充字段(国家名称,ISO 2代码等),该字段不会被填充。 我们肯定会确定在我们的模块中填充多个字段的其他地方没有任何错误,并且都按预期工作。 我们想知道国...

0  视图图像字段  ( Views image field ) 
我正在尝试使用视图中的图像字段向我的Drupal映像添加内联样式。无论我尝试什么方法,什么都没有工作。我已经用完了选项。 任何帮助? 以下是我使用的是一些代码示例: <img src="[field_image_upload]" height="150" style="margin: 5px; margin-ri...

1  如何防止Profile2字段从加载用户注册?  ( How to prevent profile2 fields from loading on user registration ) 
我有一个名为 driver 的配置文件2配置文件。 此配置文件具有术语引用到名为 cities 的词汇,其中包含 30.000术语。 我通过在我的template.php中声明它,在我的template.php中声明它,我做了一个 custom usreder-register.tpl.php ,我只显示对帐户创建感...

1  如何在文件上传小部件中添加额外的字段?  ( How to add an extra field in file upload widget ) 
我知道可以在核心文件上传小部件中为Drupal 7启用描述字段。 但是,我想添加一个像已经存在的 extra 描述字段。为此,我花了几个小时的谷歌,但没有找到完美的解决方案。请,有人,帮助我解决我的问题 ...

0  如何看到视图的清洁查询?  ( How can i see the clean query of a view ) 
我创建了一个测试视图。它显示内容类型'Anagrafiche(内部使用名称的数据)的数据。视图具有以下字段(抱歉界面语言): contenuto:immagine(img)这是一个图像场 contenuto:nome(name)它是一个文本字段 contenuto:cognome(姓氏)它是一个文本字段...

1  根据节点的子类型,在节点编辑和节点视图上显示不同的字段  ( Show different fields on node edit and node view depending on the sub type of th ) 
我有一个特定的节点类型,我想在页面布局中显示/隐藏一个节点表单的不同字段,以及在查看节点时。 出于各种原因,我不希望为每个创建新/单独的节点类型。不确定如何最好地在Drupal 7中实现这一点? 实际上有两个内容类型涉及。 '打开电话'和'项目' 我有一个内置D7的想法提交系统。用户登录并浏览项目的可用"开放式呼叫"...




© 2021 it.wenda123.org All Rights Reserved. 问答之家 版权所有


Licensed under cc by-sa 3.0 with attribution required.