scripts: import_translations: add shellscript that processes some Tusky translations to ours, replaces links, names. Add xq utility from https://github.com/jeffbr13/xq
This commit is contained in:
parent
deca97295d
commit
6fbc1601a7
47
scripts/import_translations.sh
Executable file
47
scripts/import_translations.sh
Executable file
@ -0,0 +1,47 @@
|
||||
#!/bin/bash
|
||||
|
||||
FIXUP_TUSKY="//string[@name='restart_emoji'] | \
|
||||
//string[@name='about_tusky_version'] | \
|
||||
//string[@name='about_powered_by_tusky'] | \
|
||||
//string[@name='about_tusky_license'] | \
|
||||
//string[@name='about_tusky_account'] | \
|
||||
//string[@name='license_description']"
|
||||
FIXUP_WEBSITE="//string[@name='about_project_site']"
|
||||
FIXUP_BUGTRACKER="//string[@name='about_bug_feature_request_site']"
|
||||
FIXUP_MASTODON="//string[@name='action_login'] | \
|
||||
//string[@name='add_account_description'] | \
|
||||
//string[@name='warning_scheduling_interval']"
|
||||
FIXUP_INSTANCES="//string[@name='dialog_whats_an_instance']"
|
||||
|
||||
SOURCE_ROOT=$PWD
|
||||
|
||||
logue() {
|
||||
sed -E 's/(<.?result>|<.?results.?>)//g'
|
||||
}
|
||||
|
||||
prologue() {
|
||||
logue | awk -v FS=$'\b' -v RS=$'\b' '{ print "<resources>"$1}'
|
||||
}
|
||||
|
||||
epilogue() {
|
||||
logue | awk -v FS=$'\b' -v RS=$'\b' '{ print $1"</resources>"}'
|
||||
}
|
||||
|
||||
pushd app/src/main/res/
|
||||
for i in values*/strings.xml;
|
||||
do
|
||||
DIRECTORY=$(dirname $i)
|
||||
|
||||
echo $DIRECTORY
|
||||
|
||||
mkdir -p ../../husky/res/$DIRECTORY/
|
||||
|
||||
# add <resources>, some strings
|
||||
$SOURCE_ROOT/scripts/xq.py "$FIXUP_TUSKY" $i | prologue | sed -E 's|Tusky|Husky|g' > ../../husky/res/$DIRECTORY/husky_generated.xml
|
||||
$SOURCE_ROOT/scripts/xq.py "$FIXUP_WEBSITE" $i | logue | sed -E 's|https://tusky.app|https://husky.fwgs.ru|g' >> ../../husky/res/$DIRECTORY/husky_generated.xml
|
||||
$SOURCE_ROOT/scripts/xq.py "$FIXUP_BUGTRACKER" $i | logue | sed -E 's|https://github.com/tuskyapp/Tusky/issues|https://git.mentality.rip/FWGS/Husky/issues|g' >> ../../husky/res/$DIRECTORY/husky_generated.xml
|
||||
$SOURCE_ROOT/scripts/xq.py "$FIXUP_MASTODON" $i | logue | sed -E 's|Mastodon|Pleroma|g' >> ../../husky/res/$DIRECTORY/husky_generated.xml
|
||||
$SOURCE_ROOT/scripts/xq.py "$FIXUP_INSTANCES" $i | epilogue | sed -E 's|mastodon.social|shitposter.club|g' | sed -E 's|icosahedron.website|blob.cat|g' | sed -E 's|social.tchncs.de|expired.mentality.rip|g' | sed -E 's|https://instances.social|https://fediverse.network/pleroma?count=peers|g' >> ../../husky/res/$DIRECTORY/husky_generated.xml
|
||||
|
||||
done
|
||||
popd
|
65
scripts/xq.py
Executable file
65
scripts/xq.py
Executable file
@ -0,0 +1,65 @@
|
||||
#!/usr/bin/env python3
|
||||
|
||||
# Based on jeffbr's xq
|
||||
# a1ba: added unicode output
|
||||
|
||||
import argparse
|
||||
import sys
|
||||
from typing import Union
|
||||
|
||||
from lxml import etree
|
||||
from lxml.builder import E
|
||||
from pygments import highlight
|
||||
from pygments.formatters.other import NullFormatter
|
||||
from pygments.formatters.terminal import TerminalFormatter
|
||||
from pygments.lexers.html import XmlLexer
|
||||
|
||||
# from . import NAME, DESCRIPTION, VERSION
|
||||
NAME = 'xq'
|
||||
VERSION = '0.0.4'
|
||||
DESCRIPTION = 'like jq but for XML and XPath'
|
||||
|
||||
def wrap_in_results(elements: [Union[etree._Element, etree._ElementUnicodeResult]]) -> etree._Element:
|
||||
results = E.results()
|
||||
for el in elements:
|
||||
results.append(E.result(el))
|
||||
return results
|
||||
|
||||
|
||||
def apply_xpath(infile, xpath_query=None, colorize=False):
|
||||
try:
|
||||
parsed = etree.parse(infile, etree.XMLParser(remove_blank_text=True))
|
||||
except etree.XMLSyntaxError:
|
||||
parsed = etree.parse(infile, etree.HTMLParser(remove_blank_text=True))
|
||||
|
||||
if xpath_query:
|
||||
matches = parsed.xpath(xpath_query)
|
||||
results = wrap_in_results(matches)
|
||||
output = etree.tostring(results, pretty_print=True, encoding='unicode')
|
||||
else:
|
||||
output = etree.tostring(parsed, pretty_print=True, encoding='unicode')
|
||||
|
||||
formatter = TerminalFormatter() if colorize else NullFormatter()
|
||||
return highlight(output, XmlLexer(), formatter)
|
||||
|
||||
|
||||
def main():
|
||||
parser = argparse.ArgumentParser(
|
||||
prog=NAME,
|
||||
description=DESCRIPTION,
|
||||
)
|
||||
parser.add_argument('-v', '--version', action='version', version='%(prog)s ' + VERSION)
|
||||
parser.add_argument(
|
||||
'xpath_query', nargs='?', type=str,
|
||||
help='XPath query to apply to XML document.'
|
||||
)
|
||||
parser.add_argument(
|
||||
'file', nargs='?', type=argparse.FileType('r'), default=sys.stdin,
|
||||
help='XML file to process. Defaults to STDIN.',
|
||||
)
|
||||
args = parser.parse_args()
|
||||
sys.stdout.write(apply_xpath(args.file, args.xpath_query, sys.stdout.isatty()))
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
Loading…
Reference in New Issue
Block a user