Sigh ... I "spoke" too soon. Last night, as a final sanity check, I had put a hard-return in the function that provided the translations so that it would return the original, untranslated label. This is the code that I just ran. The traceback is unfortunately still there.
André Roberge On Mon, May 27, 2019 at 1:37 PM Andre Roberge <andre.robe...@gmail.com> wrote: > Hello everyone, > > Please ignore the traceback mentioned in the previous email. I made a few > changes and got rid of the traceback. > > The good news: IDLE starts and appear to work correctly. > The bad news: the menu items are not changed to the test "uppercase" > language. > > I will try to figure out how to fix this. > > André Roberge > > On Sun, May 26, 2019 at 10:00 PM Andre Roberge <andre.robe...@gmail.com> > wrote: > >> 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