diff --git a/setup/cli/modules/i18n.php b/setup/cli/modules/i18n.php
index 04baeb734de75ea0e8e6a61dca17dec86f61fc68..269386dfd55097de993e3d6bbc0309e474d9cc67 100644
--- a/setup/cli/modules/i18n.php
+++ b/setup/cli/modules/i18n.php
@@ -581,10 +581,11 @@ class i18n_Compiler extends Module {
             $s = str_replace($root, '', $s);
             $this->stderr->write($s."\n");
             $calls = array();
-            preg_match_all('/__\(\s*[^\'"]*(([\'"])(?:(?<!\\\\)\2|.)+\2)\s*[^)]*\)/',
+            preg_match_all('/(?:function\s+)?__\(\s*[^\'"]*(([\'"])(?:(?<!\\\\)\2|.)+\2)\s*[^)]*\)/',
                 $script, $calls, PREG_OFFSET_CAPTURE | PREG_SET_ORDER);
             foreach ($calls as $c) {
-                $call = $this->__find_strings(token_get_all('<?php '.$c[0][0]), $funcs, 0);
+                if (!($call = $this->__find_strings(token_get_all('<?php '.$c[0][0]), $funcs, 0)))
+                    continue;
                 $call = $call[0];
 
                 list($lhs) = str_split($script, $c[1][1]);