forked from EVOgeek/Vmeda.Online
		
	MOBILE-4390 lang: Format LMS lang
For child parents, such as pt-br, the app format and LMS format are different (in the LMS it would be pt_br). So application lang should be formatted before being sent to webservices and other contexts.
This commit is contained in:
		
							parent
							
								
									b8618cbc93
								
							
						
					
					
						commit
						8bffcaca94
					
				| @ -42,7 +42,7 @@ import { CoreWSError } from '@classes/errors/wserror'; | |||||||
| import { CoreLogger } from '@singletons/logger'; | import { CoreLogger } from '@singletons/logger'; | ||||||
| import { Translate } from '@singletons'; | import { Translate } from '@singletons'; | ||||||
| import { CoreIonLoadingElement } from './ion-loading'; | import { CoreIonLoadingElement } from './ion-loading'; | ||||||
| import { CoreLang } from '@services/lang'; | import { CoreLang, CoreLangFormat } from '@services/lang'; | ||||||
| import { CoreSites, CoreSitesReadingStrategy } from '@services/sites'; | import { CoreSites, CoreSitesReadingStrategy } from '@services/sites'; | ||||||
| import { asyncInstance, AsyncInstance } from '../utils/async-instance'; | import { asyncInstance, AsyncInstance } from '../utils/async-instance'; | ||||||
| import { CoreDatabaseTable } from './database/database-table'; | import { CoreDatabaseTable } from './database/database-table'; | ||||||
| @ -970,7 +970,7 @@ export class CoreSite { | |||||||
|         // Moodle uses underscore instead of dash.
 |         // Moodle uses underscore instead of dash.
 | ||||||
|         data = { |         data = { | ||||||
|             ...data, |             ...data, | ||||||
|             moodlewssettinglang: (preSets.lang ?? await CoreLang.getCurrentLanguage()).replace('-', '_'), |             moodlewssettinglang: CoreLang.formatLanguage(preSets.lang ?? await CoreLang.getCurrentLanguage(), CoreLangFormat.LMS), | ||||||
|         }; |         }; | ||||||
| 
 | 
 | ||||||
|         try { |         try { | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ | |||||||
| 
 | 
 | ||||||
| import { Component, Input, OnInit } from '@angular/core'; | import { Component, Input, OnInit } from '@angular/core'; | ||||||
| 
 | 
 | ||||||
| import { CoreLang } from '@services/lang'; | import { CoreLang, CoreLangFormat } from '@services/lang'; | ||||||
| import { CoreSites } from '@services/sites'; | import { CoreSites } from '@services/sites'; | ||||||
| import { CoreUtils } from '@services/utils/utils'; | import { CoreUtils } from '@services/utils/utils'; | ||||||
| import { CorePath } from '@singletons/path'; | import { CorePath } from '@singletons/path'; | ||||||
| @ -52,7 +52,7 @@ export class CoreRecaptchaComponent implements OnInit { | |||||||
|      * Initialize the lang property. |      * Initialize the lang property. | ||||||
|      */ |      */ | ||||||
|     protected async initLang(): Promise<void> { |     protected async initLang(): Promise<void> { | ||||||
|         this.lang = await CoreLang.getCurrentLanguage(); |         this.lang = await CoreLang.getCurrentLanguage(CoreLangFormat.LMS); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ | |||||||
| 
 | 
 | ||||||
| import { Injectable } from '@angular/core'; | import { Injectable } from '@angular/core'; | ||||||
| 
 | 
 | ||||||
| import { CoreLang, CoreLangLanguage } from '@services/lang'; | import { CoreLang, CoreLangFormat, CoreLangLanguage } from '@services/lang'; | ||||||
| import { CoreSites } from '@services/sites'; | import { CoreSites } from '@services/sites'; | ||||||
| import { CoreConstants } from '@/core/constants'; | import { CoreConstants } from '@/core/constants'; | ||||||
| import { CoreMainMenuDelegate, CoreMainMenuHandlerToDisplay } from './mainmenu-delegate'; | import { CoreMainMenuDelegate, CoreMainMenuHandlerToDisplay } from './mainmenu-delegate'; | ||||||
| @ -139,15 +139,19 @@ export class CoreMainMenuProvider { | |||||||
|             return result; |             return result; | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         const currentLang = await CoreLang.getCurrentLanguage(); |         const currentLangApp = await CoreLang.getCurrentLanguage(); | ||||||
| 
 |         const currentLangLMS = CoreLang.formatLanguage(currentLangApp, CoreLangFormat.LMS); | ||||||
|         const fallbackLang = CoreConstants.CONFIG.default_lang || 'en'; |         const fallbackLang = CoreConstants.CONFIG.default_lang || 'en'; | ||||||
| 
 | 
 | ||||||
|         // Get the right label for each entry and add it to the result.
 |         // Get the right label for each entry and add it to the result.
 | ||||||
|         for (const id in map) { |         for (const id in map) { | ||||||
|             const entry = map[id]; |             const entry = map[id]; | ||||||
|             let data = entry.labels[currentLang] || entry.labels[currentLang + '_only'] || |             let data = entry.labels[currentLangApp] | ||||||
|                     entry.labels.none || entry.labels[fallbackLang]; |                 ?? entry.labels[currentLangLMS] | ||||||
|  |                 ?? entry.labels[currentLangApp + '_only'] | ||||||
|  |                 ?? entry.labels[currentLangLMS + '_only'] | ||||||
|  |                 ?? entry.labels.none | ||||||
|  |                 ?? entry.labels[fallbackLang]; | ||||||
| 
 | 
 | ||||||
|             if (!data) { |             if (!data) { | ||||||
|                 // No valid label found, get the first one that is not "_only".
 |                 // No valid label found, get the first one that is not "_only".
 | ||||||
|  | |||||||
| @ -20,7 +20,7 @@ import { CoreCourseAnyModuleData } from '@features/course/services/course'; | |||||||
| import { CoreCourses } from '@features/courses/services/courses'; | import { CoreCourses } from '@features/courses/services/courses'; | ||||||
| import { CoreApp } from '@services/app'; | import { CoreApp } from '@services/app'; | ||||||
| import { CoreFilepool } from '@services/filepool'; | import { CoreFilepool } from '@services/filepool'; | ||||||
| import { CoreLang } from '@services/lang'; | import { CoreLang, CoreLangFormat } from '@services/lang'; | ||||||
| import { CoreSites } from '@services/sites'; | import { CoreSites } from '@services/sites'; | ||||||
| import { CoreTextUtils } from '@services/utils/text'; | import { CoreTextUtils } from '@services/utils/text'; | ||||||
| import { CoreUtils } from '@services/utils/utils'; | import { CoreUtils } from '@services/utils/utils'; | ||||||
| @ -81,7 +81,7 @@ export class CoreSitePluginsProvider { | |||||||
|         args = args || {}; |         args = args || {}; | ||||||
|         site = site || CoreSites.getCurrentSite(); |         site = site || CoreSites.getCurrentSite(); | ||||||
| 
 | 
 | ||||||
|         const lang = await CoreLang.getCurrentLanguage(); |         const lang = await CoreLang.getCurrentLanguage(CoreLangFormat.LMS); | ||||||
| 
 | 
 | ||||||
|         const defaultArgs: CoreSitePluginsDefaultArgs = { |         const defaultArgs: CoreSitePluginsDefaultArgs = { | ||||||
|             userid: <number> args.userid ?? site?.getUserId(), |             userid: <number> args.userid ?? site?.getUserId(), | ||||||
|  | |||||||
| @ -226,14 +226,28 @@ export class CoreLangProvider { | |||||||
|      * |      * | ||||||
|      * @returns Promise resolved with the current language. |      * @returns Promise resolved with the current language. | ||||||
|      */ |      */ | ||||||
|     async getCurrentLanguage(): Promise<string> { |     async getCurrentLanguage(format?: CoreLangFormat): Promise<string> { | ||||||
|         if (this.currentLanguage !== undefined) { |         if (this.currentLanguage === undefined) { | ||||||
|             return this.currentLanguage; |             this.currentLanguage = await this.detectLanguage(); | ||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         this.currentLanguage = await this.detectLanguage(); |         return format ? this.formatLanguage(this.currentLanguage, format) : this.currentLanguage; | ||||||
|  |     } | ||||||
| 
 | 
 | ||||||
|         return this.currentLanguage; |     /** | ||||||
|  |      * Update a language code to the given format. | ||||||
|  |      * | ||||||
|  |      * @param lang Language code. | ||||||
|  |      * @param format Format to use. | ||||||
|  |      * @returns Formatted language code. | ||||||
|  |      */ | ||||||
|  |     formatLanguage(lang: string, format: CoreLangFormat): string { | ||||||
|  |         switch (format) { | ||||||
|  |             case CoreLangFormat.App: | ||||||
|  |                 return lang.replace('_', '-'); | ||||||
|  |             case CoreLangFormat.LMS: | ||||||
|  |                 return lang.replace('-', '_'); | ||||||
|  |         } | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     /** |     /** | ||||||
| @ -568,6 +582,11 @@ export class CoreLangProvider { | |||||||
| 
 | 
 | ||||||
| export const CoreLang = makeSingleton(CoreLangProvider); | export const CoreLang = makeSingleton(CoreLangProvider); | ||||||
| 
 | 
 | ||||||
|  | export const enum CoreLangFormat { | ||||||
|  |     LMS = 'lms', | ||||||
|  |     App = 'app' | ||||||
|  | } | ||||||
|  | 
 | ||||||
| /** | /** | ||||||
|  * Language code. E.g. 'au', 'es', etc. |  * Language code. E.g. 'au', 'es', etc. | ||||||
|  */ |  */ | ||||||
|  | |||||||
| @ -62,7 +62,7 @@ import { asyncInstance, AsyncInstance } from '../utils/async-instance'; | |||||||
| import { CoreConfig } from './config'; | import { CoreConfig } from './config'; | ||||||
| import { CoreNetwork } from '@services/network'; | import { CoreNetwork } from '@services/network'; | ||||||
| import { CoreUserGuestSupportConfig } from '@features/user/classes/support/guest-support-config'; | import { CoreUserGuestSupportConfig } from '@features/user/classes/support/guest-support-config'; | ||||||
| import { CoreLang } from '@services/lang'; | import { CoreLang, CoreLangFormat } from '@services/lang'; | ||||||
| 
 | 
 | ||||||
| export const CORE_SITE_SCHEMAS = new InjectionToken<CoreSiteSchema[]>('CORE_SITE_SCHEMAS'); | export const CORE_SITE_SCHEMAS = new InjectionToken<CoreSiteSchema[]>('CORE_SITE_SCHEMAS'); | ||||||
| export const CORE_SITE_CURRENT_SITE_ID_CONFIG = 'current_site_id'; | export const CORE_SITE_CURRENT_SITE_ID_CONFIG = 'current_site_id'; | ||||||
| @ -419,7 +419,7 @@ export class CoreSitesProvider { | |||||||
|         siteUrl = CoreUrlUtils.removeUrlParams(siteUrl); |         siteUrl = CoreUrlUtils.removeUrlParams(siteUrl); | ||||||
| 
 | 
 | ||||||
|         try { |         try { | ||||||
|             const lang = await CoreLang.getCurrentLanguage(); |             const lang = await CoreLang.getCurrentLanguage(CoreLangFormat.LMS); | ||||||
| 
 | 
 | ||||||
|             data = await Http.post(`${siteUrl}/login/token.php?lang=${lang}`, { appsitecheck: 1 }) |             data = await Http.post(`${siteUrl}/login/token.php?lang=${lang}`, { appsitecheck: 1 }) | ||||||
|                 .pipe(timeout(CoreWS.getRequestTimeout())) |                 .pipe(timeout(CoreWS.getRequestTimeout())) | ||||||
| @ -484,7 +484,7 @@ export class CoreSitesProvider { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         service = service || CoreConstants.CONFIG.wsservice; |         service = service || CoreConstants.CONFIG.wsservice; | ||||||
|         const lang = await CoreLang.getCurrentLanguage(); |         const lang = await CoreLang.getCurrentLanguage(CoreLangFormat.LMS); | ||||||
|         const params = { |         const params = { | ||||||
|             username, |             username, | ||||||
|             password, |             password, | ||||||
|  | |||||||
| @ -14,7 +14,7 @@ | |||||||
| 
 | 
 | ||||||
| import { Injectable } from '@angular/core'; | import { Injectable } from '@angular/core'; | ||||||
| 
 | 
 | ||||||
| import { CoreLang } from '@services/lang'; | import { CoreLang, CoreLangFormat } from '@services/lang'; | ||||||
| import { CoreTextUtils } from '@services/utils/text'; | import { CoreTextUtils } from '@services/utils/text'; | ||||||
| import { CoreConstants } from '@/core/constants'; | import { CoreConstants } from '@/core/constants'; | ||||||
| import { makeSingleton } from '@singletons'; | import { makeSingleton } from '@singletons'; | ||||||
| @ -260,7 +260,7 @@ export class CoreUrlUtilsProvider { | |||||||
|         } |         } | ||||||
| 
 | 
 | ||||||
|         try { |         try { | ||||||
|             let lang = await CoreLang.getCurrentLanguage(); |             let lang = await CoreLang.getCurrentLanguage(CoreLangFormat.LMS); | ||||||
|             lang = CoreLang.getParentLanguage() || lang; |             lang = CoreLang.getParentLanguage() || lang; | ||||||
| 
 | 
 | ||||||
|             return docsUrl.replace('/en/', '/' + lang + '/'); |             return docsUrl.replace('/en/', '/' + lang + '/'); | ||||||
|  | |||||||
| @ -42,7 +42,7 @@ import { CorePlatform } from '@services/platform'; | |||||||
| import { CoreSiteError, CoreSiteErrorOptions } from '@classes/errors/siteerror'; | import { CoreSiteError, CoreSiteErrorOptions } from '@classes/errors/siteerror'; | ||||||
| import { CoreUserGuestSupportConfig } from '@features/user/classes/support/guest-support-config'; | import { CoreUserGuestSupportConfig } from '@features/user/classes/support/guest-support-config'; | ||||||
| import { CoreSites } from '@services/sites'; | import { CoreSites } from '@services/sites'; | ||||||
| import { CoreLang } from './lang'; | import { CoreLang, CoreLangFormat } from './lang'; | ||||||
| 
 | 
 | ||||||
| /** | /** | ||||||
|  * This service allows performing WS calls and download/upload files. |  * This service allows performing WS calls and download/upload files. | ||||||
| @ -445,7 +445,7 @@ export class CoreWSProvider { | |||||||
|             args: this.convertValuesToString(data), |             args: this.convertValuesToString(data), | ||||||
|         }]; |         }]; | ||||||
| 
 | 
 | ||||||
|         const lang = await CoreLang.getCurrentLanguage(); |         const lang = await CoreLang.getCurrentLanguage(CoreLangFormat.LMS); | ||||||
| 
 | 
 | ||||||
|         // The info= parameter has no function. It is just to help with debugging.
 |         // The info= parameter has no function. It is just to help with debugging.
 | ||||||
|         // We call it info to match the parameter name use by Moodle's AMD ajax module.
 |         // We call it info to match the parameter name use by Moodle's AMD ajax module.
 | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user