首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PO文件Gettext不工作。未读取po文件翻译

PO文件Gettext不工作。未读取po文件翻译
EN

Stack Overflow用户
提问于 2021-01-16 11:58:27
回答 1查看 69关注 0票数 1

我需要把我的网站翻译成法语,但是它不能翻译。我对代码做了很多修改,但似乎都不起作用。有什么想法吗?

代码语言:javascript
运行
复制
<?php
    $langSite = 'fr';
    
    setlocale(LC_ALL, $langSite);
    putenv("LANGUAGE=".$langSite);
    
    $langDomain = 'fr';
    bindtextdomain($langDomain, 'lang');
    
    bind_textdomain_codeset($langDomain, 'UTF-8');
    
    textdomain($langDomain);

    echo _("Password"); // returning Password instead of Mot de passe
?>

我在langs/fr/LC_ fr.po中找到的消息文件如下所示:

代码语言:javascript
运行
复制
msgctxt "Password"
msgid "Password"
msgstr "Mot de passe"
EN

回答 1

Stack Overflow用户

发布于 2021-01-16 16:07:06

1。)您必须从.po文件创建一个以.mo结尾的编译版本,并将其放在服务器上。

这可以通过Poedit https://poedit.net/来完成

POEDIT非常好-它扫描所有文件的完整目录,将所有翻译字符串放到.po文件中,并提供一个图形用户界面来执行检查和更多操作。付费(一次性)版本甚至更好,如果你将你的语言翻译成外语,它可以使用web服务来翻译你的字符串。

2。)备注:通常你的域名只有'messages‘,然后gettext会使用正确的目录来使用所需的语言。文件名则为messages.po和messages.mo

我很难让它启动,因为我也使用了en.po,直到我检查文件名必须与域名相同。

3。)下面是在我的服务器上配置GETTEXT的包含文件中的代码:(在我检查语言是来自SESSION还是GET之前,但那是另一回事)。

代码语言:javascript
运行
复制
putenv ( "LANG=" . $language );
setlocale (LC_ALL, $language.".UTF8" );

// Set the text domain as "messages"
$domain = "messages";
$domain_path= $_SERVER['DOCUMENT_ROOT'] ."/locale";
bindtextdomain($domain, $domain_path);
bind_textdomain_codeset($domain, "UTF-8" );
textdomain($domain);

上面的值反映了我的路径结构:

这是

代码语言:javascript
运行
复制
/locale/
        /{language}/
                    LC_MESSAGES/
                                messages.po
                                messages.mo

4.你写

bindtextdomain($langDomain,'lang');

我在langs /fr/LC_ fr.po中找到的消息文件如下所示:

binddextdomain的第二个参数必须与路径相同,但您可能有一个输入错误或另一个错误,因为您有一次lang和另一次time langs ??这必须是相同的!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/65746368

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档