<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Hello everyone,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Please ignore the traceback mentioned in the previous email. I made a few changes and got rid of the traceback.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">The good news: IDLE starts and appear to work correctly.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">The bad news: the menu items are not changed to the test "uppercase" language.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">I will try to figure out how to fix this.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">André Roberge</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, May 26, 2019 at 10:00 PM Andre Roberge <<a href="mailto:andre.roberge@gmail.com">andre.roberge@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">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.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Copying the docstring of the main module I wrote:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">"""This module is intended to provide translations of menu items.<br><br>Instead of trying to approve translations for inclusion in Python's standard<br>library, translations would be obtained separately by the end users and<br>be located in a place from where they could be imported.<br>This could be done by having a user put a translation file in their home<br>directory or install them from Pypi.<br><br>A translation file could have any name.  However, its content would have<br>to include a dict named "idle_translation" whose content would include<br>at least one language, with the possibility of having more, and<br>would have the following structure<br><br>idle_translation = {<br>    "fr": { "File" : "Fichier", ...},<br>    "es": {"File": "Archivo", ...}     # not sure of the Spanish term<br>}<br><br>The addition of a directory would be done through the configuration<br>menu and the name of the translation file would be saved in the user's<br>configuration file.<br><br>In case it is needed, we compile a reverse dictionary; but we have not<br>gotten far enough to use it yet.<br><br>"""<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">The essence of the implementation can be described as follows:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Existing code (one example copy-pasted from editor.py)</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">menu.add_command(label=label, underline=underline,<br>                                         command=command,<br>                                         accelerator=accelerator)<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">New code</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">label = translator.get(label)  # single line added<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">menu.add_command(label=label, underline=underline,<br>                                         command=command,<br>                                         accelerator=accelerator)<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">Where translator.get(label) can be thought of as a function like the following:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">def get_translation(label):</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">    if translation_exists(user_language, label):</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">        return translation_of(user_language, label)</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">    else:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">        return label</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">The actual code is a bit more complicated.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">= = =</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">I admit to not really knowing how best to proceed with using git on a project like this.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">What I did is the following:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">1. I cloned the cpython repository; </div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">2. I created a local branch which I called "idle-translation-dev".</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">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.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">What I did can be viewed in this single commit:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><a href="https://github.com/aroberge/cpython/commit/8e329288cf1e97d35ecc2b9b65fafb9e2190d361" target="_blank">https://github.com/aroberge/cpython/commit/8e329288cf1e97d35ecc2b9b65fafb9e2190d361</a>  <br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">The traceback I got (preceded by two print statement I included in an attempt to figure out what went wrong) is the following:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">menu =  options index =  *Code Context state =  disabled<br>menuitem =  .!menu.options<br>Traceback (most recent call last):<br>  File "C:\Users\andre\github\cpython\Lib\runpy.py", line 193, in _run_module_as_main<br>    "__main__", mod_spec)<br>  File "C:\Users\andre\github\cpython\Lib\runpy.py", line 85, in _run_code<br>    exec(code, run_globals)<br>  File "C:\Users\andre\github\cpython\Lib\idlelib\__main__.py", line 7, in <module><br>    idlelib.pyshell.main()<br>  File "C:\Users\andre\github\cpython\Lib\idlelib\pyshell.py", line 1521, in main<br>    shell = flist.open_shell()<br>  File "C:\Users\andre\github\cpython\Lib\idlelib\pyshell.py", line 328, in open_shell<br>    self.pyshell = PyShell(self)<br>  File "C:\Users\andre\github\cpython\Lib\idlelib\pyshell.py", line 879, in __init__<br>    OutputWindow.__init__(self, flist, None, None)<br>  File "C:\Users\andre\github\cpython\Lib\idlelib\outwin.py", line 81, in __init__<br>    self.update_menu_state('options', '*Code Context', 'disabled')<br>  File "C:\Users\andre\github\cpython\Lib\idlelib\editor.py", line 462, in update_menu_state<br>    menuitem.entryconfig(index, state=state)<br>  File "C:\Users\andre\github\cpython\Lib\tkinter\__init__.py", line 3354, in entryconfigure<br>    return self._configure(('entryconfigure', index), cnf, kw)<br>  File "C:\Users\andre\github\cpython\Lib\tkinter\__init__.py", line 1627, in _configure<br>    self.tk.call(_flatten((self._w, cmd)) + self._options(cnf))<br>_tkinter.TclError: bad menu entry index "*Code Context"<br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">I *suspect* that it is because other places required translations to my fictitious uppercase language</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">before reaching that point, resulting in some inconsistencies ...</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"> but it seemed like a good place to stop to get some feedback</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">as to whether or not this approach would be acceptable.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small">André Roberge</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif;font-size:small"></div></div>
</blockquote></div>