Sea*_*ean 0 apache perl fastcgi internationalization mod-fcgid
如果问题定义有点脱节,我深表歉意。我们已经在许多不同的媒介上攻击了这个问题。
基本描述,我们有一个网站,我们正在尝试提供使用Locale :: TextDomain的翻译
我们有fastcgi脚本,该脚本调用了我们的perl模块本地库。Fastcgi和翻译是棘手的(因为我们正在使用它),因为语言是在脚本启动时设置的,并且会持续存在。
因此,在我们的perl模块库中,此方法有效。
package SR::Locale;
our $LOCALE_NAMESPACE = 'es';
use Locale::TextDomain::UTF8 qw( $LOCALE_NAMESPACE );
our $word = __("football");
Run Code Online (Sandbox Code Playgroud)
但是我们找不到在启动时动态设置变量$ LOCALE_NAMESPACE的方法。我们想基于request_uri或正在执行的脚本的dir路径或类似的东西进行设置。所以我们想做类似的事情,但是我们不能在快速的cgi设置中解决这个问题:
package SR::Locale;
$ENV{REQUEST_URI} =~ m{example.com/(..)/}
our $LOCALE_NAMESPACE = $1;
use Locale::TextDomain::UTF8 qw( $LOCALE_NAMESPACE );
our $word = __("football");
Run Code Online (Sandbox Code Playgroud)
在此示例中(对于fastcgi),$ ENV {REQUEST_URI}在脚本启动时模块中为空白。
任何帮助将非常感激。我无法在perl中找到任何有关翻译和fastcgi的参考。
一个明显的问题是,运行时间分配$LOCALE_NAMESPACE,上使用捕获从正则表达式$ENV{REQUEST_URI},运行后在use那里变量使用,因为所有的语句使用的语句在编译时运行。
如果唯一的问题是如何设置$LOCALE_NAMESPACE的时候use,这样做在BEGIN阶段
package SR::Locale;
my $LOCALE_NAMESPACE;
BEGIN {
# Add a check that $ENV{REQUEST_URI} is indeed set by the environment
($LOCALE_NAMESPACE) = $ENV{REQUEST_URI} =~ m{example.com/(..)/};
}
use Locale::TextDomain::UTF8 qw( $LOCALE_NAMESPACE );
Run Code Online (Sandbox Code Playgroud)
不要忘记,它BEGIN必须在use依赖它的语句之前出现。所有同BEGIN相运行的代码均按其在源文件中的出现顺序执行(包括d模块中的任何其他use语句或BEGIN块use)。
| 归档时间: |
|
| 查看次数: |
70 次 |
| 最近记录: |