我正在尝试在树枝中实现我的自定义翻译过滤器。所有翻译都存储在csv中。每个模板我们有一个包含数据的csv。
现在由于某种原因,过滤器中的函数无法访问$ TranslationText数组。
我应该更改什么才能使过滤器工作?
注意:未定义的变量:第103行的/public_html/public/index.php中的TranslationText
{{'Whatever'| t}}
请求翻译if (file_exists("../application/languages/nl/".$RenderTemplate.".csv") != FALSE) {
$handle = file_get_contents("../application/languages/nl/".$RenderTemplate.".csv");
$handle_row = explode("\n", $handle);
foreach ($handle_row as $key => $val) {
$row_array = explode('|', $val);
foreach ($row_array as $key => $val) {
$row_array[$key] = trim(str_replace('"', '', $val));
}
$TranslationText[] = $row_array;
}
}
require_once '../library/Twig/Autoloader.php';
Twig_Autoloader::register();
$loader = new Twig_Loader_Filesystem('../application/views/');
//Add Translation Filter
$filter = new Twig_SimpleFilter('t', function ($string) {
foreach($TranslationText AS $key => $value)//line 103
{
if($TranslationText[$key][0] == $string)
{
$Found = TRUE;
$TranslatedText = $TranslationText[$key][1];
}
}
if($Found == TRUE)
{
return $TranslatedText;
}
else
{
return $string;
}
});
$twig = new Twig_Environment($loader, array(
'cache' => '../tmp/cache/', 'auto_reload' => TRUE, 'debug' => TRUE
));
//REMOVE auto_reload and DEBUG if live!
$twig->addFilter($filter);
echo $twig->render($RenderTemplate.".html", $TotalArray);
答案 0 :(得分:0)
我只能说因为以下原因而得到错误:
$filter = new Twig_SimpleFilter('t', function ($string) {
foreach($TranslationText AS $key => $value)//line 103
//... other code lines follow
});
您没有use
$translationText
。请考虑以下代码:
$filter = new Twig_SimpleFilter('t', function ($string) use ($TranslationText) {
foreach($TranslationText AS $key => $value)//line 103
//... other code lines follow
});
请注意,如果您的csv文件不存在或无法读取,您仍会收到相同的错误,因为您未在file_exists
条件之外声明此变量。
注意:我无法保证这是您代码中唯一的问题。它只是解决您特定问题的方法。
P.S。通常,您的代码看起来很混乱。考虑使用OOP来做这些事情。另外,请注意您使用的标准:一些变量使用下划线命名,其他变量使用CamelCase命名。