mirror of https://gitlab.com/bashrc2/epicyon
Translations for ontology
parent
b6b57ea9cc
commit
aeb896b454
21
languages.py
21
languages.py
|
@ -108,16 +108,18 @@ def understoodPostLanguage(baseDir: str, nickname: str, domain: str,
|
|||
if libretranslateUrl:
|
||||
libretranslateApiKey = getConfigParam(baseDir, "libretranslateApiKey")
|
||||
langList = \
|
||||
_libretranslateLanguages(libretranslateUrl, libretranslateApiKey)
|
||||
libretranslateLanguages(libretranslateUrl, libretranslateApiKey)
|
||||
for lang in langList:
|
||||
if msgObject['contentMap'].get(lang):
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
def _libretranslateLanguages(url: str, apiKey: str = None) -> []:
|
||||
def libretranslateLanguages(url: str, apiKey: str = None) -> []:
|
||||
"""Returns a list of supported languages
|
||||
"""
|
||||
if not url:
|
||||
return []
|
||||
if not url.endswith('/languages'):
|
||||
if not url.endswith('/'):
|
||||
url += "/languages"
|
||||
|
@ -204,10 +206,13 @@ def addLinksToContent(content: str, links: {}) -> str:
|
|||
return content
|
||||
|
||||
|
||||
def _libretranslate(url: str, text: str,
|
||||
source: str, target: str, apiKey: str = None) -> str:
|
||||
def libretranslate(url: str, text: str,
|
||||
source: str, target: str, apiKey: str = None) -> str:
|
||||
"""Translate string using libretranslate
|
||||
"""
|
||||
if not url:
|
||||
return None
|
||||
|
||||
if not url.endswith('/translate'):
|
||||
if not url.endswith('/'):
|
||||
url += "/translate"
|
||||
|
@ -273,14 +278,14 @@ def autoTranslatePost(baseDir: str, postJsonObject: {},
|
|||
return ''
|
||||
libretranslateApiKey = getConfigParam(baseDir, "libretranslateApiKey")
|
||||
langList = \
|
||||
_libretranslateLanguages(libretranslateUrl, libretranslateApiKey)
|
||||
libretranslateLanguages(libretranslateUrl, libretranslateApiKey)
|
||||
for lang in langList:
|
||||
if msgObject['contentMap'].get(lang):
|
||||
content = msgObject['contentMap'][lang]
|
||||
translatedText = \
|
||||
_libretranslate(libretranslateUrl, content,
|
||||
lang, systemLanguage,
|
||||
libretranslateApiKey)
|
||||
libretranslate(libretranslateUrl, content,
|
||||
lang, systemLanguage,
|
||||
libretranslateApiKey)
|
||||
if translatedText:
|
||||
if removeHtml(translatedText) == removeHtml(content):
|
||||
return content
|
||||
|
|
File diff suppressed because it is too large
Load Diff
14700
ontology/foodTypes.json
14700
ontology/foodTypes.json
File diff suppressed because it is too large
Load Diff
File diff suppressed because it is too large
Load Diff
64
tests.py
64
tests.py
|
@ -42,6 +42,7 @@ from follow import clearFollowers
|
|||
from follow import sendFollowRequestViaServer
|
||||
from follow import sendUnfollowRequestViaServer
|
||||
from siteactive import siteIsActive
|
||||
from utils import getSupportedLanguages
|
||||
from utils import setConfigParam
|
||||
from utils import isGroupActor
|
||||
from utils import dateStringToSeconds
|
||||
|
@ -137,6 +138,8 @@ from languages import setActorLanguages
|
|||
from languages import getActorLanguages
|
||||
from languages import getLinksFromContent
|
||||
from languages import addLinksToContent
|
||||
from languages import libretranslate
|
||||
from languages import libretranslateLanguages
|
||||
from shares import authorizeSharedItems
|
||||
from shares import generateSharedItemFederationTokens
|
||||
from shares import createSharedItemFederationToken
|
||||
|
@ -3371,8 +3374,9 @@ def _testValidContentWarning():
|
|||
|
||||
def _testTranslations():
|
||||
print('testTranslations')
|
||||
languagesStr = ('ar', 'ca', 'cy', 'de', 'es', 'fr', 'ga',
|
||||
'hi', 'it', 'ja', 'oc', 'pt', 'ru', 'zh')
|
||||
baseDir = os.getcwd()
|
||||
languagesStr = getSupportedLanguages(baseDir)
|
||||
assert languagesStr
|
||||
|
||||
# load all translations into a dict
|
||||
langDict = {}
|
||||
|
@ -5178,9 +5182,65 @@ def _testGetPriceFromString() -> None:
|
|||
assert curr == "USD"
|
||||
|
||||
|
||||
def _translateOntology() -> None:
|
||||
ontologyTypes = ('food', 'clothes', 'tool')
|
||||
url = 'https://translate.astian.org'
|
||||
apiKey = None
|
||||
ltLangList = libretranslateLanguages(url, apiKey)
|
||||
baseDir = os.getcwd()
|
||||
languagesStr = getSupportedLanguages(baseDir)
|
||||
assert languagesStr
|
||||
|
||||
for oType in ontologyTypes:
|
||||
changed = False
|
||||
filename = baseDir + '/ontology/' + oType + 'Types.json'
|
||||
if not os.path.isfile(filename):
|
||||
continue
|
||||
ontologyJson = loadJson(filename)
|
||||
if not ontologyJson:
|
||||
continue
|
||||
index = -1
|
||||
for item in ontologyJson['@graph']:
|
||||
index += 1
|
||||
if "rdfs:label" not in item:
|
||||
continue
|
||||
englishStr = None
|
||||
languagesFound = []
|
||||
for label in item["rdfs:label"]:
|
||||
if '@language' not in label:
|
||||
continue
|
||||
languagesFound.append(label['@language'])
|
||||
if '@value' not in label:
|
||||
continue
|
||||
if label['@language'] == 'en':
|
||||
englishStr = label['@value']
|
||||
if not englishStr:
|
||||
continue
|
||||
for lang in languagesStr:
|
||||
if lang not in languagesFound:
|
||||
translatedStr = None
|
||||
if url and lang in ltLangList:
|
||||
translatedStr = \
|
||||
libretranslate(url, englishStr, 'en', lang, apiKey)
|
||||
if not translatedStr:
|
||||
translatedStr = englishStr
|
||||
else:
|
||||
translatedStr = translatedStr.replace('<p>', '')
|
||||
translatedStr = translatedStr.replace('</p>', '')
|
||||
ontologyJson['@graph'][index]["rdfs:label"].append({
|
||||
"@value": translatedStr,
|
||||
"@language": lang
|
||||
})
|
||||
changed = True
|
||||
if not changed:
|
||||
continue
|
||||
saveJson(ontologyJson, filename + '.new')
|
||||
|
||||
|
||||
def runAllTests():
|
||||
print('Running tests...')
|
||||
updateDefaultThemesList(os.getcwd())
|
||||
_translateOntology()
|
||||
_testGetPriceFromString()
|
||||
_testFunctions()
|
||||
_testDateConversions()
|
||||
|
|
16
utils.py
16
utils.py
|
@ -2793,3 +2793,19 @@ def getCurrencies() -> {}:
|
|||
"₫": "VND",
|
||||
"Z$": "ZQD"
|
||||
}
|
||||
|
||||
|
||||
def getSupportedLanguages(baseDir: str) -> []:
|
||||
"""Returns a list of supported languages
|
||||
"""
|
||||
translationsDir = baseDir + '/translations'
|
||||
languagesStr = []
|
||||
for subdir, dirs, files in os.walk(translationsDir):
|
||||
for f in files:
|
||||
if not f.endswith('.json'):
|
||||
continue
|
||||
lang = f.split('.')[0]
|
||||
if len(lang) == 2:
|
||||
languagesStr.append(lang)
|
||||
break
|
||||
return languagesStr
|
||||
|
|
|
@ -23,6 +23,7 @@ from utils import loadJson
|
|||
from utils import getConfigParam
|
||||
from utils import getImageFormats
|
||||
from utils import acctDir
|
||||
from utils import getSupportedLanguages
|
||||
from languages import getActorLanguages
|
||||
from skills import getSkills
|
||||
from theme import getThemesList
|
||||
|
@ -1688,19 +1689,10 @@ def _htmlEditProfileOptions(manuallyApprovesFollowers: str,
|
|||
return editProfileForm
|
||||
|
||||
|
||||
def _getSupportedLanguages(baseDir: str) -> str:
|
||||
def _getSupportedLanguagesSorted(baseDir: str) -> str:
|
||||
"""Returns a list of supported languages
|
||||
"""
|
||||
langList = []
|
||||
for subdir, dirs, files in os.walk(baseDir + '/translations'):
|
||||
for f in files:
|
||||
if not f.endswith('.json'):
|
||||
continue
|
||||
langStr = f.split('.')[0]
|
||||
if len(langStr) != 2:
|
||||
continue
|
||||
langList.append(langStr)
|
||||
break
|
||||
langList = getSupportedLanguages(baseDir)
|
||||
if not langList:
|
||||
return ''
|
||||
langList.sort()
|
||||
|
@ -1769,7 +1761,7 @@ def _htmlEditProfileMain(baseDir: str, displayNickname: str, bioStr: str,
|
|||
editProfileForm += \
|
||||
editTextField('Blog', 'blogAddress', blogAddress, 'https://...')
|
||||
|
||||
languagesListStr = _getSupportedLanguages(baseDir)
|
||||
languagesListStr = _getSupportedLanguagesSorted(baseDir)
|
||||
showLanguages = getActorLanguages(actorJson)
|
||||
editProfileForm += \
|
||||
editTextField(translate['Languages'], 'showLanguages',
|
||||
|
|
Loading…
Reference in New Issue