1515# Standard library
1616import base64
1717import json
18+ import locale
1819import logging
1920import math
2021import quopri
2324from configparser import ConfigParser
2425from datetime import datetime
2526from pathlib import Path
27+ from sys import platform as opersys
2628from urllib .parse import urlparse
2729
2830# 3rd party
@@ -133,6 +135,8 @@ class IsogeoUtils(object):
133135 },
134136 }
135137
138+ lang = "fr"
139+
136140 def __init__ (self , proxies : dict = dict ()):
137141 """Instanciate IsogeoUtils module.
138142
@@ -158,14 +162,9 @@ def set_base_url(self, platform: str = "prod"):
158162 self .platform = platform
159163 if platform == "prod" :
160164 self .ssl = True
161- logger .debug ("Using production platform." )
162165 elif platform == "qa" :
163166 self .ssl = False
164- logger .debug ("Using Quality Assurance platform (reduced perfs)." )
165167 else :
166- logging .error (
167- "Platform must be one of: {}" .format (" | " .join (self .API_URLS .keys ()))
168- )
169168 raise ValueError (
170169 3 ,
171170 "Platform must be one of: {}" .format (" | " .join (self .API_URLS .keys ())),
@@ -185,6 +184,34 @@ def set_base_url(self, platform: str = "prod"):
185184 self .ssl ,
186185 )
187186
187+ @classmethod
188+ def set_lang_and_locale (self , lang : str ):
189+ """Set requests language and the matching locale.
190+
191+ :param str lang: language code to set API localization ("en" or "fr"). Defaults to 'fr'.
192+ """
193+ lang = lang .lower ()
194+
195+ # setting locale according to the language passed and depending on OS
196+ try :
197+ if opersys == "win32" :
198+ if lang .lower () == "fr" :
199+ locale .setlocale (locale .LC_ALL , "french" )
200+ else :
201+ locale .setlocale (locale .LC_ALL , "english" )
202+ else :
203+ if lang .lower () == "fr" :
204+ locale .setlocale (locale .LC_ALL , str ("fr_FR.utf8" ))
205+ else :
206+ locale .setlocale (locale .LC_ALL , str ("en_GB.utf8" ))
207+ except locale .Error as e :
208+ logger .error (
209+ "Selected locale ({}) is not installed: {}" .format (lang .lower (), e )
210+ )
211+ logger .debug ("Locale set to: {}" .format (locale .getlocale ()))
212+
213+ self .lang = lang
214+
188215 @classmethod
189216 def convert_octets (self , octets : int ) -> str :
190217 """Convert a mount of octets in readable size.
@@ -325,7 +352,9 @@ def get_request_base_url(self, route: str, prot: str = "https") -> str:
325352 :param str route: route to format
326353 :param str prot: https [DEFAULT] or http
327354 """
328- return "{}://{}.isogeo.com/{}/" .format (prot , self .api_url , route )
355+ return "{}://{}.isogeo.com/{}/?_lang={}" .format (
356+ prot , self .api_url , route , self .lang
357+ )
329358
330359 def get_edit_url (
331360 self ,
@@ -443,7 +472,7 @@ def guess_platform_from_url(self, url: str = "https://api.isogeo.com/") -> str:
443472 :param url str: URL string to guess from
444473
445474 :rtype: str
446- :returns: "prod" or "qa" or "unknown"
475+ :returns: "prod" or "qa" or "unknown"
447476
448477 :Example:
449478
0 commit comments