@@ -411,6 +411,114 @@ public function testGetLanguageFromSrcLangAttributeXliff2(): void
411411 $ this ->assertSame ('en ' , $ parser ->getLanguage ());
412412 }
413413
414+ public function testGetLanguageFromFileNamePrefixConvention (): void
415+ {
416+ $ parser = new XliffParser ($ this ->prefixedXliffFile ); // de.messages.xlf
417+ $ this ->assertSame ('de ' , $ parser ->getLanguageFromFileName ());
418+ }
419+
420+ public function testGetLanguageFromFileNameSuffixConvention (): void
421+ {
422+ $ parser = new XliffParser ($ this ->targetLanguageXliffFile ); // messages.de.xlf
423+ $ this ->assertSame ('de ' , $ parser ->getLanguageFromFileName ());
424+ }
425+
426+ public function testGetLanguageFromFileNamePrefixConventionWithRegion (): void
427+ {
428+ $ file = $ this ->tempDir .'/de_DE.locallang.xlf ' ;
429+ file_put_contents ($ file , $ this ->prefixedXliffContent );
430+
431+ $ parser = new XliffParser ($ file );
432+ $ this ->assertSame ('de ' , $ parser ->getLanguageFromFileName ());
433+ }
434+
435+ public function testGetLanguageFromFileNameSuffixConventionWithRegion (): void
436+ {
437+ $ file = $ this ->tempDir .'/messages.de_DE.xlf ' ;
438+ file_put_contents ($ file , $ this ->targetLanguageXliffContent );
439+
440+ $ parser = new XliffParser ($ file );
441+ $ this ->assertSame ('de ' , $ parser ->getLanguageFromFileName ());
442+ }
443+
444+ public function testGetLanguageFromFileNameReturnsNullForSourceFile (): void
445+ {
446+ $ parser = new XliffParser ($ this ->validXliffFile ); // messages.xlf — no locale
447+ $ this ->assertNull ($ parser ->getLanguageFromFileName ());
448+ }
449+
450+ public function testGetLanguageFromFileNameReturnsNullForXliff2SourceFile (): void
451+ {
452+ $ parser = new XliffParser ($ this ->xliff2File ); // messages_v2.xlf — no locale
453+ $ this ->assertNull ($ parser ->getLanguageFromFileName ());
454+ }
455+
456+ public function testGetTargetLanguageReturnsValueWhenSet (): void
457+ {
458+ $ parser = new XliffParser ($ this ->targetLanguageXliffFile ); // target-language="de"
459+ $ this ->assertSame ('de ' , $ parser ->getTargetLanguage ());
460+ }
461+
462+ public function testGetTargetLanguageReturnsNullWhenNotSet (): void
463+ {
464+ $ parser = new XliffParser ($ this ->validXliffFile ); // no target-language attribute
465+ $ this ->assertNull ($ parser ->getTargetLanguage ());
466+ }
467+
468+ public function testGetTargetLanguageXliff2ReturnsValueWhenSet (): void
469+ {
470+ $ parser = new XliffParser ($ this ->xliff2TargetFile ); // trgLang="de"
471+ $ this ->assertSame ('de ' , $ parser ->getTargetLanguage ());
472+ }
473+
474+ public function testGetTargetLanguageXliff2ReturnsNullWhenNotSet (): void
475+ {
476+ $ parser = new XliffParser ($ this ->xliff2File ); // no trgLang
477+ $ this ->assertNull ($ parser ->getTargetLanguage ());
478+ }
479+
480+ public function testGetTargetLanguageStripsRegionSuffixWithHyphen (): void
481+ {
482+ $ file = $ this ->tempDir .'/region_hyphen.xlf ' ;
483+ file_put_contents ($ file , <<<'EOT'
484+ <?xml version="1.0" encoding="utf-8"?>
485+ <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
486+ <file source-language="en" target-language="de-AT" datatype="plaintext" original="region_hyphen.xlf">
487+ <body><trans-unit id="k"><source>x</source></trans-unit></body>
488+ </file>
489+ </xliff>
490+ EOT);
491+ $ this ->assertSame ('de ' , (new XliffParser ($ file ))->getTargetLanguage ());
492+ }
493+
494+ public function testGetTargetLanguageStripsRegionSuffixWithUnderscore (): void
495+ {
496+ $ file = $ this ->tempDir .'/region_underscore.xlf ' ;
497+ file_put_contents ($ file , <<<'EOT'
498+ <?xml version="1.0" encoding="utf-8"?>
499+ <xliff xmlns="urn:oasis:names:tc:xliff:document:1.2" version="1.2">
500+ <file source-language="en" target-language="de_AT" datatype="plaintext" original="region_underscore.xlf">
501+ <body><trans-unit id="k"><source>x</source></trans-unit></body>
502+ </file>
503+ </xliff>
504+ EOT);
505+ $ this ->assertSame ('de ' , (new XliffParser ($ file ))->getTargetLanguage ());
506+ }
507+
508+ public function testGetTargetLanguageXliff2StripsRegionSuffix (): void
509+ {
510+ $ file = $ this ->tempDir .'/region_v2.xlf ' ;
511+ file_put_contents ($ file , <<<'EOT'
512+ <?xml version="1.0" encoding="utf-8"?>
513+ <xliff xmlns="urn:oasis:names:tc:xliff:document:2.0" version="2.0" srcLang="en" trgLang="de-AT">
514+ <file id="messages">
515+ <unit id="k"><segment><source>x</source></segment></unit>
516+ </file>
517+ </xliff>
518+ EOT);
519+ $ this ->assertSame ('de ' , (new XliffParser ($ file ))->getTargetLanguage ());
520+ }
521+
414522 public function testGetContentByKeyFallsBackToSourceWhenTargetIsEmptyXliff2 (): void
415523 {
416524 $ fallbackFile = $ this ->tempDir .'/v2_fallback.xlf ' ;
0 commit comments