@@ -77,6 +77,82 @@ describe('languageDetector', () => {
7777 expect ( await res . text ( ) ) . toBe ( 'fr' )
7878 } )
7979
80+ it ( 'should fallback to language code when locale code is not in supportedLanguages' , async ( ) => {
81+ const app = createTestApp ( {
82+ supportedLanguages : [ 'en' , 'ja' ] ,
83+ fallbackLanguage : 'en' ,
84+ order : [ 'header' ] ,
85+ } )
86+
87+ const res = await app . request ( '/' , {
88+ headers : {
89+ 'accept-language' : 'ja-JP' ,
90+ } ,
91+ } )
92+ expect ( await res . text ( ) ) . toBe ( 'ja' )
93+ } )
94+
95+ it ( 'should match after multiple truncations' , async ( ) => {
96+ const app = createTestApp ( {
97+ supportedLanguages : [ 'zh-Hant' , 'en' ] ,
98+ fallbackLanguage : 'en' ,
99+ order : [ 'header' ] ,
100+ } )
101+
102+ const res = await app . request ( '/' , {
103+ headers : {
104+ 'accept-language' : 'zh-Hant-CN' ,
105+ } ,
106+ } )
107+ expect ( await res . text ( ) ) . toBe ( 'zh-Hant' )
108+ } )
109+
110+ it ( 'should fallback when truncation does not match any supported language' , async ( ) => {
111+ const app = createTestApp ( {
112+ supportedLanguages : [ 'en' , 'ja' ] ,
113+ fallbackLanguage : 'en' ,
114+ order : [ 'header' ] ,
115+ } )
116+
117+ const res = await app . request ( '/' , {
118+ headers : {
119+ 'accept-language' : 'ko-KR' ,
120+ } ,
121+ } )
122+ expect ( await res . text ( ) ) . toBe ( 'en' )
123+ } )
124+
125+ it ( 'should prefer exact match over truncated match' , async ( ) => {
126+ const app = createTestApp ( {
127+ supportedLanguages : [ 'fr' , 'fr-CA' ] ,
128+ fallbackLanguage : 'fr' ,
129+ order : [ 'header' ] ,
130+ } )
131+
132+ const res = await app . request ( '/' , {
133+ headers : {
134+ 'accept-language' : 'fr-CA' ,
135+ } ,
136+ } )
137+ expect ( await res . text ( ) ) . toBe ( 'fr-CA' )
138+ } )
139+
140+ it ( 'should handle case-insensitive truncation matching' , async ( ) => {
141+ const app = createTestApp ( {
142+ supportedLanguages : [ 'en' , 'ja' ] ,
143+ fallbackLanguage : 'en' ,
144+ order : [ 'header' ] ,
145+ ignoreCase : true ,
146+ } )
147+
148+ const res = await app . request ( '/' , {
149+ headers : {
150+ 'accept-language' : 'JA-JP' ,
151+ } ,
152+ } )
153+ expect ( await res . text ( ) ) . toBe ( 'ja' )
154+ } )
155+
80156 it ( 'should handle malformed Accept-Language headers' , async ( ) => {
81157 const app = createTestApp ( {
82158 supportedLanguages : [ 'en' , 'fr' ] ,
0 commit comments