The following might be a bit unclear, as it's a bit of a brain dump. It's mainly meant as a response to https://gerrit.wikimedia.org/r/#/c/137904/2/tests/l10n_tests.py and https://gerrit.wikimedia.org/r/#/c/137924/ and as 'food for thought'.
Basically, the question is how we can let the i18n not depend on the hardcoded 'scripts.i18n' import - this is problematic for tests, is problematic for pywikibot-installed-as-a-package (because there is no scripts.i18n then) and is problematic for third party authors (because they *have* to use the scripts.i18n folder to store their translations). I have some thoughts on this, and maybe we can make something cool out of it.
Essentially, we would want a script to be able to indicate /where/ it's i18n file is located. There's a few ways to do this, but I guess the cleanest option is something like this:
- pywikibot.i18n gets an 'I18N' class which contains the current twtranslate functions,
- this I18N class takes a parameter: the filename of the i18n translation file (which, at some point, could also be a JSON file) - maybe more filenames, if more translation files need to be loaded? - or maybe a directory that contains translation files?
- we add a simple wrapper that would allow the current scripts to do something like
import pywikibot.i18n i18n = pywikibot.i18n.forScript(__file__)
where 'forScript' does some path parsing to change __file__ (= the filename of the current file) from /path/to/original/file to /path/to/original/i18n/file
which is the setup we are currently using.
I'm not sure about backwards compatibility, but I guess we could have a pre-prepared pywikibot.i18n.twtranslate doing what it does now, via the I18N class (listing all files, maybe?)
Please let me know if this sounds like a good idea to implement.
Merlijn