Index: trunk/extensions/Translate/MessageCollection.php |
— | — | @@ -251,6 +251,9 @@ |
252 | 252 | } |
253 | 253 | } |
254 | 254 | |
| 255 | + /** |
| 256 | + * @return array |
| 257 | + */ |
255 | 258 | public static function getAvailableFilters() { |
256 | 259 | return array( |
257 | 260 | 'fuzzy', |
Index: trunk/extensions/Translate/FFS.php |
— | — | @@ -224,7 +224,7 @@ |
225 | 225 | |
226 | 226 | /** |
227 | 227 | * @param $collection MessageCollection |
228 | | - * @return |
| 228 | + * @return string |
229 | 229 | */ |
230 | 230 | public function writeIntoVariable( MessageCollection $collection ) { |
231 | 231 | $sourceFile = $this->group->getSourceFilePath( $collection->code ); |
Index: trunk/extensions/Translate/MessageGroups.php |
— | — | @@ -79,10 +79,15 @@ |
80 | 80 | * branches one can set a message key mangler. |
81 | 81 | */ |
82 | 82 | protected $mangler = null; |
| 83 | + |
| 84 | + /** |
| 85 | + * @return StringMatcher |
| 86 | + */ |
83 | 87 | public function getMangler() { |
84 | 88 | $mangler = $this->mangler; |
85 | 89 | |
86 | 90 | if ( !$mangler ) { |
| 91 | + // TODO: Shouldn't this set $this->mangler |
87 | 92 | $mangler = StringMatcher::emptyMatcher(); |
88 | 93 | } |
89 | 94 | |
— | — | @@ -97,6 +102,9 @@ |
98 | 103 | return null; |
99 | 104 | } |
100 | 105 | |
| 106 | + /** |
| 107 | + * @return SimpleFormatWriter |
| 108 | + */ |
101 | 109 | public function getWriter() { |
102 | 110 | return new SimpleFormatWriter( $this ); |
103 | 111 | } |
— | — | @@ -459,6 +467,11 @@ |
460 | 468 | } |
461 | 469 | } |
462 | 470 | |
| 471 | + /** |
| 472 | + * @param $label |
| 473 | + * @param $id |
| 474 | + * @return ExtensionMessageGroup |
| 475 | + */ |
463 | 476 | public static function factory( $label, $id ) { |
464 | 477 | $group = new ExtensionMessageGroup; |
465 | 478 | $group->setLabel( $label ); |
— | — | @@ -519,6 +532,9 @@ |
520 | 533 | return is_readable( $this->getMessageFileWithPath( $this->getSourceLanguage() ) ); |
521 | 534 | } |
522 | 535 | |
| 536 | + /** |
| 537 | + * @return MediaWikiMessageChecker |
| 538 | + */ |
523 | 539 | public function getChecker() { |
524 | 540 | $checker = new MediaWikiMessageChecker( $this ); |
525 | 541 | $checker->setChecks( array( |
— | — | @@ -757,6 +773,9 @@ |
758 | 774 | return $this->title; |
759 | 775 | } |
760 | 776 | |
| 777 | + /** |
| 778 | + * @return array |
| 779 | + */ |
761 | 780 | public function getDefinitions() { |
762 | 781 | $dbr = wfGetDB( DB_SLAVE ); |
763 | 782 | $tables = 'translate_sections'; |
— | — | @@ -817,6 +836,9 @@ |
818 | 837 | return $rev->getText(); |
819 | 838 | } |
820 | 839 | |
| 840 | + /** |
| 841 | + * @return MediaWikiMessageChecker |
| 842 | + */ |
821 | 843 | public function getChecker() { |
822 | 844 | $checker = new MediaWikiMessageChecker( $this ); |
823 | 845 | $checker->setChecks( array( |
— | — | @@ -916,9 +938,9 @@ |
917 | 939 | $deps[] = new GlobalDependency( 'wgTranslateEC' ); |
918 | 940 | $deps[] = new GlobalDependency( 'wgTranslateCC' ); |
919 | 941 | $deps[] = new GlobalDependency( 'wgTranslateExtensionDirectory' ); |
920 | | - $deps[] = New FileDependency( dirname( __FILE__ ) . '/groups/mediawiki-defines.txt' ); |
921 | | - $deps[] = New FileDependency( dirname( __FILE__ ) . '/groups/Wikia/extensions.txt' ); |
922 | | - $deps[] = New FileDependency( dirname( __FILE__ ) . '/groups/Toolserver/toolserver-textdomains.txt' ); |
| 942 | + $deps[] = new FileDependency( dirname( __FILE__ ) . '/groups/mediawiki-defines.txt' ); |
| 943 | + $deps[] = new FileDependency( dirname( __FILE__ ) . '/groups/Wikia/extensions.txt' ); |
| 944 | + $deps[] = new FileDependency( dirname( __FILE__ ) . '/groups/Toolserver/toolserver-textdomains.txt' ); |
923 | 945 | |
924 | 946 | if ( $wgTranslateAddMWExtensionGroups ) { |
925 | 947 | $a = new PremadeMediawikiExtensionGroups; |
Index: trunk/extensions/Translate/TranslateEditAddons.php |
— | — | @@ -212,6 +212,7 @@ |
213 | 213 | } |
214 | 214 | |
215 | 215 | /** |
| 216 | + * @param $title Title |
216 | 217 | * @return Array of the message and the language |
217 | 218 | */ |
218 | 219 | public static function figureMessage( Title $title ) { |
— | — | @@ -229,6 +230,10 @@ |
230 | 231 | return array( $key, $code ); |
231 | 232 | } |
232 | 233 | |
| 234 | + /** |
| 235 | + * @param $title Title |
| 236 | + * @return array |
| 237 | + */ |
233 | 238 | public static function getKeyCodeGroup( Title $title ) { |
234 | 239 | list( $key, $code ) = self::figureMessage( $title ); |
235 | 240 | $group = self::getMessageGroup( $title->getNamespace(), $key ); |
— | — | @@ -261,6 +266,10 @@ |
262 | 267 | return $mg; |
263 | 268 | } |
264 | 269 | |
| 270 | + /** |
| 271 | + * @param $object |
| 272 | + * @return String |
| 273 | + */ |
265 | 274 | private static function editBoxes( $object ) { |
266 | 275 | global $wgOut, $wgRequest; |
267 | 276 | |
— | — | @@ -316,7 +325,12 @@ |
317 | 326 | return true; |
318 | 327 | } |
319 | 328 | |
320 | | - /// Hook: EditPage::showEditForm:fields |
| 329 | + /** |
| 330 | + * Hook: EditPage::showEditForm:fields |
| 331 | + * @param $edit |
| 332 | + * @param $out OutputPage |
| 333 | + * @return bool |
| 334 | + */ |
321 | 335 | public static function keepFields( $edit, $out ) { |
322 | 336 | global $wgRequest; |
323 | 337 | |
— | — | @@ -329,7 +343,19 @@ |
330 | 344 | return true; |
331 | 345 | } |
332 | 346 | |
333 | | - /// Hook: ArticleSaveComplete |
| 347 | + /** |
| 348 | + * @Hook: ArticleSaveComplete |
| 349 | + * @param $article Article |
| 350 | + * @param $user User |
| 351 | + * @param $text string |
| 352 | + * @param $summary string |
| 353 | + * @param $minor bool |
| 354 | + * @param $_ |
| 355 | + * @param $_ |
| 356 | + * @param $flags |
| 357 | + * @param $revision Revision |
| 358 | + * @return bool |
| 359 | + */ |
334 | 360 | public static function onSave( $article, $user, $text, $summary, |
335 | 361 | $minor, $_, $_, $flags, $revision |
336 | 362 | ) { |
— | — | @@ -358,6 +384,11 @@ |
359 | 385 | return true; |
360 | 386 | } |
361 | 387 | |
| 388 | + /** |
| 389 | + * @param $handle MessageHandle |
| 390 | + * @param $text |
| 391 | + * @return bool |
| 392 | + */ |
362 | 393 | protected static function checkNeedsFuzzy( MessageHandle $handle, $text ) { |
363 | 394 | // Check for explicit tag. |
364 | 395 | $fuzzy = self::hasFuzzyString( $text ); |
— | — | @@ -389,6 +420,11 @@ |
390 | 421 | return $fuzzy; |
391 | 422 | } |
392 | 423 | |
| 424 | + /** |
| 425 | + * @param $title Title |
| 426 | + * @param $revision |
| 427 | + * @param $fuzzy |
| 428 | + */ |
393 | 429 | protected static function updateFuzzyTag( Title $title, $revision, $fuzzy ) { |
394 | 430 | $dbw = wfGetDB( DB_MASTER ); |
395 | 431 | |
— | — | @@ -448,6 +484,10 @@ |
449 | 485 | return true; |
450 | 486 | } |
451 | 487 | |
| 488 | + /** |
| 489 | + * @param $text string |
| 490 | + * @return string |
| 491 | + */ |
452 | 492 | public static function preserveWhitespaces( $text ) { |
453 | 493 | $text = wfEscapeWikiText( $text ); |
454 | 494 | $text = preg_replace( '/^ /m', ' ', $text ); |
— | — | @@ -457,7 +497,12 @@ |
458 | 498 | return $text; |
459 | 499 | } |
460 | 500 | |
461 | | - /// Hook: LanguageGetTranslatedLanguageNames |
| 501 | + /** |
| 502 | + * Hook: LanguageGetTranslatedLanguageNames |
| 503 | + * @param $names |
| 504 | + * @param $code |
| 505 | + * @return bool |
| 506 | + */ |
462 | 507 | public static function translateMessageDocumentationLanguage( &$names, $code ) { |
463 | 508 | global $wgTranslateDocumentationLanguageCode; |
464 | 509 | if ( $wgTranslateDocumentationLanguageCode ) { |
— | — | @@ -467,7 +512,12 @@ |
468 | 513 | return true; |
469 | 514 | } |
470 | 515 | |
471 | | - /// Hook: ArticlePrepareTextForEdit |
| 516 | + /** |
| 517 | + * Hook: ArticlePrepareTextForEdit |
| 518 | + * @param $article Article |
| 519 | + * @param $popts ParserOptions |
| 520 | + * @return bool |
| 521 | + */ |
472 | 522 | public static function disablePreSaveTransform( $article, $popts ) { |
473 | 523 | global $wgTranslateDocumentationLanguageCode; |
474 | 524 | |
— | — | @@ -481,7 +531,12 @@ |
482 | 532 | return true; |
483 | 533 | } |
484 | 534 | |
485 | | - /// Hook: ArticleContentOnDiff |
| 535 | + /** |
| 536 | + * Hook: ArticleContentOnDiff |
| 537 | + * @param $de DifferenceEngine |
| 538 | + * @param $out OutputPage |
| 539 | + * @return bool |
| 540 | + */ |
486 | 541 | public static function displayOnDiff( $de, $out ) { |
487 | 542 | $title = $de->getTitle(); |
488 | 543 | $handle = new MessageHandle( $title ); |
— | — | @@ -507,7 +562,11 @@ |
508 | 563 | return false; |
509 | 564 | } |
510 | 565 | |
511 | | - /// Hook: SpecialSearchProfiles |
| 566 | + /** |
| 567 | + * Hook: SpecialSearchProfiles |
| 568 | + * @param $profiles array |
| 569 | + * @return bool |
| 570 | + */ |
512 | 571 | public static function searchProfile( &$profiles ) { |
513 | 572 | global $wgTranslateMessageNamespaces; |
514 | 573 | $insert = array(); |
— | — | @@ -521,7 +580,15 @@ |
522 | 581 | return true; |
523 | 582 | } |
524 | 583 | |
525 | | - /// Hook: SpecialSearchProfileForm |
| 584 | + /** |
| 585 | + * Hook: SpecialSearchProfileForm |
| 586 | + * @param $search |
| 587 | + * @param $form |
| 588 | + * @param $profile |
| 589 | + * @param $term |
| 590 | + * @param $opts |
| 591 | + * @return bool |
| 592 | + */ |
526 | 593 | public static function searchProfileForm( $search, &$form, $profile, $term, $opts ) { |
527 | 594 | if ( $profile !== 'translation' ) { |
528 | 595 | return true; |
— | — | @@ -568,7 +635,13 @@ |
569 | 636 | return false; |
570 | 637 | } |
571 | 638 | |
572 | | - /// Hook: SpecialSearchSetupEngine |
| 639 | + /** |
| 640 | + * Hook: SpecialSearchSetupEngine |
| 641 | + * @param $search |
| 642 | + * @param $profile |
| 643 | + * @param $engine |
| 644 | + * @return bool |
| 645 | + */ |
573 | 646 | public static function searchProfileSetupEngine( $search, $profile, $engine ) { |
574 | 647 | if ( $profile !== 'translation' ) { |
575 | 648 | return true; |
Index: trunk/extensions/Translate/TranslateHooks.php |
— | — | @@ -63,7 +63,6 @@ |
64 | 64 | $wgLogActionsHandlers['pagetranslation/deletelnok'] = 'PageTranslationHooks::formatLogEntry'; |
65 | 65 | $wgLogActionsHandlers['pagetranslation/deletefnok'] = 'PageTranslationHooks::formatLogEntry'; |
66 | 66 | |
67 | | - |
68 | 67 | global $wgJobClasses; |
69 | 68 | $wgJobClasses['RenderJob'] = 'RenderJob'; |
70 | 69 | $wgJobClasses['MoveJob'] = 'MoveJob'; |
— | — | @@ -154,7 +153,11 @@ |
155 | 154 | return true; |
156 | 155 | } |
157 | 156 | |
158 | | - /// Hook: UnitTestsList |
| 157 | + /** |
| 158 | + * Hook: UnitTestsList |
| 159 | + * @param $files array |
| 160 | + * @return bool |
| 161 | + */ |
159 | 162 | public static function setupUnitTests( &$files ) { |
160 | 163 | $testDir = dirname( __FILE__ ) . '/tests/'; |
161 | 164 | $files[] = $testDir . 'MessageGroupBaseTest.php'; |
— | — | @@ -179,14 +182,17 @@ |
180 | 183 | return true; |
181 | 184 | } |
182 | 185 | |
183 | | - /// Hook: ParserTestTables |
| 186 | + /** |
| 187 | + * Hook: ParserTestTables |
| 188 | + * @param $tables array |
| 189 | + * @return bool |
| 190 | + */ |
184 | 191 | public static function parserTestTables( &$tables ) { |
185 | 192 | $tables[] = 'revtag'; |
186 | 193 | $tables[] = 'translate_groupstats'; |
187 | 194 | return true; |
188 | 195 | } |
189 | 196 | |
190 | | - |
191 | 197 | /** |
192 | 198 | * Set the right page content language for message group translations ("Page/xx"). |
193 | 199 | * Hook: PageContentLanguage |
Index: trunk/extensions/Translate/TranslateTasks.php |
— | — | @@ -102,11 +102,22 @@ |
103 | 103 | return false; |
104 | 104 | } |
105 | 105 | |
106 | | - protected $group; ///< \type{MessageGroup} Message group. |
107 | | - protected $collection; ///< \type{MessageCollection} Messages. |
108 | | - protected $options; ///< \type{TaskOptions} Options. |
| 106 | + /** |
| 107 | + * @var MessageGroup |
| 108 | + */ |
| 109 | + protected $group; |
109 | 110 | |
110 | 111 | /** |
| 112 | + * @var MessageCollection Options |
| 113 | + */ |
| 114 | + protected $collection; |
| 115 | + |
| 116 | + /** |
| 117 | + * @var TaskOptions Options |
| 118 | + */ |
| 119 | + protected $options; |
| 120 | + |
| 121 | + /** |
111 | 122 | * Constructor. |
112 | 123 | * @param $group \type{MessageGroup} Message group. |
113 | 124 | * @param $options \type{TaskOptions} Options. |
Index: trunk/extensions/Translate/utils/TranslationEditPage.php |
— | — | @@ -46,6 +46,7 @@ |
47 | 47 | |
48 | 48 | /** |
49 | 49 | * Change the title of the page we are working on. |
| 50 | + * @param $title Title |
50 | 51 | */ |
51 | 52 | public function setTitle( Title $title ) { $this->title = $title; } |
52 | 53 | /** |
Index: trunk/extensions/Translate/utils/UserToggles.php |
— | — | @@ -46,6 +46,8 @@ |
47 | 47 | * Add 'translate-editlangs' preference. |
48 | 48 | * These are the languages also shown when translating. |
49 | 49 | * |
| 50 | + * @param $user User |
| 51 | + * @param $preferences array |
50 | 52 | * @return \bool true |
51 | 53 | */ |
52 | 54 | public static function translationAssistLanguages( $user, &$preferences ) { |
— | — | @@ -73,6 +75,8 @@ |
74 | 76 | * Add 'translate-jsedit' preference. |
75 | 77 | * An option to disable the javascript edit interface. |
76 | 78 | * |
| 79 | + * @param $user User |
| 80 | + * @param $preferences array |
77 | 81 | * @return \bool true |
78 | 82 | */ |
79 | 83 | public static function translationJsedit( $user, &$preferences ) { |
Index: trunk/extensions/Translate/utils/MessageWebImporter.php |
— | — | @@ -439,6 +439,9 @@ |
440 | 440 | return array( 'translate-manage-import-fuzzy', "\n" . $text ); |
441 | 441 | } |
442 | 442 | |
| 443 | + /** |
| 444 | + * @return User |
| 445 | + */ |
443 | 446 | public static function getFuzzyBot() { |
444 | 447 | global $wgTranslateFuzzyBotName; |
445 | 448 | |
Index: trunk/extensions/Translate/utils/Font.php |
— | — | @@ -93,6 +93,9 @@ |
94 | 94 | return $chosen; |
95 | 95 | } |
96 | 96 | |
| 97 | + /** |
| 98 | + * @return BagOStuff |
| 99 | + */ |
97 | 100 | protected static function getCache() { |
98 | 101 | return wfGetCache( CACHE_ANYTHING ); |
99 | 102 | } |
Index: trunk/extensions/Translate/utils/StringMatcher.php |
— | — | @@ -101,6 +101,10 @@ |
102 | 102 | } |
103 | 103 | } |
104 | 104 | |
| 105 | + /** |
| 106 | + * @param $string string |
| 107 | + * @return bool |
| 108 | + */ |
105 | 109 | public function match( $string ) { |
106 | 110 | if ( in_array( $string, $this->aExact ) ) { |
107 | 111 | return true; |
Index: trunk/extensions/Translate/utils/MessageGroupStats.php |
— | — | @@ -186,8 +186,6 @@ |
187 | 187 | return $flattened; |
188 | 188 | } |
189 | 189 | |
190 | | - |
191 | | - |
192 | 190 | protected static function forGroupInternal( $group, $stats = array() ) { |
193 | 191 | $id = $group->getId(); |
194 | 192 | $res = self::selectRowsIdLang( $id, null ); |
Index: trunk/extensions/Translate/utils/TranslateYaml.php |
— | — | @@ -56,7 +56,11 @@ |
57 | 57 | return $base; |
58 | 58 | } |
59 | 59 | |
60 | | - |
| 60 | + /** |
| 61 | + * @param $text string |
| 62 | + * @return array |
| 63 | + * @throws MWException |
| 64 | + */ |
61 | 65 | public static function loadString( $text ) { |
62 | 66 | global $wgTranslateYamlLibrary; |
63 | 67 | |
— | — | @@ -76,6 +80,10 @@ |
77 | 81 | } |
78 | 82 | } |
79 | 83 | |
| 84 | + /** |
| 85 | + * @param $yaml array |
| 86 | + * @return array |
| 87 | + */ |
80 | 88 | public static function fixSyckBooleans( &$yaml ) { |
81 | 89 | foreach ( $yaml as &$value ) { |
82 | 90 | if ( is_array( $value ) ) { |
— | — | @@ -87,6 +95,10 @@ |
88 | 96 | return $yaml; |
89 | 97 | } |
90 | 98 | |
| 99 | + /** |
| 100 | + * @param $yaml array |
| 101 | + * @return array |
| 102 | + */ |
91 | 103 | public static function fixSpycSpaces( &$yaml ) { |
92 | 104 | foreach ( $yaml as $key => &$value ) { |
93 | 105 | if ( is_array( $value ) ) { |
— | — | @@ -172,8 +184,8 @@ |
173 | 185 | 'sub deutf8 {' . |
174 | 186 | 'if(ref($_[0]) eq "HASH") {' . |
175 | 187 | 'return { map { deutf8($_) } %{$_[0]} };' . |
176 | | - '} elsif(ref($_[0]) eq "ARRAY") {' . |
177 | | - 'return [ map { deutf8($_) } @{$_[0]} ];' . |
| 188 | + '} elsif(ref($_[0]) eq "ARRAY") {' . |
| 189 | + 'return [ map { deutf8($_) } @{$_[0]} ];' . |
178 | 190 | '} else {' . |
179 | 191 | 'my $s = $_[0];' . |
180 | 192 | 'utf8::decode($s);' . |
Index: trunk/extensions/Translate/utils/TranslationHelpers.php |
— | — | @@ -226,6 +226,9 @@ |
227 | 227 | } |
228 | 228 | } |
229 | 229 | |
| 230 | + /** |
| 231 | + * @return array |
| 232 | + */ |
230 | 233 | public function getBoxNames() { |
231 | 234 | return array( |
232 | 235 | 'other-languages' => array( $this, 'getOtherLanguagesBox' ), |
— | — | @@ -323,6 +326,11 @@ |
324 | 327 | return $result; |
325 | 328 | } |
326 | 329 | |
| 330 | + /** |
| 331 | + * @param $async bool |
| 332 | + * @return null|string |
| 333 | + * @throws MWException |
| 334 | + */ |
327 | 335 | public function getSuggestionBox( $async = false ) { |
328 | 336 | global $wgTranslateTranslationServices; |
329 | 337 | |
Index: trunk/extensions/Translate/utils/MessageGroupCache.php |
— | — | @@ -14,10 +14,17 @@ |
15 | 15 | * of the actual format. |
16 | 16 | */ |
17 | 17 | class MessageGroupCache { |
18 | | - /// \string |
| 18 | + |
| 19 | + /** |
| 20 | + * @var MessageGroup |
| 21 | + */ |
19 | 22 | protected $group; |
20 | | - /// CdbReader |
| 23 | + |
| 24 | + /** |
| 25 | + * @var CdbReader |
| 26 | + */ |
21 | 27 | protected $cache; |
| 28 | + |
22 | 29 | /// \string |
23 | 30 | protected $code; |
24 | 31 | |
Index: trunk/extensions/Translate/utils/HTMLJsSelectToInputField.php |
— | — | @@ -11,6 +11,11 @@ |
12 | 12 | * Implementation of JsSelectToInput class which is extends HTMLTextField. |
13 | 13 | */ |
14 | 14 | class HTMLJsSelectToInputField extends HTMLTextField { |
| 15 | + |
| 16 | + /** |
| 17 | + * @param $value |
| 18 | + * @return string |
| 19 | + */ |
15 | 20 | function getInputHTML( $value ) { |
16 | 21 | $input = parent::getInputHTML( $value ); |
17 | 22 | |
— | — | @@ -21,6 +26,10 @@ |
22 | 27 | return $input; |
23 | 28 | } |
24 | 29 | |
| 30 | + /** |
| 31 | + * @param $value |
| 32 | + * @return array |
| 33 | + */ |
25 | 34 | function tidy( $value ) { |
26 | 35 | $value = array_map( 'trim', explode( ',', $value ) ); |
27 | 36 | $value = array_unique( array_filter( $value ) ); |
— | — | @@ -28,6 +37,11 @@ |
29 | 38 | return $value; |
30 | 39 | } |
31 | 40 | |
| 41 | + /** |
| 42 | + * @param $value |
| 43 | + * @param $alldata |
| 44 | + * @return bool|String |
| 45 | + */ |
32 | 46 | function validate( $value, $alldata ) { |
33 | 47 | $p = parent::validate( $value, $alldata ); |
34 | 48 | |
— | — | @@ -55,6 +69,11 @@ |
56 | 70 | return true; |
57 | 71 | } |
58 | 72 | |
| 73 | + /** |
| 74 | + * @param $value |
| 75 | + * @param $alldata |
| 76 | + * @return string |
| 77 | + */ |
59 | 78 | function filter( $value, $alldata ) { |
60 | 79 | $value = parent::filter( $value, $alldata ); |
61 | 80 | return implode( ', ', $this->tidy( $value ) ); |
Index: trunk/extensions/Translate/RcFilter.php |
— | — | @@ -24,6 +24,10 @@ |
25 | 25 | * documentation of the function parameters. |
26 | 26 | * |
27 | 27 | * Appends SQL filter conditions into $conds. |
| 28 | + * @param $conds array |
| 29 | + * @param $tables array|stromg |
| 30 | + * @param $join_conds array |
| 31 | + * @param $opts |
28 | 32 | * @return \bool true |
29 | 33 | */ |
30 | 34 | public static function translationFilter( &$conds, &$tables, &$join_conds, $opts ) { |