Translations for ontology

merge-requests/30/head
Bob Mottram 2021-08-08 12:16:18 +01:00
parent b6b57ea9cc
commit aeb896b454
7 changed files with 24363 additions and 22 deletions

View File

@ -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

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -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()

View File

@ -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

View File

@ -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',