I have started working on a possible implementation for providing translations for IDLE's menu. Right now, it generates a traceback which stumps me. Regardless, before I spend more time trying to figure out what goes on, I thought it would be a good idea to see if the approach I have in mind would be acceptable.
Copying the docstring of the main module I wrote: """This module is intended to provide translations of menu items. Instead of trying to approve translations for inclusion in Python's standard library, translations would be obtained separately by the end users and be located in a place from where they could be imported. This could be done by having a user put a translation file in their home directory or install them from Pypi. A translation file could have any name. However, its content would have to include a dict named "idle_translation" whose content would include at least one language, with the possibility of having more, and would have the following structure idle_translation = { "fr": { "File" : "Fichier", ...}, "es": {"File": "Archivo", ...} # not sure of the Spanish term } The addition of a directory would be done through the configuration menu and the name of the translation file would be saved in the user's configuration file. In case it is needed, we compile a reverse dictionary; but we have not gotten far enough to use it yet. """ The essence of the implementation can be described as follows: Existing code (one example copy-pasted from editor.py) menu.add_command(label=label, underline=underline, command=command, accelerator=accelerator) New code label = translator.get(label) # single line added menu.add_command(label=label, underline=underline, command=command, accelerator=accelerator) Where translator.get(label) can be thought of as a function like the following: def get_translation(label): if translation_exists(user_language, label): return translation_of(user_language, label) else: return label The actual code is a bit more complicated. = = = I admit to not really knowing how best to proceed with using git on a project like this. What I did is the following: 1. I cloned the cpython repository; 2. I created a local branch which I called "idle-translation-dev". 3. Trying to run "python -m idlelib", I got a traceback as "_pickle" could not be found when pickle was processed. So, I changed the name of "pickle.py" so that it would import the version from Python installed from my computer. That allowed me to proceed and explain the strange file renaming you might see if you look at the commit. What I did can be viewed in this single commit: https://github.com/aroberge/cpython/commit/8e329288cf1e97d35ecc2b9b65fafb9e2190d361 The traceback I got (preceded by two print statement I included in an attempt to figure out what went wrong) is the following: menu = options index = *Code Context state = disabled menuitem = .!menu.options Traceback (most recent call last): File "C:\Users\andre\github\cpython\Lib\runpy.py", line 193, in _run_module_as_main "__main__", mod_spec) File "C:\Users\andre\github\cpython\Lib\runpy.py", line 85, in _run_code exec(code, run_globals) File "C:\Users\andre\github\cpython\Lib\idlelib\__main__.py", line 7, in <module> idlelib.pyshell.main() File "C:\Users\andre\github\cpython\Lib\idlelib\pyshell.py", line 1521, in main shell = flist.open_shell() File "C:\Users\andre\github\cpython\Lib\idlelib\pyshell.py", line 328, in open_shell self.pyshell = PyShell(self) File "C:\Users\andre\github\cpython\Lib\idlelib\pyshell.py", line 879, in __init__ OutputWindow.__init__(self, flist, None, None) File "C:\Users\andre\github\cpython\Lib\idlelib\outwin.py", line 81, in __init__ self.update_menu_state('options', '*Code Context', 'disabled') File "C:\Users\andre\github\cpython\Lib\idlelib\editor.py", line 462, in update_menu_state menuitem.entryconfig(index, state=state) File "C:\Users\andre\github\cpython\Lib\tkinter\__init__.py", line 3354, in entryconfigure return self._configure(('entryconfigure', index), cnf, kw) File "C:\Users\andre\github\cpython\Lib\tkinter\__init__.py", line 1627, in _configure self.tk.call(_flatten((self._w, cmd)) + self._options(cnf)) _tkinter.TclError: bad menu entry index "*Code Context" I *suspect* that it is because other places required translations to my fictitious uppercase language before reaching that point, resulting in some inconsistencies ... but it seemed like a good place to stop to get some feedback as to whether or not this approach would be acceptable. André Roberge
_______________________________________________ IDLE-dev mailing list IDLE-dev@python.org https://mail.python.org/mailman/listinfo/idle-dev