草庐IT

php - CakePHP 本地化无法工作

coder 2024-04-30 原文

我正在使用 CakePHP v2.5.6 并且正在关注 this documentation关于 CakePHP 本地化。我已经读了 100 遍了,但还是不行!

使用蛋糕控制台 i18n 任务,我创建了以下文件...

app/Locale/default.pot
app/Locale/fra/LC_MESSAGES/default.po
app/Locale/fra/LC_MESSAGES/default.mo

...我使用 Poedit 翻译了一些字符串(用于测试):

在 bootstrap.php 我有:

Configure::write('Config.language', 'fra');

(我也试过将它放在我的 AppController 的 beforeFilter() 中,但也没有用)

在我看来我有:

<?php 
Debugger::dump( Configure::read('Config.language') );
Debugger::dump( CakeSession::read('Config.language') );
echo __('Find a Place'); 
?>

但是当我加载页面时,我只看到:

'fra'
null
Find a Place

为什么????!!!!!!!!!

更新 1 @ndm 提出了一些关于缓存的问题......

在我的持久缓存中出现以下文件:

.../temp/cache/persistent/myapp_cake_core_cake_fra
.../temp/cache/persistent/myapp_cake_core_default_fra
.../temp/cache/persistent/myapp_cake_core_file_map
.../temp/cache/persistent/myapp_cake_core_method_cache

更新 2 按照@ndm 的建议,我破解了 .po 文件中除了一个翻译之外的所有内容,它成功了!

# LANGUAGE translation of CakePHP Application
# Copyright YEAR NAME <EMAIL@ADDRESS>
#
msgid ""
msgstr ""
"Project-Id-Version: PROJECT VERSION\n"
"POT-Creation-Date: 2014-11-20 11:30-0500\n"
"PO-Revision-Date: 2014-11-20 11:43-0500\n"
"Last-Translator: SDP\n"
"Language-Team:  <EMAIL@ADDRESS>\n"
"Language: fr_CA\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Poedit 1.6.10\n"


#: View/Elements/nav--main.ctp:3
#, fuzzy
msgid "Find a Place"
msgstr "Trouver une place"

很明显我的文件有问题,但这很奇怪,因为它是由 Poedit 生成的全新文件并且它通过了“验证”功能而没有出现问题。它只是说有很多条目尚未翻译。

我从文件中删除的行如下所示:

...
#: Controller/FavoritesController.php:38;73;101
msgid "Invalid favorite"
msgstr ""

#: Controller/FavoritesController.php:53;77
msgid "The favorite has been saved."
msgstr ""

#: Controller/FavoritesController.php:56;80
msgid "The favorite could not be saved. Please, try again."
msgstr ""
...

有什么问题吗?

最佳答案

未编译模糊条目

因此,正如我们在评论中指出的那样,这里的问题是有问题的翻译已被标记为 fuzzy,并且此类条目未被编译到 .mo 中文件,除非使用 -f--use-fuzzy 标志和 msgfmt 明确请求。

合并.potpo文件时,条目自动标记为模糊,两个msgid字符串非常接近但不完全匹配,并且由于这些匹配可能不正确,它们在默认情况下不会被编译。

我应该在你的屏幕截图中看到,它在工具栏和状态栏中清楚地写着Fuzzy,我怀疑黄色标记的条目是那些模糊的,但它已经非常晚了。

CakePHP 使用 .mo 文件而不是 .po 文件

一些 Cake 背景信息,即使(当前)未记录,CakePHP 将使用 .mo 文件而不是 .po 文件,以防它们存在。

这些编译后的二进制变体通常解析起来更快(比较 I18n::loadMo()I18n::loadPo() ),因为格式更简单(没有注释,删除了不必要的(如模糊的)翻译等......)并且可以预期是有效的,当然 .po 文件可能包含不应该使用的条目,比如那些模糊的条目:)

关于php - CakePHP 本地化无法工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27049384/

有关php - CakePHP 本地化无法工作的更多相关文章

  1. ruby-on-rails - 由于 "wkhtmltopdf",PDFKIT 显然无法正常工作 - 2

    我在从html页面生成PDF时遇到问题。我正在使用PDFkit。在安装它的过程中,我注意到我需要wkhtmltopdf。所以我也安装了它。我做了PDFkit的文档所说的一切......现在我在尝试加载PDF时遇到了这个错误。这里是错误:commandfailed:"/usr/local/bin/wkhtmltopdf""--margin-right""0.75in""--page-size""Letter""--margin-top""0.75in""--margin-bottom""0.75in""--encoding""UTF-8""--margin-left""0.75in""-

  2. ruby-on-rails - 'compass watch' 是如何工作的/它是如何与 rails 一起使用的 - 2

    我在我的项目目录中完成了compasscreate.和compassinitrails。几个问题:我已将我的.sass文件放在public/stylesheets中。这是放置它们的正确位置吗?当我运行compasswatch时,它不会自动编译这些.sass文件。我必须手动指定文件:compasswatchpublic/stylesheets/myfile.sass等。如何让它自动运行?文件ie.css、print.css和screen.css已放在stylesheets/compiled。如何在编译后不让它们重新出现的情况下删除它们?我自己编译的.sass文件编译成compiled/t

  3. ruby-on-rails - 无法使用 Rails 3.2 创建插件? - 2

    我对最新版本的Rails有疑问。我创建了一个新应用程序(railsnewMyProject),但我没有脚本/生成,只有脚本/rails,当我输入ruby./script/railsgeneratepluginmy_plugin"Couldnotfindgeneratorplugin.".你知道如何生成插件模板吗?没有这个命令可以创建插件吗?PS:我正在使用Rails3.2.1和ruby​​1.8.7[universal-darwin11.0] 最佳答案 随着Rails3.2.0的发布,插件生成器已经被移除。查看变更日志here.现在

  4. ruby - 使用 C 扩展开发 ruby​​gem 时,如何使用 Rspec 在本地进行测试? - 2

    我正在编写一个包含C扩展的gem。通常当我写一个gem时,我会遵循TDD的过程,我会写一个失败的规范,然后处理代码直到它通过,等等......在“ext/mygem/mygem.c”中我的C扩展和在gemspec的“扩展”中配置的有效extconf.rb,如何运行我的规范并仍然加载我的C扩展?当我更改C代码时,我需要采取哪些步骤来重新编译代码?这可能是个愚蠢的问题,但是从我的gem的开发源代码树中输入“bundleinstall”不会构建任何native扩展。当我手动运行rubyext/mygem/extconf.rb时,我确实得到了一个Makefile(在整个项目的根目录中),然后当

  5. ruby - 无法运行 Rails 2.x 应用程序 - 2

    我尝试运行2.x应用程序。我使用rvm并为此应用程序设置其他版本的ruby​​:$rvmuseree-1.8.7-head我尝试运行服务器,然后出现很多错误:$script/serverNOTE:Gem.source_indexisdeprecated,useSpecification.Itwillberemovedonorafter2011-11-01.Gem.source_indexcalledfrom/Users/serg/rails_projects_terminal/work_proj/spohelp/config/../vendor/rails/railties/lib/r

  6. ruby-on-rails - 无法在centos上安装therubyracer(V8和GCC出错) - 2

    我正在尝试在我的centos服务器上安装therubyracer,但遇到了麻烦。$geminstalltherubyracerBuildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingtherubyracer:ERROR:Failedtobuildgemnativeextension./usr/local/rvm/rubies/ruby-1.9.3-p125/bin/rubyextconf.rbcheckingformain()in-lpthread...yescheckingforv8.h...no***e

  7. ruby - 无法让 RSpec 工作—— 'require' : cannot load such file - 2

    我花了三天的时间用头撞墙,试图弄清楚为什么简单的“rake”不能通过我的规范文件。如果您遇到这种情况:任何文件夹路径中都不要有空格!。严重地。事实上,从现在开始,您命名的任何内容都没有空格。这是我的控制台输出:(在/Users/*****/Desktop/LearningRuby/learn_ruby)$rake/Users/*******/Desktop/LearningRuby/learn_ruby/00_hello/hello_spec.rb:116:in`require':cannotloadsuchfile--hello(LoadError) 最佳

  8. ruby-on-rails - rspec should have_select ('cars' , :options => ['volvo' , 'saab' ] 不工作 - 2

    关闭。这个问题需要detailsorclarity.它目前不接受答案。想改进这个问题吗?通过editingthispost添加细节并澄清问题.关闭8年前。Improvethisquestion在首页我有:汽车:VolvoSaabMercedesAudistatic_pages_spec.rb中的测试代码:it"shouldhavetherightselect"dovisithome_pathit{shouldhave_select('cars',:options=>['volvo','saab','mercedes','audi'])}end响应是rspec./spec/request

  9. ruby-on-rails - s3_direct_upload 在生产服务器中不工作 - 2

    在Rails4.0.2中,我使用s3_direct_upload和aws-sdkgems直接为s3存储桶上传文件。在开发环境中它工作正常,但在生产环境中它会抛出如下错误,ActionView::Template::Error(noimplicitconversionofnilintoString)在View中,create_cv_url,:id=>"s3_uploader",:key=>"cv_uploads/{unique_id}/${filename}",:key_starts_with=>"cv_uploads/",:callback_param=>"cv[direct_uplo

  10. ruby - 无法覆盖 irb 中的 to_s - 2

    我在pry中定义了一个函数:to_s,但我无法调用它。这个方法去哪里了,怎么调用?pry(main)>defto_spry(main)*'hello'pry(main)*endpry(main)>to_s=>"main"我的ruby版本是2.1.2看了一些答案和搜索后,我认为我得到了正确的答案:这个方法用在什么地方?在irb或pry中定义方法时,会转到Object.instance_methods[1]pry(main)>defto_s[1]pry(main)*'hello'[1]pry(main)*end=>:to_s[2]pry(main)>defhello[2]pry(main)

随机推荐