[{"data":1,"prerenderedAt":2859},["ShallowReactive",2],{"blog-multi-language-news-apps":3},{"id":4,"title":5,"author":6,"body":7,"date":2847,"description":2848,"draft":2849,"extension":2850,"image":2851,"meta":2852,"navigation":248,"path":2853,"seo":2854,"sitemap":2855,"stem":2856,"tags":2857,"__hash__":2858},"blog\u002Fblog\u002Fmulti-language-news-apps.md","Building Multi-Language News Applications","AllNewsAPI Team",{"type":8,"value":9,"toc":2830},"minimark",[10,14,19,22,38,42,45,113,117,120,142,146,149,256,260,263,329,333,336,1110,1114,1121,1142,1145,1424,1427,1818,1822,1825,1969,1972,2002,2006,2009,2086,2090,2093,2385,2389,2392,2581,2585,2629,2633,2636,2784,2788,2791,2800,2804,2826],[11,12,13],"p",{},"Serving news content in multiple languages isn't just nice to have—it's essential. This guide will show you how to build a truly international news application using AllNewsAPI.",[15,16,18],"h2",{"id":17},"why-multi-language-matters","Why Multi-Language Matters",[11,20,21],{},"Consider these statistics:",[23,24,25,29,32,35],"ul",{},[26,27,28],"li",{},"Only 25% of internet users speak English as their first language",[26,30,31],{},"75% of consumers prefer to buy products in their native language",[26,33,34],{},"Multi-language apps see 2-3x higher engagement rates",[26,36,37],{},"Global reach opens up new markets and audiences",[15,39,41],{"id":40},"allnewsapi-language-support","AllNewsAPI Language Support",[11,43,44],{},"AllNewsAPI supports news in 22 languages across 244 countries:",[23,46,47,50,53,56,59,62,65,68,71,74,77,80,83,86,89,92,95,98,101,104,107,110],{},[26,48,49],{},"Arabic (ar)",[26,51,52],{},"Chinese (zh)",[26,54,55],{},"Dutch (nl)",[26,57,58],{},"English (en)",[26,60,61],{},"French (fr)",[26,63,64],{},"German (de)",[26,66,67],{},"Greek (el)",[26,69,70],{},"Hebrew (he)",[26,72,73],{},"Hindi (hi)",[26,75,76],{},"Italian (it)",[26,78,79],{},"Japanese (ja)",[26,81,82],{},"Korean (ko)",[26,84,85],{},"Norwegian (no)",[26,87,88],{},"Polish (pl)",[26,90,91],{},"Portuguese (pt)",[26,93,94],{},"Romanian (ro)",[26,96,97],{},"Russian (ru)",[26,99,100],{},"Spanish (es)",[26,102,103],{},"Swedish (sv)",[26,105,106],{},"Turkish (tr)",[26,108,109],{},"Ukrainian (uk)",[26,111,112],{},"Vietnamese (vi)",[15,114,116],{"id":115},"architecture-overview","Architecture Overview",[11,118,119],{},"A well-designed multi-language news app has three key components:",[121,122,123,130,136],"ol",{},[26,124,125,129],{},[126,127,128],"strong",{},"Content Layer",": News articles in various languages",[26,131,132,135],{},[126,133,134],{},"UI Layer",": Interface text and labels",[26,137,138,141],{},[126,139,140],{},"User Preferences",": Language selection and persistence",[15,143,145],{"id":144},"step-1-setting-up-language-detection","Step 1: Setting Up Language Detection",[11,147,148],{},"First, detect the user's preferred language:",[150,151,156],"pre",{"className":152,"code":153,"language":154,"meta":155,"style":155},"language-javascript shiki shiki-themes github-light github-dark","function detectUserLanguage() {\n  \u002F\u002F Check localStorage for saved preference\n  const saved = localStorage.getItem('preferredLanguage');\n  if (saved) return saved;\n  \n  \u002F\u002F Check browser language\n  const browserLang = navigator.language.split('-')[0];\n  \n  \u002F\u002F Supported languages\n  const supported = ['ar', 'zh', 'nl', 'en', 'fr', 'de', 'el', 'he', 'hi', 'it', 'ja', 'ko', 'no', 'pl', 'pt', 'ro', 'ru', 'es', 'sv', 'tr', 'uk', 'vi'];\n  \n  \u002F\u002F Return browser language if supported, otherwise default to English\n  return supported.includes(browserLang) ? browserLang : 'en';\n}\n\nconst userLanguage = detectUserLanguage();\n","javascript","",[157,158,159,167,173,179,185,191,197,203,208,214,220,225,231,237,243,250],"code",{"__ignoreMap":155},[160,161,164],"span",{"class":162,"line":163},"line",1,[160,165,166],{},"function detectUserLanguage() {\n",[160,168,170],{"class":162,"line":169},2,[160,171,172],{},"  \u002F\u002F Check localStorage for saved preference\n",[160,174,176],{"class":162,"line":175},3,[160,177,178],{},"  const saved = localStorage.getItem('preferredLanguage');\n",[160,180,182],{"class":162,"line":181},4,[160,183,184],{},"  if (saved) return saved;\n",[160,186,188],{"class":162,"line":187},5,[160,189,190],{},"  \n",[160,192,194],{"class":162,"line":193},6,[160,195,196],{},"  \u002F\u002F Check browser language\n",[160,198,200],{"class":162,"line":199},7,[160,201,202],{},"  const browserLang = navigator.language.split('-')[0];\n",[160,204,206],{"class":162,"line":205},8,[160,207,190],{},[160,209,211],{"class":162,"line":210},9,[160,212,213],{},"  \u002F\u002F Supported languages\n",[160,215,217],{"class":162,"line":216},10,[160,218,219],{},"  const supported = ['ar', 'zh', 'nl', 'en', 'fr', 'de', 'el', 'he', 'hi', 'it', 'ja', 'ko', 'no', 'pl', 'pt', 'ro', 'ru', 'es', 'sv', 'tr', 'uk', 'vi'];\n",[160,221,223],{"class":162,"line":222},11,[160,224,190],{},[160,226,228],{"class":162,"line":227},12,[160,229,230],{},"  \u002F\u002F Return browser language if supported, otherwise default to English\n",[160,232,234],{"class":162,"line":233},13,[160,235,236],{},"  return supported.includes(browserLang) ? browserLang : 'en';\n",[160,238,240],{"class":162,"line":239},14,[160,241,242],{},"}\n",[160,244,246],{"class":162,"line":245},15,[160,247,249],{"emptyLinePlaceholder":248},true,"\n",[160,251,253],{"class":162,"line":252},16,[160,254,255],{},"const userLanguage = detectUserLanguage();\n",[15,257,259],{"id":258},"step-2-fetching-language-specific-news","Step 2: Fetching Language-Specific News",[11,261,262],{},"Use AllNewsAPI to fetch news in the user's language:",[150,264,266],{"className":152,"code":265,"language":154,"meta":155,"style":155},"async function getNewsInLanguage(language, country) {\n  const response = await fetch(\n    `https:\u002F\u002Fapi.allnewsapi.com\u002Fheadlines?apikey=${API_KEY}&lang=${language}&country=${country}`\n  );\n  \n  return await response.json();\n}\n\n\u002F\u002F Example: Get Spanish news from Spain\nconst spanishNews = await getNewsInLanguage('es', 'es');\n\n\u002F\u002F Example: Get French news from France\nconst frenchNews = await getNewsInLanguage('fr', 'fr');\n",[157,267,268,273,278,283,288,292,297,301,305,310,315,319,324],{"__ignoreMap":155},[160,269,270],{"class":162,"line":163},[160,271,272],{},"async function getNewsInLanguage(language, country) {\n",[160,274,275],{"class":162,"line":169},[160,276,277],{},"  const response = await fetch(\n",[160,279,280],{"class":162,"line":175},[160,281,282],{},"    `https:\u002F\u002Fapi.allnewsapi.com\u002Fheadlines?apikey=${API_KEY}&lang=${language}&country=${country}`\n",[160,284,285],{"class":162,"line":181},[160,286,287],{},"  );\n",[160,289,290],{"class":162,"line":187},[160,291,190],{},[160,293,294],{"class":162,"line":193},[160,295,296],{},"  return await response.json();\n",[160,298,299],{"class":162,"line":199},[160,300,242],{},[160,302,303],{"class":162,"line":205},[160,304,249],{"emptyLinePlaceholder":248},[160,306,307],{"class":162,"line":210},[160,308,309],{},"\u002F\u002F Example: Get Spanish news from Spain\n",[160,311,312],{"class":162,"line":216},[160,313,314],{},"const spanishNews = await getNewsInLanguage('es', 'es');\n",[160,316,317],{"class":162,"line":222},[160,318,249],{"emptyLinePlaceholder":248},[160,320,321],{"class":162,"line":227},[160,322,323],{},"\u002F\u002F Example: Get French news from France\n",[160,325,326],{"class":162,"line":233},[160,327,328],{},"const frenchNews = await getNewsInLanguage('fr', 'fr');\n",[15,330,332],{"id":331},"step-3-implementing-language-switching","Step 3: Implementing Language Switching",[11,334,335],{},"Create a language selector component:",[150,337,341],{"className":338,"code":339,"language":340,"meta":155,"style":155},"language-jsx shiki shiki-themes github-light github-dark","import { useState, useEffect } from 'react';\n\nfunction LanguageSelector({ currentLanguage, onLanguageChange }) {\n  const languages = [\n    { code: 'en', name: 'English', flag: '🇬🇧' },\n    { code: 'es', name: 'Español', flag: '🇪🇸' },\n    { code: 'fr', name: 'Français', flag: '🇫🇷' },\n    { code: 'de', name: 'Deutsch', flag: '🇩🇪' },\n    { code: 'it', name: 'Italiano', flag: '🇮🇹' },\n    { code: 'pt', name: 'Português', flag: '🇵🇹' },\n    { code: 'ru', name: 'Русский', flag: '🇷🇺' },\n    { code: 'ar', name: 'العربية', flag: '🇸🇦' },\n    { code: 'zh', name: '中文', flag: '🇨🇳' },\n    { code: 'ja', name: '日本語', flag: '🇯🇵' },\n    { code: 'ko', name: '한국어', flag: '🇰🇷' },\n    { code: 'hi', name: 'हिन्दी', flag: '🇮🇳' },\n    { code: 'nl', name: 'Nederlands', flag: '🇳🇱' },\n    { code: 'sv', name: 'Svenska', flag: '🇸🇪' },\n    { code: 'no', name: 'Norsk', flag: '🇳🇴' },\n    { code: 'el', name: 'Ελληνικά', flag: '🇬🇷' },\n    { code: 'he', name: 'עברית', flag: '🇮🇱' },\n    { code: 'pl', name: 'Polski', flag: '🇵🇱' },\n    { code: 'ro', name: 'Română', flag: '🇷🇴' },\n    { code: 'tr', name: 'Türkçe', flag: '🇹🇷' },\n    { code: 'uk', name: 'Українська', flag: '🇺🇦' },\n    { code: 'vi', name: 'Tiếng Việt', flag: '🇻🇳' }\n  ];\n\n  const handleChange = (langCode) => {\n    localStorage.setItem('preferredLanguage', langCode);\n    onLanguageChange(langCode);\n  };\n\n  return (\n    \u003Cdiv className=\"language-selector\">\n      \u003Cselect \n        value={currentLanguage} \n        onChange={(e) => handleChange(e.target.value)}\n      >\n        {languages.map(lang => (\n          \u003Coption key={lang.code} value={lang.code}>\n            {lang.flag} {lang.name}\n          \u003C\u002Foption>\n        ))}\n      \u003C\u002Fselect>\n    \u003C\u002Fdiv>\n  );\n}\n\nexport default LanguageSelector;\n","jsx",[157,342,343,363,367,392,407,430,449,468,487,506,525,544,563,582,601,620,639,659,679,699,719,739,759,779,799,819,840,846,851,876,894,903,909,914,923,945,957,968,991,997,1016,1041,1047,1057,1063,1073,1083,1088,1093,1098],{"__ignoreMap":155},[160,344,345,349,353,356,360],{"class":162,"line":163},[160,346,348],{"class":347},"szBVR","import",[160,350,352],{"class":351},"sVt8B"," { useState, useEffect } ",[160,354,355],{"class":347},"from",[160,357,359],{"class":358},"sZZnC"," 'react'",[160,361,362],{"class":351},";\n",[160,364,365],{"class":162,"line":169},[160,366,249],{"emptyLinePlaceholder":248},[160,368,369,372,376,379,383,386,389],{"class":162,"line":175},[160,370,371],{"class":347},"function",[160,373,375],{"class":374},"sScJk"," LanguageSelector",[160,377,378],{"class":351},"({ ",[160,380,382],{"class":381},"s4XuR","currentLanguage",[160,384,385],{"class":351},", ",[160,387,388],{"class":381},"onLanguageChange",[160,390,391],{"class":351}," }) {\n",[160,393,394,397,401,404],{"class":162,"line":181},[160,395,396],{"class":347},"  const",[160,398,400],{"class":399},"sj4cs"," languages",[160,402,403],{"class":347}," =",[160,405,406],{"class":351}," [\n",[160,408,409,412,415,418,421,424,427],{"class":162,"line":187},[160,410,411],{"class":351},"    { code: ",[160,413,414],{"class":358},"'en'",[160,416,417],{"class":351},", name: ",[160,419,420],{"class":358},"'English'",[160,422,423],{"class":351},", flag: ",[160,425,426],{"class":358},"'🇬🇧'",[160,428,429],{"class":351}," },\n",[160,431,432,434,437,439,442,444,447],{"class":162,"line":193},[160,433,411],{"class":351},[160,435,436],{"class":358},"'es'",[160,438,417],{"class":351},[160,440,441],{"class":358},"'Español'",[160,443,423],{"class":351},[160,445,446],{"class":358},"'🇪🇸'",[160,448,429],{"class":351},[160,450,451,453,456,458,461,463,466],{"class":162,"line":199},[160,452,411],{"class":351},[160,454,455],{"class":358},"'fr'",[160,457,417],{"class":351},[160,459,460],{"class":358},"'Français'",[160,462,423],{"class":351},[160,464,465],{"class":358},"'🇫🇷'",[160,467,429],{"class":351},[160,469,470,472,475,477,480,482,485],{"class":162,"line":205},[160,471,411],{"class":351},[160,473,474],{"class":358},"'de'",[160,476,417],{"class":351},[160,478,479],{"class":358},"'Deutsch'",[160,481,423],{"class":351},[160,483,484],{"class":358},"'🇩🇪'",[160,486,429],{"class":351},[160,488,489,491,494,496,499,501,504],{"class":162,"line":210},[160,490,411],{"class":351},[160,492,493],{"class":358},"'it'",[160,495,417],{"class":351},[160,497,498],{"class":358},"'Italiano'",[160,500,423],{"class":351},[160,502,503],{"class":358},"'🇮🇹'",[160,505,429],{"class":351},[160,507,508,510,513,515,518,520,523],{"class":162,"line":216},[160,509,411],{"class":351},[160,511,512],{"class":358},"'pt'",[160,514,417],{"class":351},[160,516,517],{"class":358},"'Português'",[160,519,423],{"class":351},[160,521,522],{"class":358},"'🇵🇹'",[160,524,429],{"class":351},[160,526,527,529,532,534,537,539,542],{"class":162,"line":222},[160,528,411],{"class":351},[160,530,531],{"class":358},"'ru'",[160,533,417],{"class":351},[160,535,536],{"class":358},"'Русский'",[160,538,423],{"class":351},[160,540,541],{"class":358},"'🇷🇺'",[160,543,429],{"class":351},[160,545,546,548,551,553,556,558,561],{"class":162,"line":227},[160,547,411],{"class":351},[160,549,550],{"class":358},"'ar'",[160,552,417],{"class":351},[160,554,555],{"class":358},"'العربية'",[160,557,423],{"class":351},[160,559,560],{"class":358},"'🇸🇦'",[160,562,429],{"class":351},[160,564,565,567,570,572,575,577,580],{"class":162,"line":233},[160,566,411],{"class":351},[160,568,569],{"class":358},"'zh'",[160,571,417],{"class":351},[160,573,574],{"class":358},"'中文'",[160,576,423],{"class":351},[160,578,579],{"class":358},"'🇨🇳'",[160,581,429],{"class":351},[160,583,584,586,589,591,594,596,599],{"class":162,"line":239},[160,585,411],{"class":351},[160,587,588],{"class":358},"'ja'",[160,590,417],{"class":351},[160,592,593],{"class":358},"'日本語'",[160,595,423],{"class":351},[160,597,598],{"class":358},"'🇯🇵'",[160,600,429],{"class":351},[160,602,603,605,608,610,613,615,618],{"class":162,"line":245},[160,604,411],{"class":351},[160,606,607],{"class":358},"'ko'",[160,609,417],{"class":351},[160,611,612],{"class":358},"'한국어'",[160,614,423],{"class":351},[160,616,617],{"class":358},"'🇰🇷'",[160,619,429],{"class":351},[160,621,622,624,627,629,632,634,637],{"class":162,"line":252},[160,623,411],{"class":351},[160,625,626],{"class":358},"'hi'",[160,628,417],{"class":351},[160,630,631],{"class":358},"'हिन्दी'",[160,633,423],{"class":351},[160,635,636],{"class":358},"'🇮🇳'",[160,638,429],{"class":351},[160,640,642,644,647,649,652,654,657],{"class":162,"line":641},17,[160,643,411],{"class":351},[160,645,646],{"class":358},"'nl'",[160,648,417],{"class":351},[160,650,651],{"class":358},"'Nederlands'",[160,653,423],{"class":351},[160,655,656],{"class":358},"'🇳🇱'",[160,658,429],{"class":351},[160,660,662,664,667,669,672,674,677],{"class":162,"line":661},18,[160,663,411],{"class":351},[160,665,666],{"class":358},"'sv'",[160,668,417],{"class":351},[160,670,671],{"class":358},"'Svenska'",[160,673,423],{"class":351},[160,675,676],{"class":358},"'🇸🇪'",[160,678,429],{"class":351},[160,680,682,684,687,689,692,694,697],{"class":162,"line":681},19,[160,683,411],{"class":351},[160,685,686],{"class":358},"'no'",[160,688,417],{"class":351},[160,690,691],{"class":358},"'Norsk'",[160,693,423],{"class":351},[160,695,696],{"class":358},"'🇳🇴'",[160,698,429],{"class":351},[160,700,702,704,707,709,712,714,717],{"class":162,"line":701},20,[160,703,411],{"class":351},[160,705,706],{"class":358},"'el'",[160,708,417],{"class":351},[160,710,711],{"class":358},"'Ελληνικά'",[160,713,423],{"class":351},[160,715,716],{"class":358},"'🇬🇷'",[160,718,429],{"class":351},[160,720,722,724,727,729,732,734,737],{"class":162,"line":721},21,[160,723,411],{"class":351},[160,725,726],{"class":358},"'he'",[160,728,417],{"class":351},[160,730,731],{"class":358},"'עברית'",[160,733,423],{"class":351},[160,735,736],{"class":358},"'🇮🇱'",[160,738,429],{"class":351},[160,740,742,744,747,749,752,754,757],{"class":162,"line":741},22,[160,743,411],{"class":351},[160,745,746],{"class":358},"'pl'",[160,748,417],{"class":351},[160,750,751],{"class":358},"'Polski'",[160,753,423],{"class":351},[160,755,756],{"class":358},"'🇵🇱'",[160,758,429],{"class":351},[160,760,762,764,767,769,772,774,777],{"class":162,"line":761},23,[160,763,411],{"class":351},[160,765,766],{"class":358},"'ro'",[160,768,417],{"class":351},[160,770,771],{"class":358},"'Română'",[160,773,423],{"class":351},[160,775,776],{"class":358},"'🇷🇴'",[160,778,429],{"class":351},[160,780,782,784,787,789,792,794,797],{"class":162,"line":781},24,[160,783,411],{"class":351},[160,785,786],{"class":358},"'tr'",[160,788,417],{"class":351},[160,790,791],{"class":358},"'Türkçe'",[160,793,423],{"class":351},[160,795,796],{"class":358},"'🇹🇷'",[160,798,429],{"class":351},[160,800,802,804,807,809,812,814,817],{"class":162,"line":801},25,[160,803,411],{"class":351},[160,805,806],{"class":358},"'uk'",[160,808,417],{"class":351},[160,810,811],{"class":358},"'Українська'",[160,813,423],{"class":351},[160,815,816],{"class":358},"'🇺🇦'",[160,818,429],{"class":351},[160,820,822,824,827,829,832,834,837],{"class":162,"line":821},26,[160,823,411],{"class":351},[160,825,826],{"class":358},"'vi'",[160,828,417],{"class":351},[160,830,831],{"class":358},"'Tiếng Việt'",[160,833,423],{"class":351},[160,835,836],{"class":358},"'🇻🇳'",[160,838,839],{"class":351}," }\n",[160,841,843],{"class":162,"line":842},27,[160,844,845],{"class":351},"  ];\n",[160,847,849],{"class":162,"line":848},28,[160,850,249],{"emptyLinePlaceholder":248},[160,852,854,856,859,861,864,867,870,873],{"class":162,"line":853},29,[160,855,396],{"class":347},[160,857,858],{"class":374}," handleChange",[160,860,403],{"class":347},[160,862,863],{"class":351}," (",[160,865,866],{"class":381},"langCode",[160,868,869],{"class":351},") ",[160,871,872],{"class":347},"=>",[160,874,875],{"class":351}," {\n",[160,877,879,882,885,888,891],{"class":162,"line":878},30,[160,880,881],{"class":351},"    localStorage.",[160,883,884],{"class":374},"setItem",[160,886,887],{"class":351},"(",[160,889,890],{"class":358},"'preferredLanguage'",[160,892,893],{"class":351},", langCode);\n",[160,895,897,900],{"class":162,"line":896},31,[160,898,899],{"class":374},"    onLanguageChange",[160,901,902],{"class":351},"(langCode);\n",[160,904,906],{"class":162,"line":905},32,[160,907,908],{"class":351},"  };\n",[160,910,912],{"class":162,"line":911},33,[160,913,249],{"emptyLinePlaceholder":248},[160,915,917,920],{"class":162,"line":916},34,[160,918,919],{"class":347},"  return",[160,921,922],{"class":351}," (\n",[160,924,926,929,933,936,939,942],{"class":162,"line":925},35,[160,927,928],{"class":351},"    \u003C",[160,930,932],{"class":931},"s9eBZ","div",[160,934,935],{"class":374}," className",[160,937,938],{"class":347},"=",[160,940,941],{"class":358},"\"language-selector\"",[160,943,944],{"class":351},">\n",[160,946,948,951,954],{"class":162,"line":947},36,[160,949,950],{"class":351},"      \u003C",[160,952,953],{"class":931},"select",[160,955,956],{"class":351}," \n",[160,958,960,963,965],{"class":162,"line":959},37,[160,961,962],{"class":374},"        value",[160,964,938],{"class":347},[160,966,967],{"class":351},"{currentLanguage} \n",[160,969,971,974,976,979,982,984,986,988],{"class":162,"line":970},38,[160,972,973],{"class":374},"        onChange",[160,975,938],{"class":347},[160,977,978],{"class":351},"{(",[160,980,981],{"class":381},"e",[160,983,869],{"class":351},[160,985,872],{"class":347},[160,987,858],{"class":374},[160,989,990],{"class":351},"(e.target.value)}\n",[160,992,994],{"class":162,"line":993},39,[160,995,996],{"class":351},"      >\n",[160,998,1000,1003,1006,1008,1011,1014],{"class":162,"line":999},40,[160,1001,1002],{"class":351},"        {languages.",[160,1004,1005],{"class":374},"map",[160,1007,887],{"class":351},[160,1009,1010],{"class":381},"lang",[160,1012,1013],{"class":347}," =>",[160,1015,922],{"class":351},[160,1017,1019,1022,1025,1028,1030,1033,1036,1038],{"class":162,"line":1018},41,[160,1020,1021],{"class":351},"          \u003C",[160,1023,1024],{"class":931},"option",[160,1026,1027],{"class":374}," key",[160,1029,938],{"class":347},[160,1031,1032],{"class":351},"{lang.code} ",[160,1034,1035],{"class":374},"value",[160,1037,938],{"class":347},[160,1039,1040],{"class":351},"{lang.code}>\n",[160,1042,1044],{"class":162,"line":1043},42,[160,1045,1046],{"class":351},"            {lang.flag} {lang.name}\n",[160,1048,1050,1053,1055],{"class":162,"line":1049},43,[160,1051,1052],{"class":351},"          \u003C\u002F",[160,1054,1024],{"class":931},[160,1056,944],{"class":351},[160,1058,1060],{"class":162,"line":1059},44,[160,1061,1062],{"class":351},"        ))}\n",[160,1064,1066,1069,1071],{"class":162,"line":1065},45,[160,1067,1068],{"class":351},"      \u003C\u002F",[160,1070,953],{"class":931},[160,1072,944],{"class":351},[160,1074,1076,1079,1081],{"class":162,"line":1075},46,[160,1077,1078],{"class":351},"    \u003C\u002F",[160,1080,932],{"class":931},[160,1082,944],{"class":351},[160,1084,1086],{"class":162,"line":1085},47,[160,1087,287],{"class":351},[160,1089,1091],{"class":162,"line":1090},48,[160,1092,242],{"class":351},[160,1094,1096],{"class":162,"line":1095},49,[160,1097,249],{"emptyLinePlaceholder":248},[160,1099,1101,1104,1107],{"class":162,"line":1100},50,[160,1102,1103],{"class":347},"export",[160,1105,1106],{"class":347}," default",[160,1108,1109],{"class":351}," LanguageSelector;\n",[15,1111,1113],{"id":1112},"step-4-internationalizing-your-ui","Step 4: Internationalizing Your UI",[11,1115,1116,1117,1120],{},"Use a library like ",[157,1118,1119],{},"react-i18next"," for UI translations:",[150,1122,1126],{"className":1123,"code":1124,"language":1125,"meta":155,"style":155},"language-bash shiki shiki-themes github-light github-dark","npm install react-i18next i18next\n","bash",[157,1127,1128],{"__ignoreMap":155},[160,1129,1130,1133,1136,1139],{"class":162,"line":163},[160,1131,1132],{"class":374},"npm",[160,1134,1135],{"class":358}," install",[160,1137,1138],{"class":358}," react-i18next",[160,1140,1141],{"class":358}," i18next\n",[11,1143,1144],{},"Set up your translations:",[150,1146,1148],{"className":152,"code":1147,"language":154,"meta":155,"style":155},"\u002F\u002F i18n.js\nimport i18n from 'i18next';\nimport { initReactI18next } from 'react-i18next';\n\nconst resources = {\n  en: {\n    translation: {\n      \"headlines\": \"Headlines\",\n      \"search\": \"Search\",\n      \"readMore\": \"Read More\",\n      \"loading\": \"Loading...\",\n      \"noResults\": \"No articles found\"\n    }\n  },\n  es: {\n    translation: {\n      \"headlines\": \"Titulares\",\n      \"search\": \"Buscar\",\n      \"readMore\": \"Leer Más\",\n      \"loading\": \"Cargando...\",\n      \"noResults\": \"No se encontraron artículos\"\n    }\n  },\n  fr: {\n    translation: {\n      \"headlines\": \"Titres\",\n      \"search\": \"Rechercher\",\n      \"readMore\": \"Lire Plus\",\n      \"loading\": \"Chargement...\",\n      \"noResults\": \"Aucun article trouvé\"\n    }\n  },\n  de: {\n    translation: {\n      \"headlines\": \"Schlagzeilen\",\n      \"search\": \"Suchen\",\n      \"readMore\": \"Mehr Lesen\",\n      \"loading\": \"Laden...\",\n      \"noResults\": \"Keine Artikel gefunden\"\n    }\n  }\n  \u002F\u002F Add more languages as needed\n};\n\ni18n\n  .use(initReactI18next)\n  .init({\n    resources,\n    lng: detectUserLanguage(),\n    fallbackLng: 'en',\n    interpolation: {\n      escapeValue: false\n    }\n  });\n\nexport default i18n;\n",[157,1149,1150,1155,1160,1165,1169,1174,1179,1184,1189,1194,1199,1204,1209,1214,1219,1224,1228,1233,1238,1243,1248,1253,1257,1261,1266,1270,1275,1280,1285,1290,1295,1299,1303,1308,1312,1317,1322,1327,1332,1337,1341,1346,1351,1356,1360,1365,1370,1375,1380,1385,1390,1396,1402,1407,1413,1418],{"__ignoreMap":155},[160,1151,1152],{"class":162,"line":163},[160,1153,1154],{},"\u002F\u002F i18n.js\n",[160,1156,1157],{"class":162,"line":169},[160,1158,1159],{},"import i18n from 'i18next';\n",[160,1161,1162],{"class":162,"line":175},[160,1163,1164],{},"import { initReactI18next } from 'react-i18next';\n",[160,1166,1167],{"class":162,"line":181},[160,1168,249],{"emptyLinePlaceholder":248},[160,1170,1171],{"class":162,"line":187},[160,1172,1173],{},"const resources = {\n",[160,1175,1176],{"class":162,"line":193},[160,1177,1178],{},"  en: {\n",[160,1180,1181],{"class":162,"line":199},[160,1182,1183],{},"    translation: {\n",[160,1185,1186],{"class":162,"line":205},[160,1187,1188],{},"      \"headlines\": \"Headlines\",\n",[160,1190,1191],{"class":162,"line":210},[160,1192,1193],{},"      \"search\": \"Search\",\n",[160,1195,1196],{"class":162,"line":216},[160,1197,1198],{},"      \"readMore\": \"Read More\",\n",[160,1200,1201],{"class":162,"line":222},[160,1202,1203],{},"      \"loading\": \"Loading...\",\n",[160,1205,1206],{"class":162,"line":227},[160,1207,1208],{},"      \"noResults\": \"No articles found\"\n",[160,1210,1211],{"class":162,"line":233},[160,1212,1213],{},"    }\n",[160,1215,1216],{"class":162,"line":239},[160,1217,1218],{},"  },\n",[160,1220,1221],{"class":162,"line":245},[160,1222,1223],{},"  es: {\n",[160,1225,1226],{"class":162,"line":252},[160,1227,1183],{},[160,1229,1230],{"class":162,"line":641},[160,1231,1232],{},"      \"headlines\": \"Titulares\",\n",[160,1234,1235],{"class":162,"line":661},[160,1236,1237],{},"      \"search\": \"Buscar\",\n",[160,1239,1240],{"class":162,"line":681},[160,1241,1242],{},"      \"readMore\": \"Leer Más\",\n",[160,1244,1245],{"class":162,"line":701},[160,1246,1247],{},"      \"loading\": \"Cargando...\",\n",[160,1249,1250],{"class":162,"line":721},[160,1251,1252],{},"      \"noResults\": \"No se encontraron artículos\"\n",[160,1254,1255],{"class":162,"line":741},[160,1256,1213],{},[160,1258,1259],{"class":162,"line":761},[160,1260,1218],{},[160,1262,1263],{"class":162,"line":781},[160,1264,1265],{},"  fr: {\n",[160,1267,1268],{"class":162,"line":801},[160,1269,1183],{},[160,1271,1272],{"class":162,"line":821},[160,1273,1274],{},"      \"headlines\": \"Titres\",\n",[160,1276,1277],{"class":162,"line":842},[160,1278,1279],{},"      \"search\": \"Rechercher\",\n",[160,1281,1282],{"class":162,"line":848},[160,1283,1284],{},"      \"readMore\": \"Lire Plus\",\n",[160,1286,1287],{"class":162,"line":853},[160,1288,1289],{},"      \"loading\": \"Chargement...\",\n",[160,1291,1292],{"class":162,"line":878},[160,1293,1294],{},"      \"noResults\": \"Aucun article trouvé\"\n",[160,1296,1297],{"class":162,"line":896},[160,1298,1213],{},[160,1300,1301],{"class":162,"line":905},[160,1302,1218],{},[160,1304,1305],{"class":162,"line":911},[160,1306,1307],{},"  de: {\n",[160,1309,1310],{"class":162,"line":916},[160,1311,1183],{},[160,1313,1314],{"class":162,"line":925},[160,1315,1316],{},"      \"headlines\": \"Schlagzeilen\",\n",[160,1318,1319],{"class":162,"line":947},[160,1320,1321],{},"      \"search\": \"Suchen\",\n",[160,1323,1324],{"class":162,"line":959},[160,1325,1326],{},"      \"readMore\": \"Mehr Lesen\",\n",[160,1328,1329],{"class":162,"line":970},[160,1330,1331],{},"      \"loading\": \"Laden...\",\n",[160,1333,1334],{"class":162,"line":993},[160,1335,1336],{},"      \"noResults\": \"Keine Artikel gefunden\"\n",[160,1338,1339],{"class":162,"line":999},[160,1340,1213],{},[160,1342,1343],{"class":162,"line":1018},[160,1344,1345],{},"  }\n",[160,1347,1348],{"class":162,"line":1043},[160,1349,1350],{},"  \u002F\u002F Add more languages as needed\n",[160,1352,1353],{"class":162,"line":1049},[160,1354,1355],{},"};\n",[160,1357,1358],{"class":162,"line":1059},[160,1359,249],{"emptyLinePlaceholder":248},[160,1361,1362],{"class":162,"line":1065},[160,1363,1364],{},"i18n\n",[160,1366,1367],{"class":162,"line":1075},[160,1368,1369],{},"  .use(initReactI18next)\n",[160,1371,1372],{"class":162,"line":1085},[160,1373,1374],{},"  .init({\n",[160,1376,1377],{"class":162,"line":1090},[160,1378,1379],{},"    resources,\n",[160,1381,1382],{"class":162,"line":1095},[160,1383,1384],{},"    lng: detectUserLanguage(),\n",[160,1386,1387],{"class":162,"line":1100},[160,1388,1389],{},"    fallbackLng: 'en',\n",[160,1391,1393],{"class":162,"line":1392},51,[160,1394,1395],{},"    interpolation: {\n",[160,1397,1399],{"class":162,"line":1398},52,[160,1400,1401],{},"      escapeValue: false\n",[160,1403,1405],{"class":162,"line":1404},53,[160,1406,1213],{},[160,1408,1410],{"class":162,"line":1409},54,[160,1411,1412],{},"  });\n",[160,1414,1416],{"class":162,"line":1415},55,[160,1417,249],{"emptyLinePlaceholder":248},[160,1419,1421],{"class":162,"line":1420},56,[160,1422,1423],{},"export default i18n;\n",[11,1425,1426],{},"Use translations in your components:",[150,1428,1430],{"className":338,"code":1429,"language":340,"meta":155,"style":155},"import { useTranslation } from 'react-i18next';\n\nfunction NewsApp() {\n  const { t, i18n } = useTranslation();\n  const [articles, setArticles] = useState([]);\n  const [loading, setLoading] = useState(true);\n\n  const changeLanguage = async (lang) => {\n    i18n.changeLanguage(lang);\n    \u002F\u002F Fetch news in new language\n    const news = await getNewsInLanguage(lang, getCountryForLanguage(lang));\n    setArticles(news.articles);\n  };\n\n  return (\n    \u003Cdiv>\n      \u003Ch1>{t('headlines')}\u003C\u002Fh1>\n      \u003CLanguageSelector \n        currentLanguage={i18n.language}\n        onLanguageChange={changeLanguage}\n      \u002F>\n      {loading ? (\n        \u003Cp>{t('loading')}\u003C\u002Fp>\n      ) : articles.length === 0 ? (\n        \u003Cp>{t('noResults')}\u003C\u002Fp>\n      ) : (\n        \u003CArticleList articles={articles} \u002F>\n      )}\n    \u003C\u002Fdiv>\n  );\n}\n",[157,1431,1432,1446,1450,1460,1486,1512,1540,1544,1566,1577,1583,1608,1616,1620,1624,1630,1638,1662,1671,1681,1691,1696,1706,1728,1753,1774,1782,1797,1802,1810,1814],{"__ignoreMap":155},[160,1433,1434,1436,1439,1441,1444],{"class":162,"line":163},[160,1435,348],{"class":347},[160,1437,1438],{"class":351}," { useTranslation } ",[160,1440,355],{"class":347},[160,1442,1443],{"class":358}," 'react-i18next'",[160,1445,362],{"class":351},[160,1447,1448],{"class":162,"line":169},[160,1449,249],{"emptyLinePlaceholder":248},[160,1451,1452,1454,1457],{"class":162,"line":175},[160,1453,371],{"class":347},[160,1455,1456],{"class":374}," NewsApp",[160,1458,1459],{"class":351},"() {\n",[160,1461,1462,1464,1467,1470,1472,1475,1478,1480,1483],{"class":162,"line":181},[160,1463,396],{"class":347},[160,1465,1466],{"class":351}," { ",[160,1468,1469],{"class":399},"t",[160,1471,385],{"class":351},[160,1473,1474],{"class":399},"i18n",[160,1476,1477],{"class":351}," } ",[160,1479,938],{"class":347},[160,1481,1482],{"class":374}," useTranslation",[160,1484,1485],{"class":351},"();\n",[160,1487,1488,1490,1493,1496,1498,1501,1504,1506,1509],{"class":162,"line":187},[160,1489,396],{"class":347},[160,1491,1492],{"class":351}," [",[160,1494,1495],{"class":399},"articles",[160,1497,385],{"class":351},[160,1499,1500],{"class":399},"setArticles",[160,1502,1503],{"class":351},"] ",[160,1505,938],{"class":347},[160,1507,1508],{"class":374}," useState",[160,1510,1511],{"class":351},"([]);\n",[160,1513,1514,1516,1518,1521,1523,1526,1528,1530,1532,1534,1537],{"class":162,"line":193},[160,1515,396],{"class":347},[160,1517,1492],{"class":351},[160,1519,1520],{"class":399},"loading",[160,1522,385],{"class":351},[160,1524,1525],{"class":399},"setLoading",[160,1527,1503],{"class":351},[160,1529,938],{"class":347},[160,1531,1508],{"class":374},[160,1533,887],{"class":351},[160,1535,1536],{"class":399},"true",[160,1538,1539],{"class":351},");\n",[160,1541,1542],{"class":162,"line":199},[160,1543,249],{"emptyLinePlaceholder":248},[160,1545,1546,1548,1551,1553,1556,1558,1560,1562,1564],{"class":162,"line":205},[160,1547,396],{"class":347},[160,1549,1550],{"class":374}," changeLanguage",[160,1552,403],{"class":347},[160,1554,1555],{"class":347}," async",[160,1557,863],{"class":351},[160,1559,1010],{"class":381},[160,1561,869],{"class":351},[160,1563,872],{"class":347},[160,1565,875],{"class":351},[160,1567,1568,1571,1574],{"class":162,"line":210},[160,1569,1570],{"class":351},"    i18n.",[160,1572,1573],{"class":374},"changeLanguage",[160,1575,1576],{"class":351},"(lang);\n",[160,1578,1579],{"class":162,"line":216},[160,1580,1582],{"class":1581},"sJ8bj","    \u002F\u002F Fetch news in new language\n",[160,1584,1585,1588,1591,1593,1596,1599,1602,1605],{"class":162,"line":222},[160,1586,1587],{"class":347},"    const",[160,1589,1590],{"class":399}," news",[160,1592,403],{"class":347},[160,1594,1595],{"class":347}," await",[160,1597,1598],{"class":374}," getNewsInLanguage",[160,1600,1601],{"class":351},"(lang, ",[160,1603,1604],{"class":374},"getCountryForLanguage",[160,1606,1607],{"class":351},"(lang));\n",[160,1609,1610,1613],{"class":162,"line":227},[160,1611,1612],{"class":374},"    setArticles",[160,1614,1615],{"class":351},"(news.articles);\n",[160,1617,1618],{"class":162,"line":233},[160,1619,908],{"class":351},[160,1621,1622],{"class":162,"line":239},[160,1623,249],{"emptyLinePlaceholder":248},[160,1625,1626,1628],{"class":162,"line":245},[160,1627,919],{"class":347},[160,1629,922],{"class":351},[160,1631,1632,1634,1636],{"class":162,"line":252},[160,1633,928],{"class":351},[160,1635,932],{"class":931},[160,1637,944],{"class":351},[160,1639,1640,1642,1645,1648,1650,1652,1655,1658,1660],{"class":162,"line":641},[160,1641,950],{"class":351},[160,1643,1644],{"class":931},"h1",[160,1646,1647],{"class":351},">{",[160,1649,1469],{"class":374},[160,1651,887],{"class":351},[160,1653,1654],{"class":358},"'headlines'",[160,1656,1657],{"class":351},")}\u003C\u002F",[160,1659,1644],{"class":931},[160,1661,944],{"class":351},[160,1663,1664,1666,1669],{"class":162,"line":661},[160,1665,950],{"class":351},[160,1667,1668],{"class":399},"LanguageSelector",[160,1670,956],{"class":351},[160,1672,1673,1676,1678],{"class":162,"line":681},[160,1674,1675],{"class":374},"        currentLanguage",[160,1677,938],{"class":347},[160,1679,1680],{"class":351},"{i18n.language}\n",[160,1682,1683,1686,1688],{"class":162,"line":701},[160,1684,1685],{"class":374},"        onLanguageChange",[160,1687,938],{"class":347},[160,1689,1690],{"class":351},"{changeLanguage}\n",[160,1692,1693],{"class":162,"line":721},[160,1694,1695],{"class":351},"      \u002F>\n",[160,1697,1698,1701,1704],{"class":162,"line":741},[160,1699,1700],{"class":351},"      {loading ",[160,1702,1703],{"class":347},"?",[160,1705,922],{"class":351},[160,1707,1708,1711,1713,1715,1717,1719,1722,1724,1726],{"class":162,"line":761},[160,1709,1710],{"class":351},"        \u003C",[160,1712,11],{"class":931},[160,1714,1647],{"class":351},[160,1716,1469],{"class":374},[160,1718,887],{"class":351},[160,1720,1721],{"class":358},"'loading'",[160,1723,1657],{"class":351},[160,1725,11],{"class":931},[160,1727,944],{"class":351},[160,1729,1730,1733,1736,1739,1742,1745,1748,1751],{"class":162,"line":781},[160,1731,1732],{"class":351},"      ) ",[160,1734,1735],{"class":347},":",[160,1737,1738],{"class":351}," articles.",[160,1740,1741],{"class":399},"length",[160,1743,1744],{"class":347}," ===",[160,1746,1747],{"class":399}," 0",[160,1749,1750],{"class":347}," ?",[160,1752,922],{"class":351},[160,1754,1755,1757,1759,1761,1763,1765,1768,1770,1772],{"class":162,"line":801},[160,1756,1710],{"class":351},[160,1758,11],{"class":931},[160,1760,1647],{"class":351},[160,1762,1469],{"class":374},[160,1764,887],{"class":351},[160,1766,1767],{"class":358},"'noResults'",[160,1769,1657],{"class":351},[160,1771,11],{"class":931},[160,1773,944],{"class":351},[160,1775,1776,1778,1780],{"class":162,"line":821},[160,1777,1732],{"class":351},[160,1779,1735],{"class":347},[160,1781,922],{"class":351},[160,1783,1784,1786,1789,1792,1794],{"class":162,"line":842},[160,1785,1710],{"class":351},[160,1787,1788],{"class":399},"ArticleList",[160,1790,1791],{"class":374}," articles",[160,1793,938],{"class":347},[160,1795,1796],{"class":351},"{articles} \u002F>\n",[160,1798,1799],{"class":162,"line":848},[160,1800,1801],{"class":351},"      )}\n",[160,1803,1804,1806,1808],{"class":162,"line":853},[160,1805,1078],{"class":351},[160,1807,932],{"class":931},[160,1809,944],{"class":351},[160,1811,1812],{"class":162,"line":878},[160,1813,287],{"class":351},[160,1815,1816],{"class":162,"line":896},[160,1817,242],{"class":351},[15,1819,1821],{"id":1820},"step-5-handling-right-to-left-languages","Step 5: Handling Right-to-Left Languages",[11,1823,1824],{},"For languages like Arabic and Hebrew, implement RTL support:",[150,1826,1830],{"className":1827,"code":1828,"language":1829,"meta":155,"style":155},"language-css shiki shiki-themes github-light github-dark","\u002F* Add to your CSS *\u002F\n[dir=\"rtl\"] {\n  direction: rtl;\n  text-align: right;\n}\n\n[dir=\"rtl\"] .article-card {\n  text-align: right;\n}\n\n[dir=\"rtl\"] .button {\n  margin-left: 0;\n  margin-right: 10px;\n}\n","css",[157,1831,1832,1837,1853,1866,1878,1882,1886,1903,1913,1917,1921,1938,1950,1965],{"__ignoreMap":155},[160,1833,1834],{"class":162,"line":163},[160,1835,1836],{"class":1581},"\u002F* Add to your CSS *\u002F\n",[160,1838,1839,1842,1845,1847,1850],{"class":162,"line":169},[160,1840,1841],{"class":351},"[",[160,1843,1844],{"class":374},"dir",[160,1846,938],{"class":347},[160,1848,1849],{"class":358},"\"rtl\"",[160,1851,1852],{"class":351},"] {\n",[160,1854,1855,1858,1861,1864],{"class":162,"line":175},[160,1856,1857],{"class":399},"  direction",[160,1859,1860],{"class":351},": ",[160,1862,1863],{"class":399},"rtl",[160,1865,362],{"class":351},[160,1867,1868,1871,1873,1876],{"class":162,"line":181},[160,1869,1870],{"class":399},"  text-align",[160,1872,1860],{"class":351},[160,1874,1875],{"class":399},"right",[160,1877,362],{"class":351},[160,1879,1880],{"class":162,"line":187},[160,1881,242],{"class":351},[160,1883,1884],{"class":162,"line":193},[160,1885,249],{"emptyLinePlaceholder":248},[160,1887,1888,1890,1892,1894,1896,1898,1901],{"class":162,"line":199},[160,1889,1841],{"class":351},[160,1891,1844],{"class":374},[160,1893,938],{"class":347},[160,1895,1849],{"class":358},[160,1897,1503],{"class":351},[160,1899,1900],{"class":374},".article-card",[160,1902,875],{"class":351},[160,1904,1905,1907,1909,1911],{"class":162,"line":205},[160,1906,1870],{"class":399},[160,1908,1860],{"class":351},[160,1910,1875],{"class":399},[160,1912,362],{"class":351},[160,1914,1915],{"class":162,"line":210},[160,1916,242],{"class":351},[160,1918,1919],{"class":162,"line":216},[160,1920,249],{"emptyLinePlaceholder":248},[160,1922,1923,1925,1927,1929,1931,1933,1936],{"class":162,"line":222},[160,1924,1841],{"class":351},[160,1926,1844],{"class":374},[160,1928,938],{"class":347},[160,1930,1849],{"class":358},[160,1932,1503],{"class":351},[160,1934,1935],{"class":374},".button",[160,1937,875],{"class":351},[160,1939,1940,1943,1945,1948],{"class":162,"line":227},[160,1941,1942],{"class":399},"  margin-left",[160,1944,1860],{"class":351},[160,1946,1947],{"class":399},"0",[160,1949,362],{"class":351},[160,1951,1952,1955,1957,1960,1963],{"class":162,"line":233},[160,1953,1954],{"class":399},"  margin-right",[160,1956,1860],{"class":351},[160,1958,1959],{"class":399},"10",[160,1961,1962],{"class":347},"px",[160,1964,362],{"class":351},[160,1966,1967],{"class":162,"line":239},[160,1968,242],{"class":351},[11,1970,1971],{},"Update the HTML direction dynamically:",[150,1973,1975],{"className":152,"code":1974,"language":154,"meta":155,"style":155},"useEffect(() => {\n  const rtlLanguages = ['ar', 'he'];\n  const direction = rtlLanguages.includes(i18n.language) ? 'rtl' : 'ltr';\n  document.documentElement.setAttribute('dir', direction);\n}, [i18n.language]);\n",[157,1976,1977,1982,1987,1992,1997],{"__ignoreMap":155},[160,1978,1979],{"class":162,"line":163},[160,1980,1981],{},"useEffect(() => {\n",[160,1983,1984],{"class":162,"line":169},[160,1985,1986],{},"  const rtlLanguages = ['ar', 'he'];\n",[160,1988,1989],{"class":162,"line":175},[160,1990,1991],{},"  const direction = rtlLanguages.includes(i18n.language) ? 'rtl' : 'ltr';\n",[160,1993,1994],{"class":162,"line":181},[160,1995,1996],{},"  document.documentElement.setAttribute('dir', direction);\n",[160,1998,1999],{"class":162,"line":187},[160,2000,2001],{},"}, [i18n.language]);\n",[15,2003,2005],{"id":2004},"step-6-date-and-time-localization","Step 6: Date and Time Localization",[11,2007,2008],{},"Format dates according to the user's locale:",[150,2010,2012],{"className":152,"code":2011,"language":154,"meta":155,"style":155},"function formatDate(dateString, language) {\n  const date = new Date(dateString);\n  \n  return new Intl.DateTimeFormat(language, {\n    year: 'numeric',\n    month: 'long',\n    day: 'numeric',\n    hour: '2-digit',\n    minute: '2-digit'\n  }).format(date);\n}\n\n\u002F\u002F Usage\nconst formattedDate = formatDate('2024-11-05T10:30:00Z', 'es');\n\u002F\u002F Output: \"5 de noviembre de 2024, 10:30\"\n",[157,2013,2014,2019,2024,2028,2033,2038,2043,2048,2053,2058,2063,2067,2071,2076,2081],{"__ignoreMap":155},[160,2015,2016],{"class":162,"line":163},[160,2017,2018],{},"function formatDate(dateString, language) {\n",[160,2020,2021],{"class":162,"line":169},[160,2022,2023],{},"  const date = new Date(dateString);\n",[160,2025,2026],{"class":162,"line":175},[160,2027,190],{},[160,2029,2030],{"class":162,"line":181},[160,2031,2032],{},"  return new Intl.DateTimeFormat(language, {\n",[160,2034,2035],{"class":162,"line":187},[160,2036,2037],{},"    year: 'numeric',\n",[160,2039,2040],{"class":162,"line":193},[160,2041,2042],{},"    month: 'long',\n",[160,2044,2045],{"class":162,"line":199},[160,2046,2047],{},"    day: 'numeric',\n",[160,2049,2050],{"class":162,"line":205},[160,2051,2052],{},"    hour: '2-digit',\n",[160,2054,2055],{"class":162,"line":210},[160,2056,2057],{},"    minute: '2-digit'\n",[160,2059,2060],{"class":162,"line":216},[160,2061,2062],{},"  }).format(date);\n",[160,2064,2065],{"class":162,"line":222},[160,2066,242],{},[160,2068,2069],{"class":162,"line":227},[160,2070,249],{"emptyLinePlaceholder":248},[160,2072,2073],{"class":162,"line":233},[160,2074,2075],{},"\u002F\u002F Usage\n",[160,2077,2078],{"class":162,"line":239},[160,2079,2080],{},"const formattedDate = formatDate('2024-11-05T10:30:00Z', 'es');\n",[160,2082,2083],{"class":162,"line":245},[160,2084,2085],{},"\u002F\u002F Output: \"5 de noviembre de 2024, 10:30\"\n",[15,2087,2089],{"id":2088},"step-7-country-language-mapping","Step 7: Country-Language Mapping",[11,2091,2092],{},"Create intelligent defaults for country-language combinations:",[150,2094,2096],{"className":152,"code":2095,"language":154,"meta":155,"style":155},"const countryLanguageMap = {\n  'us': 'en',\n  'gb': 'en',\n  'es': 'es',\n  'mx': 'es',\n  'ar': 'es',\n  'fr': 'fr',\n  'de': 'de',\n  'it': 'it',\n  'pt': 'pt',\n  'br': 'pt',\n  'ru': 'ru',\n  'sa': 'ar',\n  'ae': 'ar',\n  'cn': 'zh',\n  'jp': 'ja',\n  'kr': 'ko',\n  'in': 'hi',\n  'nl': 'nl',\n  'se': 'sv',\n  'no': 'no',\n  'gr': 'el',\n  'il': 'he',\n  'ua': 'uk',\n  'ro': 'ro',\n  'pl': 'pl',\n  'tr': 'tr',\n  'vn': 'vi'\n};\n\nfunction getCountryForLanguage(language) {\n  const languageCountryMap = {\n    'en': 'us',\n    'es': 'es',\n    'fr': 'fr',\n    'de': 'de',\n    'it': 'it',\n    'pt': 'pt',\n    'ru': 'ru',\n    'ar': 'sa',\n    'zh': 'cn',\n    'ja': 'jp',\n    'ko': 'kr',\n    'hi': 'in',\n    'nl': 'nl',\n    'sv': 'se',\n    'no': 'no',\n    'el': 'gr',\n    'he': 'il',\n    'uk': 'ua',\n    'ro': 'ro',\n    'pl': 'pl',\n    'tr': 'tr',\n    'vi': 'vn'\n  };\n  \n  return languageCountryMap[language] || 'us';\n}\n",[157,2097,2098,2103,2108,2113,2118,2123,2128,2133,2138,2143,2148,2153,2158,2163,2168,2173,2178,2183,2188,2193,2198,2203,2208,2213,2218,2223,2228,2233,2238,2242,2246,2251,2256,2261,2266,2271,2276,2281,2286,2291,2296,2301,2306,2311,2316,2321,2326,2331,2336,2341,2346,2351,2356,2361,2366,2370,2374,2380],{"__ignoreMap":155},[160,2099,2100],{"class":162,"line":163},[160,2101,2102],{},"const countryLanguageMap = {\n",[160,2104,2105],{"class":162,"line":169},[160,2106,2107],{},"  'us': 'en',\n",[160,2109,2110],{"class":162,"line":175},[160,2111,2112],{},"  'gb': 'en',\n",[160,2114,2115],{"class":162,"line":181},[160,2116,2117],{},"  'es': 'es',\n",[160,2119,2120],{"class":162,"line":187},[160,2121,2122],{},"  'mx': 'es',\n",[160,2124,2125],{"class":162,"line":193},[160,2126,2127],{},"  'ar': 'es',\n",[160,2129,2130],{"class":162,"line":199},[160,2131,2132],{},"  'fr': 'fr',\n",[160,2134,2135],{"class":162,"line":205},[160,2136,2137],{},"  'de': 'de',\n",[160,2139,2140],{"class":162,"line":210},[160,2141,2142],{},"  'it': 'it',\n",[160,2144,2145],{"class":162,"line":216},[160,2146,2147],{},"  'pt': 'pt',\n",[160,2149,2150],{"class":162,"line":222},[160,2151,2152],{},"  'br': 'pt',\n",[160,2154,2155],{"class":162,"line":227},[160,2156,2157],{},"  'ru': 'ru',\n",[160,2159,2160],{"class":162,"line":233},[160,2161,2162],{},"  'sa': 'ar',\n",[160,2164,2165],{"class":162,"line":239},[160,2166,2167],{},"  'ae': 'ar',\n",[160,2169,2170],{"class":162,"line":245},[160,2171,2172],{},"  'cn': 'zh',\n",[160,2174,2175],{"class":162,"line":252},[160,2176,2177],{},"  'jp': 'ja',\n",[160,2179,2180],{"class":162,"line":641},[160,2181,2182],{},"  'kr': 'ko',\n",[160,2184,2185],{"class":162,"line":661},[160,2186,2187],{},"  'in': 'hi',\n",[160,2189,2190],{"class":162,"line":681},[160,2191,2192],{},"  'nl': 'nl',\n",[160,2194,2195],{"class":162,"line":701},[160,2196,2197],{},"  'se': 'sv',\n",[160,2199,2200],{"class":162,"line":721},[160,2201,2202],{},"  'no': 'no',\n",[160,2204,2205],{"class":162,"line":741},[160,2206,2207],{},"  'gr': 'el',\n",[160,2209,2210],{"class":162,"line":761},[160,2211,2212],{},"  'il': 'he',\n",[160,2214,2215],{"class":162,"line":781},[160,2216,2217],{},"  'ua': 'uk',\n",[160,2219,2220],{"class":162,"line":801},[160,2221,2222],{},"  'ro': 'ro',\n",[160,2224,2225],{"class":162,"line":821},[160,2226,2227],{},"  'pl': 'pl',\n",[160,2229,2230],{"class":162,"line":842},[160,2231,2232],{},"  'tr': 'tr',\n",[160,2234,2235],{"class":162,"line":848},[160,2236,2237],{},"  'vn': 'vi'\n",[160,2239,2240],{"class":162,"line":853},[160,2241,1355],{},[160,2243,2244],{"class":162,"line":878},[160,2245,249],{"emptyLinePlaceholder":248},[160,2247,2248],{"class":162,"line":896},[160,2249,2250],{},"function getCountryForLanguage(language) {\n",[160,2252,2253],{"class":162,"line":905},[160,2254,2255],{},"  const languageCountryMap = {\n",[160,2257,2258],{"class":162,"line":911},[160,2259,2260],{},"    'en': 'us',\n",[160,2262,2263],{"class":162,"line":916},[160,2264,2265],{},"    'es': 'es',\n",[160,2267,2268],{"class":162,"line":925},[160,2269,2270],{},"    'fr': 'fr',\n",[160,2272,2273],{"class":162,"line":947},[160,2274,2275],{},"    'de': 'de',\n",[160,2277,2278],{"class":162,"line":959},[160,2279,2280],{},"    'it': 'it',\n",[160,2282,2283],{"class":162,"line":970},[160,2284,2285],{},"    'pt': 'pt',\n",[160,2287,2288],{"class":162,"line":993},[160,2289,2290],{},"    'ru': 'ru',\n",[160,2292,2293],{"class":162,"line":999},[160,2294,2295],{},"    'ar': 'sa',\n",[160,2297,2298],{"class":162,"line":1018},[160,2299,2300],{},"    'zh': 'cn',\n",[160,2302,2303],{"class":162,"line":1043},[160,2304,2305],{},"    'ja': 'jp',\n",[160,2307,2308],{"class":162,"line":1049},[160,2309,2310],{},"    'ko': 'kr',\n",[160,2312,2313],{"class":162,"line":1059},[160,2314,2315],{},"    'hi': 'in',\n",[160,2317,2318],{"class":162,"line":1065},[160,2319,2320],{},"    'nl': 'nl',\n",[160,2322,2323],{"class":162,"line":1075},[160,2324,2325],{},"    'sv': 'se',\n",[160,2327,2328],{"class":162,"line":1085},[160,2329,2330],{},"    'no': 'no',\n",[160,2332,2333],{"class":162,"line":1090},[160,2334,2335],{},"    'el': 'gr',\n",[160,2337,2338],{"class":162,"line":1095},[160,2339,2340],{},"    'he': 'il',\n",[160,2342,2343],{"class":162,"line":1100},[160,2344,2345],{},"    'uk': 'ua',\n",[160,2347,2348],{"class":162,"line":1392},[160,2349,2350],{},"    'ro': 'ro',\n",[160,2352,2353],{"class":162,"line":1398},[160,2354,2355],{},"    'pl': 'pl',\n",[160,2357,2358],{"class":162,"line":1404},[160,2359,2360],{},"    'tr': 'tr',\n",[160,2362,2363],{"class":162,"line":1409},[160,2364,2365],{},"    'vi': 'vn'\n",[160,2367,2368],{"class":162,"line":1415},[160,2369,908],{},[160,2371,2372],{"class":162,"line":1420},[160,2373,190],{},[160,2375,2377],{"class":162,"line":2376},57,[160,2378,2379],{},"  return languageCountryMap[language] || 'us';\n",[160,2381,2383],{"class":162,"line":2382},58,[160,2384,242],{},[15,2386,2388],{"id":2387},"step-8-seo-for-multi-language-content","Step 8: SEO for Multi-Language Content",[11,2390,2391],{},"Implement proper SEO tags for each language:",[150,2393,2395],{"className":338,"code":2394,"language":340,"meta":155,"style":155},"function NewsPage({ language, articles }) {\n  return (\n    \u003C>\n      \u003CHead>\n        \u003Chtml lang={language} \u002F>\n        \u003Clink rel=\"alternate\" hrefLang=\"en\" href=\"https:\u002F\u002Fyourapp.com\u002Fen\" \u002F>\n        \u003Clink rel=\"alternate\" hrefLang=\"es\" href=\"https:\u002F\u002Fyourapp.com\u002Fes\" \u002F>\n        \u003Clink rel=\"alternate\" hrefLang=\"fr\" href=\"https:\u002F\u002Fyourapp.com\u002Ffr\" \u002F>\n        {\u002F* Add more language alternates *\u002F}\n      \u003C\u002FHead>\n      {\u002F* Your content *\u002F}\n    \u003C\u002F>\n  );\n}\n",[157,2396,2397,2415,2421,2426,2435,2450,2484,2512,2540,2550,2558,2568,2573,2577],{"__ignoreMap":155},[160,2398,2399,2401,2404,2406,2409,2411,2413],{"class":162,"line":163},[160,2400,371],{"class":347},[160,2402,2403],{"class":374}," NewsPage",[160,2405,378],{"class":351},[160,2407,2408],{"class":381},"language",[160,2410,385],{"class":351},[160,2412,1495],{"class":381},[160,2414,391],{"class":351},[160,2416,2417,2419],{"class":162,"line":169},[160,2418,919],{"class":347},[160,2420,922],{"class":351},[160,2422,2423],{"class":162,"line":175},[160,2424,2425],{"class":351},"    \u003C>\n",[160,2427,2428,2430,2433],{"class":162,"line":181},[160,2429,950],{"class":351},[160,2431,2432],{"class":399},"Head",[160,2434,944],{"class":351},[160,2436,2437,2439,2442,2445,2447],{"class":162,"line":187},[160,2438,1710],{"class":351},[160,2440,2441],{"class":931},"html",[160,2443,2444],{"class":374}," lang",[160,2446,938],{"class":347},[160,2448,2449],{"class":351},"{language} \u002F>\n",[160,2451,2452,2454,2457,2460,2462,2465,2468,2470,2473,2476,2478,2481],{"class":162,"line":193},[160,2453,1710],{"class":351},[160,2455,2456],{"class":931},"link",[160,2458,2459],{"class":374}," rel",[160,2461,938],{"class":347},[160,2463,2464],{"class":358},"\"alternate\"",[160,2466,2467],{"class":374}," hrefLang",[160,2469,938],{"class":347},[160,2471,2472],{"class":358},"\"en\"",[160,2474,2475],{"class":374}," href",[160,2477,938],{"class":347},[160,2479,2480],{"class":358},"\"https:\u002F\u002Fyourapp.com\u002Fen\"",[160,2482,2483],{"class":351}," \u002F>\n",[160,2485,2486,2488,2490,2492,2494,2496,2498,2500,2503,2505,2507,2510],{"class":162,"line":199},[160,2487,1710],{"class":351},[160,2489,2456],{"class":931},[160,2491,2459],{"class":374},[160,2493,938],{"class":347},[160,2495,2464],{"class":358},[160,2497,2467],{"class":374},[160,2499,938],{"class":347},[160,2501,2502],{"class":358},"\"es\"",[160,2504,2475],{"class":374},[160,2506,938],{"class":347},[160,2508,2509],{"class":358},"\"https:\u002F\u002Fyourapp.com\u002Fes\"",[160,2511,2483],{"class":351},[160,2513,2514,2516,2518,2520,2522,2524,2526,2528,2531,2533,2535,2538],{"class":162,"line":205},[160,2515,1710],{"class":351},[160,2517,2456],{"class":931},[160,2519,2459],{"class":374},[160,2521,938],{"class":347},[160,2523,2464],{"class":358},[160,2525,2467],{"class":374},[160,2527,938],{"class":347},[160,2529,2530],{"class":358},"\"fr\"",[160,2532,2475],{"class":374},[160,2534,938],{"class":347},[160,2536,2537],{"class":358},"\"https:\u002F\u002Fyourapp.com\u002Ffr\"",[160,2539,2483],{"class":351},[160,2541,2542,2545,2548],{"class":162,"line":210},[160,2543,2544],{"class":351},"        {",[160,2546,2547],{"class":1581},"\u002F* Add more language alternates *\u002F",[160,2549,242],{"class":351},[160,2551,2552,2554,2556],{"class":162,"line":216},[160,2553,1068],{"class":351},[160,2555,2432],{"class":399},[160,2557,944],{"class":351},[160,2559,2560,2563,2566],{"class":162,"line":222},[160,2561,2562],{"class":351},"      {",[160,2564,2565],{"class":1581},"\u002F* Your content *\u002F",[160,2567,242],{"class":351},[160,2569,2570],{"class":162,"line":227},[160,2571,2572],{"class":351},"    \u003C\u002F>\n",[160,2574,2575],{"class":162,"line":233},[160,2576,287],{"class":351},[160,2578,2579],{"class":162,"line":239},[160,2580,242],{"class":351},[15,2582,2584],{"id":2583},"best-practices","Best Practices",[121,2586,2587,2593,2599,2605,2611,2617,2623],{},[26,2588,2589,2592],{},[126,2590,2591],{},"Always provide a language selector"," - Don't force users into a language",[26,2594,2595,2598],{},[126,2596,2597],{},"Remember user preferences"," - Store language choice in localStorage or user profile",[26,2600,2601,2604],{},[126,2602,2603],{},"Use native language names"," - Display \"Español\" not \"Spanish\"",[26,2606,2607,2610],{},[126,2608,2609],{},"Test with native speakers"," - Automated translation isn't enough",[26,2612,2613,2616],{},[126,2614,2615],{},"Consider cultural differences"," - Images and colors have different meanings",[26,2618,2619,2622],{},[126,2620,2621],{},"Optimize for performance"," - Lazy load language resources",[26,2624,2625,2628],{},[126,2626,2627],{},"Handle fallbacks gracefully"," - Always have a default language",[15,2630,2632],{"id":2631},"performance-optimization","Performance Optimization",[11,2634,2635],{},"Cache news by language to reduce API calls:",[150,2637,2639],{"className":152,"code":2638,"language":154,"meta":155,"style":155},"class MultiLanguageNewsCache {\n  constructor() {\n    this.cache = new Map();\n    this.cacheDuration = 5 * 60 * 1000; \u002F\u002F 5 minutes\n  }\n  \n  getCacheKey(language, country, category) {\n    return `${language}-${country}-${category || 'all'}`;\n  }\n  \n  get(language, country, category) {\n    const key = this.getCacheKey(language, country, category);\n    const cached = this.cache.get(key);\n    \n    if (cached && Date.now() - cached.timestamp \u003C this.cacheDuration) {\n      return cached.data;\n    }\n    \n    return null;\n  }\n  \n  set(language, country, category, data) {\n    const key = this.getCacheKey(language, country, category);\n    this.cache.set(key, {\n      data,\n      timestamp: Date.now()\n    });\n  }\n}\n\nconst newsCache = new MultiLanguageNewsCache();\n",[157,2640,2641,2646,2651,2656,2661,2665,2669,2674,2679,2683,2687,2692,2697,2702,2707,2712,2717,2721,2725,2730,2734,2738,2743,2747,2752,2757,2762,2767,2771,2775,2779],{"__ignoreMap":155},[160,2642,2643],{"class":162,"line":163},[160,2644,2645],{},"class MultiLanguageNewsCache {\n",[160,2647,2648],{"class":162,"line":169},[160,2649,2650],{},"  constructor() {\n",[160,2652,2653],{"class":162,"line":175},[160,2654,2655],{},"    this.cache = new Map();\n",[160,2657,2658],{"class":162,"line":181},[160,2659,2660],{},"    this.cacheDuration = 5 * 60 * 1000; \u002F\u002F 5 minutes\n",[160,2662,2663],{"class":162,"line":187},[160,2664,1345],{},[160,2666,2667],{"class":162,"line":193},[160,2668,190],{},[160,2670,2671],{"class":162,"line":199},[160,2672,2673],{},"  getCacheKey(language, country, category) {\n",[160,2675,2676],{"class":162,"line":205},[160,2677,2678],{},"    return `${language}-${country}-${category || 'all'}`;\n",[160,2680,2681],{"class":162,"line":210},[160,2682,1345],{},[160,2684,2685],{"class":162,"line":216},[160,2686,190],{},[160,2688,2689],{"class":162,"line":222},[160,2690,2691],{},"  get(language, country, category) {\n",[160,2693,2694],{"class":162,"line":227},[160,2695,2696],{},"    const key = this.getCacheKey(language, country, category);\n",[160,2698,2699],{"class":162,"line":233},[160,2700,2701],{},"    const cached = this.cache.get(key);\n",[160,2703,2704],{"class":162,"line":239},[160,2705,2706],{},"    \n",[160,2708,2709],{"class":162,"line":245},[160,2710,2711],{},"    if (cached && Date.now() - cached.timestamp \u003C this.cacheDuration) {\n",[160,2713,2714],{"class":162,"line":252},[160,2715,2716],{},"      return cached.data;\n",[160,2718,2719],{"class":162,"line":641},[160,2720,1213],{},[160,2722,2723],{"class":162,"line":661},[160,2724,2706],{},[160,2726,2727],{"class":162,"line":681},[160,2728,2729],{},"    return null;\n",[160,2731,2732],{"class":162,"line":701},[160,2733,1345],{},[160,2735,2736],{"class":162,"line":721},[160,2737,190],{},[160,2739,2740],{"class":162,"line":741},[160,2741,2742],{},"  set(language, country, category, data) {\n",[160,2744,2745],{"class":162,"line":761},[160,2746,2696],{},[160,2748,2749],{"class":162,"line":781},[160,2750,2751],{},"    this.cache.set(key, {\n",[160,2753,2754],{"class":162,"line":801},[160,2755,2756],{},"      data,\n",[160,2758,2759],{"class":162,"line":821},[160,2760,2761],{},"      timestamp: Date.now()\n",[160,2763,2764],{"class":162,"line":842},[160,2765,2766],{},"    });\n",[160,2768,2769],{"class":162,"line":848},[160,2770,1345],{},[160,2772,2773],{"class":162,"line":853},[160,2774,242],{},[160,2776,2777],{"class":162,"line":878},[160,2778,249],{"emptyLinePlaceholder":248},[160,2780,2781],{"class":162,"line":896},[160,2782,2783],{},"const newsCache = new MultiLanguageNewsCache();\n",[15,2785,2787],{"id":2786},"conclusion","Conclusion",[11,2789,2790],{},"Building a multi-language news application opens your product to a global audience. With AllNewsAPI's comprehensive language support and the techniques outlined in this guide, you can create an engaging experience for users worldwide.",[11,2792,2793,2794,2799],{},"Ready to go global? ",[2795,2796,2798],"a",{"href":2797},"\u002Fsignup","Start building with AllNewsAPI"," today!",[15,2801,2803],{"id":2802},"resources","Resources",[23,2805,2806,2812,2818],{},[26,2807,2808],{},[2795,2809,2811],{"href":2810},"\u002Fdocs","AllNewsAPI Documentation",[26,2813,2814],{},[2795,2815,2817],{"href":2816},"\u002Fcountries","Supported Languages and Countries",[26,2819,2820],{},[2795,2821,2825],{"href":2822,"rel":2823},"https:\u002F\u002Fwww.i18next.com\u002F",[2824],"nofollow","i18next Documentation",[2827,2828,2829],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .s4XuR, html code.shiki .s4XuR{--shiki-default:#E36209;--shiki-dark:#FFAB70}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":155,"searchDepth":169,"depth":169,"links":2831},[2832,2833,2834,2835,2836,2837,2838,2839,2840,2841,2842,2843,2844,2845,2846],{"id":17,"depth":169,"text":18},{"id":40,"depth":169,"text":41},{"id":115,"depth":169,"text":116},{"id":144,"depth":169,"text":145},{"id":258,"depth":169,"text":259},{"id":331,"depth":169,"text":332},{"id":1112,"depth":169,"text":1113},{"id":1820,"depth":169,"text":1821},{"id":2004,"depth":169,"text":2005},{"id":2088,"depth":169,"text":2089},{"id":2387,"depth":169,"text":2388},{"id":2583,"depth":169,"text":2584},{"id":2631,"depth":169,"text":2632},{"id":2786,"depth":169,"text":2787},{"id":2802,"depth":169,"text":2803},"2025-11-05","Learn how to create news applications that serve content in multiple languages and regions using AllNewsAPI",false,"md","\u002Fblog\u002Fbuilding-multi-language-news-applications.webp",{},"\u002Fblog\u002Fmulti-language-news-apps",{"title":5,"description":2848},{"loc":2853},"blog\u002Fmulti-language-news-apps","tutorial","wd-NEQiHy9myXlHH3vF_yhAcIQZt_oziwPu3Q8qYpsI",1783882207699]