New upstream version 75
Jonas Smedegaard
4 years ago
0 | 75 | |
1 | ||
2 | * Port to Python 3 - inline template and #! (Srevin Saju), | |
3 | * New icon (Srevin Saju), | |
4 | * Set focus on empty page (Martin Abente), | |
5 | * Port to GTK 3 - query module (Ibiam Chihurumnaya), | |
6 | * Remove Box2D binaries (Ibiam Chihurumnaya), | |
7 | * Port to Python 3 - missed #! (James Cameron), | |
8 | ||
9 | 74 | |
10 | ||
11 | * Fix keep error in a shared instance (James Cameron), | |
12 | * Fix harmless mime_type log error (James Cameron), | |
13 | * Fix data loss of notebook tab label during collaboration (James Cameron), | |
14 | * Use logging consistently (James Cameron), | |
15 | * Port CollabWrapper to Python 3 (James Cameron), | |
16 | * Share renaming of notebook tabs (James Cameron), | |
17 | * Share closing of notebook tabs (James Cameron), | |
18 | * Add notebook tab close confirmation alert (James Cameron), | |
19 | * Avoid close confirmation on unchanged examples or empty tabs (James Cameron), | |
20 | * Grab focus for the text view on startup (James Cameron), | |
21 | * Rename clear button (James Cameron). | |
22 | ||
23 | 73 | |
24 | ||
25 | * Update Collabwrapper to favour TelepathyGLib (Aniket Mathur), | |
26 | * Remove empty locale files (James Cameron), | |
27 | * Port to Python 3 (Aniket Mathur, James Cameron), | |
28 | * Using default acclerator (Aniket Mathur), | |
29 | * Define PyGObject versions before import (Aniket Mathur), | |
30 | * Add dark mode for embedded terminal and source view (James Cameron), | |
31 | * Fix example ordering (James Cameron), | |
32 | * Fix GTK deprecation warnings in tutorials (James Cameron), | |
33 | * Port from GObject to GLib in tutorials (James Cameron). | |
34 | ||
0 | 35 | 72 |
1 | 36 | |
2 | 37 | * Fix license inconsistencies, remove groupthink (James Cameron), |
9 | 9 | |
10 | 10 | * [How to Get Sugar on sugarlabs.org](https://sugarlabs.org/), |
11 | 11 | * [How to use Sugar](https://help.sugarlabs.org/), |
12 | * [How to use Pippy](https://help.sugarlabs.org/pippy.html) | |
12 | * [How to use Pippy](https://help.sugarlabs.org/pippy.html). | |
13 | ||
14 | How to upgrade? | |
15 | =============== | |
16 | ||
17 | On Sugar desktop systems; | |
18 | * use [My Settings](https://help.sugarlabs.org/my_settings.html), [Software Update](https://help.sugarlabs.org/my_settings.html#software-update). | |
19 | ||
20 | How to integrate? | |
21 | ================= | |
22 | ||
23 | On Debian and Ubuntu systems; | |
24 | ||
25 | ``` | |
26 | apt install sugar-pippy-activity | |
27 | ``` | |
28 | ||
29 | On Fedora systems; | |
30 | ||
31 | ``` | |
32 | dnf install sugar-pippy | |
33 | ``` | |
34 | ||
35 | Pippy depends on Python, [Sugar | |
36 | Toolkit](https://github.com/sugarlabs/sugar-toolkit-gtk3), Cairo, | |
37 | Telepathy, GTK+ 3, | |
38 | [GtkSourceView](https://wiki.gnome.org/Projects/GtkSourceView), Pango, | |
39 | Vte, Box2d and Pygame. | |
40 | ||
41 | Pippy is started by [Sugar](https://github.com/sugarlabs/sugar). | |
42 | ||
43 | Pippy is packaged by Linux distributions; | |
44 | * [Fedora package sugar-pippy](https://src.fedoraproject.org/rpms/sugar-pippy) | |
45 | * [Debian package sugar-pippy-activity](https://packages.debian.org/sugar-pippy-activity). | |
46 |
0 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
1 | <!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [ | |
2 | <!ENTITY ns_svg "http://www.w3.org/2000/svg"> | |
3 | <!ENTITY ns_xlink "http://www.w3.org/1999/xlink"> | |
4 | <!ENTITY stroke_color "#000000"> | |
5 | <!ENTITY fill_color "#FFFFFF"> | |
6 | ]><!--"--> | |
7 | <svg version="1.1" id="Pippy_activity" xmlns="&ns_svg;" xmlns:xlink="&ns_xlink;" width="47.585" height="49.326" | |
8 | viewBox="0 0 47.585 49.326" overflow="visible" enable-background="new 0 0 47.585 49.326" xml:space="preserve"> | |
9 | ||
10 | <path | |
11 | fill="&fill_color;" stroke="&stroke_color;" stroke-width="2" d="M 30.689595,16.460324 L 24.320145,12.001708 L 2.7550028,23.830689 L 23.319231,38.662412 L 45.157349,26.742438 L 36.877062,21.100925" id="path3195" /> | |
12 | <path | |
13 | fill="&fill_color;" stroke="&stroke_color;" stroke-width="2" | |
14 | nodetypes="cscscssscsssssccc" | |
15 | d="M 12.201296,21.930888 C 13.063838,20.435352 17.035411,18.617621 20.372026,18.965837 C 22.109464,19.147161 24.231003,20.786115 24.317406,21.584638 C 24.401593,22.43057 25.386617,24.647417 26.88611,24.600494 C 28.114098,24.562065 28.61488,23.562481 28.992123,22.444401 C 28.992123,22.444401 28.564434,17.493894 31.897757,15.363536 C 32.836646,14.763482 35.806711,14.411448 37.249047,15.221493 C 38.691382,16.031536 37.648261,19.495598 36.785717,20.991133 C 35.923174,22.48667 32.967872,24.980813 32.967872,24.980813 C 31.242783,27.971884 29.235995,28.5001 26.338769,28.187547 C 23.859153,27.920046 22.434219,26.128159 21.837191,24.708088 C 21.323835,23.487033 20.047743,22.524906 18.388178,22.52176 C 17.218719,22.519542 14.854476,23.017137 16.212763,25.620664 C 16.687174,26.53 18.919175,28.917592 21.08204,29.521929 C 22.919903,30.035455 26.713699,31.223552 30.30027,31.418089 C 26.770532,33.262079 21.760623,32.530604 18.909599,31.658168 C 17.361253,30.887002 9.0350995,26.651992 12.201296,21.930888 z " | |
16 | id="path2209" /> | |
17 | <path | |
18 | fill="&fill_color;" stroke="&stroke_color;" stroke-width="1" | |
19 | d="M 37.832194,18.895786 C 36.495131,19.851587 34.017797,22.097672 32.3528,21.069911" | |
20 | id="path2211" | |
21 | transform-center-y="-3.6171625" | |
22 | transform-center-x="-0.50601649" /> | |
23 | <circle | |
24 | fill="&stroke_color;" stroke="none" stroke-width="0" | |
25 | cx="33.926998" | |
26 | cy="6.073" | |
27 | r="1.927" | |
28 | id="circle2213" | |
29 | transform="matrix(0.269108,-0.4665976,-0.472839,-0.2655557,26.503175,35.608682)" | |
30 | /> | |
31 | </svg> | |
0 | <?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ | |
1 | <!ENTITY stroke_color "#666666"> | |
2 | <!ENTITY fill_color "#ffffff"> | |
3 | ]><svg height="55" id="svg1756" inkscape:version="0.92.4 (unknown)" sodipodi:docname="pippy-collect.svg" version="1.1" viewBox="0 0 14.552083 14.552084" width="55" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"> | |
4 | <defs id="defs1750"/> | |
5 | <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="24.258817" inkscape:cy="26.682316" inkscape:document-units="mm" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:snap-global="false" inkscape:window-height="702" inkscape:window-maximized="1" inkscape:window-width="1366" inkscape:window-x="0" inkscape:window-y="36" inkscape:zoom="11.2" pagecolor="#ffffff" showgrid="false" units="px"/> | |
6 | <metadata id="metadata1753"> | |
7 | <rdf:RDF> | |
8 | <cc:Work rdf:about=""> | |
9 | <dc:format>image/svg+xml</dc:format> | |
10 | <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> | |
11 | <dc:title/> | |
12 | </cc:Work> | |
13 | </rdf:RDF> | |
14 | </metadata> | |
15 | <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(0,-282.4479)"> | |
16 | <g id="g3005" transform="matrix(0.85087045,0,0,0.85087045,-1.071627,35.113386)"> | |
17 | <path d="m 9.336117,304.44728 c 0,0 -0.402123,0 -0.402123,-0.40212 v -2.6138 l 3.920699,-2.21167 3.920698,2.21167 v 2.6138 c 0,0 0,0.40212 -0.402123,0.40212 z" id="path2" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.35185757;stroke-opacity:1"/> | |
18 | <path d="m 11.888804,298.70157 -3.719326,2.07466 c -0.426633,0.22817 -0.254659,0.87592 0.228966,0.86242 v 6e-4 c 0.07708,-0.002 0.152487,-0.0228 0.219248,-0.0613 l 4.210661,-2.35221 4.083728,2.27812 c 0.547884,0.35316 1.033868,-0.51936 0.445177,-0.79926 l -3.588141,-2.0042 -0.938335,-0.52414 z" id="line14" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccc" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:&stroke_color;;stroke-width:0.30465612;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> | |
19 | <path d="m 10.912829,295.40166 v 3.82701 l 0.975715,-0.52736 0.941978,-0.52534 0.938334,0.52413 0.952849,0.51863 v -3.81707 z" id="path16" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc" style="fill:none;stroke:&stroke_color;;stroke-width:0.34670374;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
20 | <path d="m 10.860126,295.40432 2.035524,-1.17956 2.035523,1.17956 z" id="path18" inkscape:connector-curvature="0" style="fill:&stroke_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.46178851;stroke-opacity:1"/> | |
21 | <g id="g891" transform="translate(-10.532315,5.6540353)"> | |
22 | <path d="M 37.041016 16.658203 A 2.1014215 2.1014215 0 0 0 34.941406 18.759766 L 34.941406 20.216797 L 34.939453 20.216797 A 0.80831983 0.80831983 0 0 0 34.857422 20.216797 A 0.80831983 0.80831983 0 0 0 34.939453 21.830078 L 36.25 21.830078 A 0.80823902 0.80823902 0 0 1 36.25 21.832031 A 0.80823902 0.80823902 0 0 0 36.234375 21.994141 A 0.80823902 0.80823902 0 0 0 37.041016 22.800781 A 0.80823902 0.80823902 0 0 0 37.849609 21.994141 A 0.80823902 0.80823902 0 0 0 37.832031 21.830078 L 39.140625 21.830078 A 0.80831983 0.80831983 0 1 0 39.142578 20.216797 L 39.142578 18.759766 A 2.1014215 2.1014215 0 0 0 37.041016 16.658203 z " id="circle20" style="fill:&stroke_color;;stroke:none;stroke-width:1.29318237;fill-opacity:1" transform="matrix(0.31095607,0,0,0.31095607,11.791763,285.03007)"/> | |
23 | </g> | |
24 | </g> | |
25 | <path d="m 10.817019,294.04825 v -1.96782 c 0,0 0,-0.35779 -0.357786,-0.35779 H 9.2069825 c 0,0 -0.357786,0 -0.357786,0.35779 v 1.96782 z" id="path4" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.20216294;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
26 | <path d="m 4.9039105,289.69667 c 0,0 1.6617248,0.17132 1.74738,-0.68524 0.085657,-0.85657 -0.4968027,-1.62747 -0.8565581,-1.74739 -0.3597547,-0.11991 -1.4390195,-0.23983 -1.970086,0.0514 -0.5310671,0.29123 -0.9764776,0.95935 -1.0963957,1.26772 -0.1199185,0.30836 -0.2227053,1.16491 0,1.66172 0.2227053,0.4968 1.1306581,1.38762 1.1306581,1.38762 0,0 -1.2334452,0.10279 -1.7816431,0.58247 -0.5481981,0.47967 -0.9593464,0.75376 -0.9079528,1.45614 0.051393,0.70238 0.5824601,1.21631 1.130658,1.3191 0.5481979,0.10279 1.6617249,0.32549 2.1756602,0.22271 0.5139353,-0.10279 1.7131176,-0.18844 2.004349,-0.56533 0.2912293,-0.37688 0.4111475,-1.13065 0.5653281,-1.23344 0.1541799,-0.10279 0.3597547,0.10279 0.394017,0.41115 0.034259,0.30836 0.051393,0.63385 0.2398373,0.73664 0.1884422,0.10279 0.7195097,0.56533 1.2677068,0.34262 0.5481978,-0.22271 0.8736907,-0.58246 0.8565601,-0.95935 -0.017136,-0.37688 -0.034256,-1.30196 -0.9422155,-1.66172 -0.9079526,-0.35976 -2.141398,-0.51394 -2.141398,-0.51394 0,0 -0.2227053,-0.47967 -0.6681159,-0.71951 -0.4454113,-0.23983 -1.0621336,-0.58246 -1.1649207,-0.7709 -0.102787,-0.18844 0.017133,-0.58246 0.017133,-0.58246 z" id="path1265-5" inkscape:connector-curvature="0" style="fill:&fill_color;;fill-opacity:1;stroke:none;stroke-width:0.03391801px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/> | |
27 | <ellipse cx="5.1582479" cy="288.17889" id="path894-6-7-3-6" inkscape:export-xdpi="96" inkscape:export-ydpi="96" rx="0.22242011" ry="0.22327726" style="fill:#fffff8;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.26687196;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
28 | <path d="m 4.6067138,288.7958 c 0,0 0.4625417,0.32549 0.8565588,0.39402 0.394017,0.0685 0.9336487,-0.0343 0.9336487,-0.0343" id="path896-2-0-6-5" inkscape:connector-curvature="0" inkscape:export-xdpi="96" inkscape:export-ydpi="96" sodipodi:nodetypes="csc" style="fill:none;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.29035962;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
29 | <path d="m 4.9039105,289.69667 c 0,0 -0.4282794,0.49681 0.4625425,0.94221 0.8908204,0.44542 1.8249669,1.16096 1.6445921,2.60395 -0.1803733,1.44298 -0.8051645,1.66172 -1.6959864,1.8159 -0.8908211,0.15418 -2.9979565,0.35976 -3.7859911,-0.59959 -0.78803441,-0.95935 0.1027873,-2.19279 0.9422152,-2.50115 0.8394284,-0.30837 1.5760689,-0.25697 1.5760689,-0.25697" id="path1042-6" inkscape:connector-curvature="0" sodipodi:nodetypes="cszcscc" style="fill:none;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
30 | <path d="m 3.180093,285.5608 -1.2544663,-0.37386 3.0836123,-1.2677 2.9294333,1.38761 -1.5779499,0.55537" id="path1078-9" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" style="fill:#ffffff;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
31 | <path d="m 2.1937405,285.52498 v 1.29549" id="path1084-74" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.44093415;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
32 | <path d="m 3.8263228,289.26619 c 2.3104813,1.16084 2.853264,-0.10207 2.8875264,-0.616 0.034267,-0.51395 -0.7623377,-1.57179 -1.7473807,-1.61034 -0.9850437,-0.0385 -1.2578224,0.10698 -1.8019349,0.74673 -0.8413184,0.98919 -0.9163958,2.91377 0.8479506,3.9248 2.1562163,1.23558 -0.7268151,1.52631 -0.7268151,1.52631" id="path50-5-2-9-7" inkscape:connector-curvature="0" inkscape:export-xdpi="96" inkscape:export-ydpi="96" sodipodi:nodetypes="cszssc" style="fill:none;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
33 | <path d="m 3.439233,287.49884 c 0,0 0.8383264,-0.38482 1.481544,-0.35466 0.6432176,0.0301 1.1180302,0.34738 1.1180302,0.34738 l 0.1623221,-2.03992 c 0,0 -0.8079894,-0.52857 -1.4110059,-0.43812 -0.6030165,0.0904 -1.3872311,0.48657 -1.3872311,0.48657 z" id="path2757" inkscape:connector-curvature="0" style="fill:#fffff8;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
34 | <path d="m 1.9839533,286.89272 -0.2079012,0.32629" id="path1084-7-52" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.35511744;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
35 | <path d="M 2.6161924,287.12525 2.343088,286.85373" id="path1084-7-3-5" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.37128088;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
36 | <path d="m 2.1947366,287.11969 0.021518,0.3863" id="path1084-7-5-4" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.35511744;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
37 | <path d="m 8.2650379,292.75546 0.140922,-1.6099 -0.545258,1.43259 z" id="path2755" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" style="fill:&fill_color;;fill-opacity:1;stroke:none;stroke-width:0.22512613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/> | |
38 | <path d="m 6.8027644,291.76383 c 0,0 0.393592,0.0208 0.8919079,0.12169 m 0.9535322,0.23756 c 0.4165504,0.15664 0.6652564,0.37174 0.8869837,0.69431 0.4202588,0.61139 0.4019938,1.71961 -0.4475934,2.01154 -0.7427274,0.25522 -1.5418069,-0.0685 -1.713118,-0.95933 -0.1713117,-0.89083 1.2322622,-3.42533 1.2322622,-3.42533" id="path1199-7" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc" style="fill:none;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
39 | <path d="m 8.6659409,290.38215 c -0.2162241,1.23387 -0.1750284,2.14761 -0.064385,2.8701" id="path1154-4" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" style="fill:none;stroke:&stroke_color;;stroke-width:0.45260674;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
40 | </g> | |
41 | </svg>⏎ |
0 | <?xml version="1.0" ?><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ | |
1 | <!ENTITY stroke_color "#010101"> | |
2 | <!ENTITY fill_color "#FFFFFF"> | |
3 | ]><svg enable-background="new 0 0 55 55" height="55px" version="1.1" viewBox="0 0 55 55" width="55px" x="0px" xml:space="preserve" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" y="0px"><g display="block" id="activity-pippy"> | |
4 | <path d="M28.497,48.507 c5.988,0,14.88-2.838,14.88-11.185c0-9.285-7.743-10.143-10.954-11.083c-3.549-0.799-5.913-1.914-6.055-3.455 c-0.243-2.642,1.158-3.671,3.946-3.671c0,0,6.632,3.664,12.266,0.74c1.588-0.823,4.432-4.668,4.432-7.32 c0-2.653-9.181-5.719-11.967-5.719c-2.788,0-5.159,3.847-5.159,3.847c-5.574,0-11.149,5.306-11.149,10.612 c0,5.305,5.333,9.455,11.707,10.612c2.963,0.469,5.441,2.22,4.878,5.438c-0.457,2.613-2.995,5.306-8.361,5.306 c-4.252,0-13.3-0.219-14.745-4.079c-0.929-2.486,0.168-5.205,1.562-5.205l-0.027-0.16c-1.42-0.158-5.548,0.16-5.548,5.465 C8.202,45.452,17.347,48.507,28.497,48.507z" fill="&fill_color;" stroke="&stroke_color;" stroke-linecap="round" stroke-linejoin="round" stroke-width="3.5"/> | |
5 | <path d="M42.579,19.854c-2.623-0.287-6.611-2-7.467-5.022" fill="none" stroke="&stroke_color;" stroke-linecap="round" stroke-width="3"/> | |
6 | <circle cx="35.805" cy="10.96" fill="&stroke_color;" r="1.676"/> | |
7 | </g></svg><!-- " --> | |
0 | <?xml version="1.0" ?><!-- Created with Inkscape (http://www.inkscape.org/) --><!DOCTYPE svg PUBLIC '-//W3C//DTD SVG 1.1//EN' 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd' [ | |
1 | <!ENTITY stroke_color "#666666"> | |
2 | <!ENTITY fill_color "#ffffff"> | |
3 | ]><svg height="55" id="svg1756" inkscape:version="0.92.4 (unknown)" sodipodi:docname="pippy-collect.svg" version="1.1" viewBox="0 0 14.552083 14.552084" width="55" xmlns="http://www.w3.org/2000/svg" xmlns:cc="http://creativecommons.org/ns#" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" xmlns:svg="http://www.w3.org/2000/svg"> | |
4 | <defs id="defs1750"/> | |
5 | <sodipodi:namedview bordercolor="#666666" borderopacity="1.0" id="base" inkscape:current-layer="layer1" inkscape:cx="24.258817" inkscape:cy="26.682316" inkscape:document-units="mm" inkscape:pageopacity="0.0" inkscape:pageshadow="2" inkscape:snap-global="false" inkscape:window-height="702" inkscape:window-maximized="1" inkscape:window-width="1366" inkscape:window-x="0" inkscape:window-y="36" inkscape:zoom="11.2" pagecolor="#ffffff" showgrid="false" units="px"/> | |
6 | <metadata id="metadata1753"> | |
7 | <rdf:RDF> | |
8 | <cc:Work rdf:about=""> | |
9 | <dc:format>image/svg+xml</dc:format> | |
10 | <dc:type rdf:resource="http://purl.org/dc/dcmitype/StillImage"/> | |
11 | <dc:title/> | |
12 | </cc:Work> | |
13 | </rdf:RDF> | |
14 | </metadata> | |
15 | <g id="layer1" inkscape:groupmode="layer" inkscape:label="Layer 1" transform="translate(0,-282.4479)"> | |
16 | <g id="g3005" transform="matrix(0.85087045,0,0,0.85087045,-1.071627,35.113386)"> | |
17 | <path d="m 9.336117,304.44728 c 0,0 -0.402123,0 -0.402123,-0.40212 v -2.6138 l 3.920699,-2.21167 3.920698,2.21167 v 2.6138 c 0,0 0,0.40212 -0.402123,0.40212 z" id="path2" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.35185757;stroke-opacity:1"/> | |
18 | <path d="m 11.888804,298.70157 -3.719326,2.07466 c -0.426633,0.22817 -0.254659,0.87592 0.228966,0.86242 v 6e-4 c 0.07708,-0.002 0.152487,-0.0228 0.219248,-0.0613 l 4.210661,-2.35221 4.083728,2.27812 c 0.547884,0.35316 1.033868,-0.51936 0.445177,-0.79926 l -3.588141,-2.0042 -0.938335,-0.52414 z" id="line14" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccccccc" style="color:#000000;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;font-size:medium;line-height:normal;font-family:sans-serif;font-variant-ligatures:normal;font-variant-position:normal;font-variant-caps:normal;font-variant-numeric:normal;font-variant-alternates:normal;font-feature-settings:normal;text-indent:0;text-align:start;text-decoration:none;text-decoration-line:none;text-decoration-style:solid;text-decoration-color:#000000;letter-spacing:normal;word-spacing:normal;text-transform:none;writing-mode:lr-tb;direction:ltr;text-orientation:mixed;dominant-baseline:auto;baseline-shift:baseline;text-anchor:start;white-space:normal;shape-padding:0;clip-rule:nonzero;display:inline;overflow:visible;visibility:visible;opacity:1;isolation:auto;mix-blend-mode:normal;color-interpolation:sRGB;color-interpolation-filters:linearRGB;solid-color:#000000;solid-opacity:1;vector-effect:none;fill:none;fill-opacity:1;fill-rule:nonzero;stroke:&stroke_color;;stroke-width:0.30465612;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-dashoffset:0;stroke-opacity:1;color-rendering:auto;image-rendering:auto;shape-rendering:auto;text-rendering:auto;enable-background:accumulate"/> | |
19 | <path d="m 10.912829,295.40166 v 3.82701 l 0.975715,-0.52736 0.941978,-0.52534 0.938334,0.52413 0.952849,0.51863 v -3.81707 z" id="path16" inkscape:connector-curvature="0" sodipodi:nodetypes="cccccccc" style="fill:none;stroke:&stroke_color;;stroke-width:0.34670374;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
20 | <path d="m 10.860126,295.40432 2.035524,-1.17956 2.035523,1.17956 z" id="path18" inkscape:connector-curvature="0" style="fill:&stroke_color;;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.46178851;stroke-opacity:1"/> | |
21 | <g id="g891" transform="translate(-10.532315,5.6540353)"> | |
22 | <path d="M 37.041016 16.658203 A 2.1014215 2.1014215 0 0 0 34.941406 18.759766 L 34.941406 20.216797 L 34.939453 20.216797 A 0.80831983 0.80831983 0 0 0 34.857422 20.216797 A 0.80831983 0.80831983 0 0 0 34.939453 21.830078 L 36.25 21.830078 A 0.80823902 0.80823902 0 0 1 36.25 21.832031 A 0.80823902 0.80823902 0 0 0 36.234375 21.994141 A 0.80823902 0.80823902 0 0 0 37.041016 22.800781 A 0.80823902 0.80823902 0 0 0 37.849609 21.994141 A 0.80823902 0.80823902 0 0 0 37.832031 21.830078 L 39.140625 21.830078 A 0.80831983 0.80831983 0 1 0 39.142578 20.216797 L 39.142578 18.759766 A 2.1014215 2.1014215 0 0 0 37.041016 16.658203 z " id="circle20" style="fill:&stroke_color;;stroke:none;stroke-width:1.29318237;fill-opacity:1" transform="matrix(0.31095607,0,0,0.31095607,11.791763,285.03007)"/> | |
23 | </g> | |
24 | </g> | |
25 | <path d="m 10.817019,294.04825 v -1.96782 c 0,0 0,-0.35779 -0.357786,-0.35779 H 9.2069825 c 0,0 -0.357786,0 -0.357786,0.35779 v 1.96782 z" id="path4" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.20216294;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
26 | <path d="m 4.9039105,289.69667 c 0,0 1.6617248,0.17132 1.74738,-0.68524 0.085657,-0.85657 -0.4968027,-1.62747 -0.8565581,-1.74739 -0.3597547,-0.11991 -1.4390195,-0.23983 -1.970086,0.0514 -0.5310671,0.29123 -0.9764776,0.95935 -1.0963957,1.26772 -0.1199185,0.30836 -0.2227053,1.16491 0,1.66172 0.2227053,0.4968 1.1306581,1.38762 1.1306581,1.38762 0,0 -1.2334452,0.10279 -1.7816431,0.58247 -0.5481981,0.47967 -0.9593464,0.75376 -0.9079528,1.45614 0.051393,0.70238 0.5824601,1.21631 1.130658,1.3191 0.5481979,0.10279 1.6617249,0.32549 2.1756602,0.22271 0.5139353,-0.10279 1.7131176,-0.18844 2.004349,-0.56533 0.2912293,-0.37688 0.4111475,-1.13065 0.5653281,-1.23344 0.1541799,-0.10279 0.3597547,0.10279 0.394017,0.41115 0.034259,0.30836 0.051393,0.63385 0.2398373,0.73664 0.1884422,0.10279 0.7195097,0.56533 1.2677068,0.34262 0.5481978,-0.22271 0.8736907,-0.58246 0.8565601,-0.95935 -0.017136,-0.37688 -0.034256,-1.30196 -0.9422155,-1.66172 -0.9079526,-0.35976 -2.141398,-0.51394 -2.141398,-0.51394 0,0 -0.2227053,-0.47967 -0.6681159,-0.71951 -0.4454113,-0.23983 -1.0621336,-0.58246 -1.1649207,-0.7709 -0.102787,-0.18844 0.017133,-0.58246 0.017133,-0.58246 z" id="path1265-5" inkscape:connector-curvature="0" style="fill:&fill_color;;fill-opacity:1;stroke:none;stroke-width:0.03391801px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/> | |
27 | <ellipse cx="5.1582479" cy="288.17889" id="path894-6-7-3-6" inkscape:export-xdpi="96" inkscape:export-ydpi="96" rx="0.22242011" ry="0.22327726" style="fill:#fffff8;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.26687196;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
28 | <path d="m 4.6067138,288.7958 c 0,0 0.4625417,0.32549 0.8565588,0.39402 0.394017,0.0685 0.9336487,-0.0343 0.9336487,-0.0343" id="path896-2-0-6-5" inkscape:connector-curvature="0" inkscape:export-xdpi="96" inkscape:export-ydpi="96" sodipodi:nodetypes="csc" style="fill:none;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.29035962;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
29 | <path d="m 4.9039105,289.69667 c 0,0 -0.4282794,0.49681 0.4625425,0.94221 0.8908204,0.44542 1.8249669,1.16096 1.6445921,2.60395 -0.1803733,1.44298 -0.8051645,1.66172 -1.6959864,1.8159 -0.8908211,0.15418 -2.9979565,0.35976 -3.7859911,-0.59959 -0.78803441,-0.95935 0.1027873,-2.19279 0.9422152,-2.50115 0.8394284,-0.30837 1.5760689,-0.25697 1.5760689,-0.25697" id="path1042-6" inkscape:connector-curvature="0" sodipodi:nodetypes="cszcscc" style="fill:none;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
30 | <path d="m 3.180093,285.5608 -1.2544663,-0.37386 3.0836123,-1.2677 2.9294333,1.38761 -1.5779499,0.55537" id="path1078-9" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccc" style="fill:#ffffff;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
31 | <path d="m 2.1937405,285.52498 v 1.29549" id="path1084-74" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.44093415;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
32 | <path d="m 3.8263228,289.26619 c 2.3104813,1.16084 2.853264,-0.10207 2.8875264,-0.616 0.034267,-0.51395 -0.7623377,-1.57179 -1.7473807,-1.61034 -0.9850437,-0.0385 -1.2578224,0.10698 -1.8019349,0.74673 -0.8413184,0.98919 -0.9163958,2.91377 0.8479506,3.9248 2.1562163,1.23558 -0.7268151,1.52631 -0.7268151,1.52631" id="path50-5-2-9-7" inkscape:connector-curvature="0" inkscape:export-xdpi="96" inkscape:export-ydpi="96" sodipodi:nodetypes="cszssc" style="fill:none;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
33 | <path d="m 3.439233,287.49884 c 0,0 0.8383264,-0.38482 1.481544,-0.35466 0.6432176,0.0301 1.1180302,0.34738 1.1180302,0.34738 l 0.1623221,-2.03992 c 0,0 -0.8079894,-0.52857 -1.4110059,-0.43812 -0.6030165,0.0904 -1.3872311,0.48657 -1.3872311,0.48657 z" id="path2757" inkscape:connector-curvature="0" style="fill:#fffff8;fill-opacity:1;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:butt;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
34 | <path d="m 1.9839533,286.89272 -0.2079012,0.32629" id="path1084-7-52" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.35511744;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
35 | <path d="M 2.6161924,287.12525 2.343088,286.85373" id="path1084-7-3-5" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.37128088;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
36 | <path d="m 2.1947366,287.11969 0.021518,0.3863" id="path1084-7-5-4" inkscape:connector-curvature="0" style="fill:none;stroke:&stroke_color;;stroke-width:0.35511744;stroke-linecap:round;stroke-linejoin:miter;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
37 | <path d="m 8.2650379,292.75546 0.140922,-1.6099 -0.545258,1.43259 z" id="path2755" inkscape:connector-curvature="0" sodipodi:nodetypes="cccc" style="fill:&fill_color;;fill-opacity:1;stroke:none;stroke-width:0.22512613px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"/> | |
38 | <path d="m 6.8027644,291.76383 c 0,0 0.393592,0.0208 0.8919079,0.12169 m 0.9535322,0.23756 c 0.4165504,0.15664 0.6652564,0.37174 0.8869837,0.69431 0.4202588,0.61139 0.4019938,1.71961 -0.4475934,2.01154 -0.7427274,0.25522 -1.5418069,-0.0685 -1.713118,-0.95933 -0.1713117,-0.89083 1.2322622,-3.42533 1.2322622,-3.42533" id="path1199-7" inkscape:connector-curvature="0" sodipodi:nodetypes="ccccccc" style="fill:none;stroke:&stroke_color;;stroke-width:0.63035321;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
39 | <path d="m 8.6659409,290.38215 c -0.2162241,1.23387 -0.1750284,2.14761 -0.064385,2.8701" id="path1154-4" inkscape:connector-curvature="0" sodipodi:nodetypes="cc" style="fill:none;stroke:&stroke_color;;stroke-width:0.45260674;stroke-linecap:round;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"/> | |
40 | </g> | |
41 | </svg>⏎ |
0 | 0 | [Activity] |
1 | 1 | name = Pippy |
2 | 2 | bundle_id = org.laptop.Pippy |
3 | exec = sugar-activity pippy_app.PippyActivity | |
3 | exec = sugar-activity3 pippy_app.PippyActivity | |
4 | 4 | icon = activity-icon |
5 | activity_version = 72 | |
5 | activity_version = 75 | |
6 | 6 | max_participants = 4 |
7 | 7 | mime_types = text/x-python |
8 | 8 | show_launcher = yes |
20 | 20 | from gettext import gettext as _ |
21 | 21 | |
22 | 22 | from gi import require_version |
23 | require_version('Gdk', '3.0') | |
24 | require_version('Gtk', '3.0') | |
25 | from gi.repository import Gdk | |
23 | 26 | from gi.repository import Gtk |
24 | from gi.repository import Gdk | |
25 | 27 | from gi.repository import Pango |
26 | 28 | try: |
27 | 29 | require_version('Vte', '2.91') |
67 | 69 | 'icon-color': profile.get_color().to_string(), |
68 | 70 | 'mime_type': 'text/x-python', |
69 | 71 | } |
70 | for k, v in metadata.items(): | |
72 | for k, v in list(metadata.items()): | |
71 | 73 | jobject.metadata[k] = v # dict.update method is missing =( |
72 | 74 | jobject.file_path = os.path.join(get_bundle_path(), 'pippy_app.py') |
73 | 75 | datastore.write(jobject) |
122 | 124 | separator.show() |
123 | 125 | |
124 | 126 | stop_button = StopButton(self) |
125 | stop_button.props.accelerator = '<Ctrl>q' | |
126 | 127 | toolbox.toolbar.insert(stop_button, -1) |
127 | 128 | stop_button.show() |
128 | 129 | |
176 | 177 | self._pid = self._vte.fork_command_full( |
177 | 178 | Vte.PtyFlags.DEFAULT, |
178 | 179 | bundle_path, |
179 | ['/bin/sh', '-c', 'python %s/pippy_app.py; sleep 1' % bundle_path], | |
180 | ['/bin/sh', '-c', 'python3 %s/pippy_app.py; sleep 1' % bundle_path], | |
180 | 181 | ["PYTHONPATH=%s/library" % bundle_path], |
181 | 182 | GLib.SpawnFlags.DO_NOT_REAP_CHILD, |
182 | 183 | None, |
218 | 219 | sys.path[0:0] = [library_path] |
219 | 220 | g = globals() |
220 | 221 | g['__name__'] = '__main__' |
221 | execfile(pippy_app_path, g, g) # start pygame | |
222 | exec(compile(open(pippy_app_path, "rb").read(), pippy_app_path, 'exec'), g, g) # start pygame | |
222 | 223 | sys.exit(0) |
223 | 224 | super(PyGameActivity, self).__init__(handle) |
224 | 225 | from gi.repository import GObject |
236 | 237 | toolbox.toolbar.insert(separator, -1) |
237 | 238 | separator.show() |
238 | 239 | stop_button = StopButton(self) |
239 | stop_button.props.accelerator = '<Ctrl>q' | |
240 | 240 | toolbox.toolbar.insert(stop_button, -1) |
241 | 241 | stop_button.show() |
242 | 242 | toolbox.toolbar.show_all() |
15 | 15 | # Foundation, 51 Franklin Street, Suite 500 Boston, MA 02110-1335 USA |
16 | 16 | |
17 | 17 | ''' |
18 | The wrapper module provides an abstraction over the sugar | |
18 | The wrapper module provides an abstraction over the Sugar | |
19 | 19 | collaboration system. |
20 | 20 | |
21 | 21 | Using CollabWrapper |
22 | 22 | ------------------- |
23 | 1. Implement the `get_data` and `set_data` methods in your activity | |
24 | class:: | |
23 | 1. Add `get_data` and `set_data` methods to the activity class:: | |
25 | 24 | |
26 | 25 | def get_data(self): |
27 | 26 | # return plain python objects - things that can be encoded |
34 | 33 | # data will be the same object returned by get_data |
35 | 34 | self._entry.set_text(data.get('text')) |
36 | 35 | |
37 | 2. Make your CollabWrapper instance:: | |
36 | 2. Make a CollabWrapper instance:: | |
38 | 37 | |
39 | 38 | def __init__(self, handle): |
40 | 39 | sugar3.activity.activity.Activity.__init__(self, handle) |
41 | 40 | self._collab = CollabWrapper(self) |
42 | 41 | self._collab.connect('message', self.__message_cb) |
43 | 42 | |
44 | # setup your activity | |
43 | # setup your activity here | |
45 | 44 | |
46 | 45 | self._collab.setup() |
47 | 46 | |
48 | 3. Post any changes to the CollabWrapper. The changes will be sent to | |
49 | other users if any are connected:: | |
47 | 3. Post any changes of shared state to the CollabWrapper. The changes | |
48 | will be sent to other buddies if any are connected, for example:: | |
50 | 49 | |
51 | 50 | def __entry_changed_cb(self, *args): |
52 | 51 | self._collab.post(dict( |
54 | 53 | new_text=self._entry.get_text() |
55 | 54 | )) |
56 | 55 | |
57 | 4. Handle incoming messages:: | |
58 | ||
59 | def __message_cb(self, collab, buddy, message): | |
56 | 4. Handle incoming messages, for example:: | |
57 | ||
58 | def __message_cb(self, collab, buddy, msg): | |
60 | 59 | action = msg.get('action') |
61 | 60 | if action == 'entry_changed': |
62 | 61 | self._entry.set_text(msg.get('new_text')) |
68 | 67 | import socket |
69 | 68 | from gettext import gettext as _ |
70 | 69 | |
70 | import gi | |
71 | gi.require_version('TelepathyGLib', '0.12') | |
71 | 72 | from gi.repository import GObject |
72 | 73 | from gi.repository import Gio |
73 | 74 | from gi.repository import GLib |
75 | from gi.repository import TelepathyGLib | |
74 | 76 | import dbus |
75 | ||
76 | from telepathy.interfaces import \ | |
77 | CHANNEL_INTERFACE, \ | |
78 | CHANNEL_INTERFACE_GROUP, \ | |
79 | CHANNEL_TYPE_TEXT, \ | |
80 | CHANNEL_TYPE_FILE_TRANSFER, \ | |
81 | CONN_INTERFACE_ALIASING, \ | |
82 | CHANNEL, \ | |
83 | CLIENT | |
84 | from telepathy.constants import \ | |
85 | CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES, \ | |
86 | CONNECTION_HANDLE_TYPE_CONTACT, \ | |
87 | CHANNEL_TEXT_MESSAGE_TYPE_NORMAL, \ | |
88 | SOCKET_ADDRESS_TYPE_UNIX, \ | |
89 | SOCKET_ACCESS_CONTROL_LOCALHOST | |
90 | from telepathy.client import Connection, Channel | |
77 | from dbus import PROPERTIES_IFACE | |
78 | ||
79 | CHANNEL_INTERFACE = TelepathyGLib.IFACE_CHANNEL | |
80 | CHANNEL_INTERFACE_GROUP = TelepathyGLib.IFACE_CHANNEL_INTERFACE_GROUP | |
81 | CHANNEL_TYPE_TEXT = TelepathyGLib.IFACE_CHANNEL_TYPE_TEXT | |
82 | CHANNEL_TYPE_FILE_TRANSFER = TelepathyGLib.IFACE_CHANNEL_TYPE_FILE_TRANSFER | |
83 | CONN_INTERFACE_ALIASING = TelepathyGLib.IFACE_CONNECTION_INTERFACE_ALIASING | |
84 | CONN_INTERFACE = TelepathyGLib.IFACE_CONNECTION | |
85 | CHANNEL = TelepathyGLib.IFACE_CHANNEL | |
86 | CLIENT = TelepathyGLib.IFACE_CLIENT | |
87 | CHANNEL_GROUP_FLAG_CHANNEL_SPECIFIC_HANDLES = \ | |
88 | TelepathyGLib.ChannelGroupFlags.CHANNEL_SPECIFIC_HANDLES | |
89 | CONNECTION_HANDLE_TYPE_CONTACT = TelepathyGLib.HandleType.CONTACT | |
90 | CHANNEL_TEXT_MESSAGE_TYPE_NORMAL = TelepathyGLib.ChannelTextMessageType.NORMAL | |
91 | SOCKET_ADDRESS_TYPE_UNIX = TelepathyGLib.SocketAddressType.UNIX | |
92 | SOCKET_ACCESS_CONTROL_LOCALHOST = TelepathyGLib.SocketAccessControl.LOCALHOST | |
91 | 93 | |
92 | 94 | from sugar3.presence import presenceservice |
93 | 95 | from sugar3.activity.activity import SCOPE_PRIVATE |
94 | 96 | from sugar3.graphics.alert import NotifyAlert |
95 | 97 | |
96 | 98 | import logging |
97 | _logger = logging.getLogger('text-channel-wrapper') | |
99 | _logger = logging.getLogger('CollabWrapper') | |
98 | 100 | |
99 | 101 | ACTION_INIT_REQUEST = '!!ACTION_INIT_REQUEST' |
100 | 102 | ACTION_INIT_RESPONSE = '!!ACTION_INIT_RESPONSE' |
103 | 105 | |
104 | 106 | class CollabWrapper(GObject.GObject): |
105 | 107 | ''' |
106 | The collaboration wrapper provides a high level abstraction over the | |
107 | collaboration system. The wrapper deals with setting up the channels, | |
108 | encoding and decoding messages, initialization and alerting the user | |
109 | to the status. | |
110 | ||
111 | When a user joins the activity, it will query the leader for the | |
112 | contents. The leader will return the result of the activity's | |
113 | `get_data` function which will be passed to the `set_data` function | |
114 | on the new user's computer. | |
115 | ||
116 | The `message` signal is called when a message is received from a | |
117 | buddy. It has 2 arguments. The first is the buddy, as a | |
118 | :class:`sugar3.presence.buddy.Buddy`. The second is the decoded | |
119 | content of the message, same as that posted by the other instance. | |
120 | ||
121 | The `joined` signal is emitted when the buddy joins a running | |
122 | activity. If the user shares and activity, the joined signal | |
123 | is not emitted. By the time this signal is emitted, the channels | |
124 | will be setup so all messages will flow through. | |
125 | ||
126 | The `buddy_joined` and `buddy_left` signals are emitted when | |
127 | another user joins or leaves the activity. They both a | |
128 | :class:`sugar3.presence.buddy.Buddy` as their only argument. | |
108 | The wrapper provides a high level abstraction over the | |
109 | collaboration system. The wrapper deals with setting up the | |
110 | channels, encoding and decoding messages, initialization and | |
111 | alerting the caller to the status. | |
112 | ||
113 | An activity instance is initially private, but may be shared. Once | |
114 | shared, an instance will remain shared for as long as the activity | |
115 | runs. On stop, the journal will preserve the instance as shared, | |
116 | and on resume the instance will be shared again. | |
117 | ||
118 | When the caller shares an activity instance, they are the leader, | |
119 | and other buddies may join. The instance is now a shared activity. | |
120 | ||
121 | When the caller joins a shared activity, the leader will call | |
122 | `get_data`, and the caller's `set_data` will be called with the | |
123 | result. | |
124 | ||
125 | The `joined` signal is emitted when the caller joins a shared | |
126 | activity. One or more `buddy_joined` signals will be emitted before | |
127 | this signal. The signal is not emitted to the caller who first | |
128 | shared the activity. There are no arguments. | |
129 | ||
130 | The `buddy_joined` signal is emitted when another buddy joins the | |
131 | shared activity. At least one will be emitted before the `joined` | |
132 | signal. The caller will never be mentioned, but is assumed to be | |
133 | part of the set. The signal passes a | |
134 | :class:`sugar3.presence.buddy.Buddy` as the only argument. | |
135 | ||
136 | The `buddy_left` signal is emitted when another user leaves the | |
137 | shared activity. The signal is not emitted during quit. The signal | |
138 | passes a :class:`sugar3.presence.buddy.Buddy` as the only argument. | |
139 | ||
140 | Any buddy may call `post` to send a message to all buddies. Each | |
141 | buddy will receive a `message` signal. | |
142 | ||
143 | The `message` signal is emitted when a `post` is received from any | |
144 | buddy. The signal has two arguments. The first is a | |
145 | :class:`sugar3.presence.buddy.Buddy`. The second is the message. | |
146 | ||
147 | Any buddy may call `send_file_memory` or `send_file_file` to | |
148 | transfer a file to all buddies. A description is to be given. | |
149 | Each buddy will receive an `incoming_file` signal. | |
129 | 150 | |
130 | 151 | The `incoming_file` signal is emitted when a file transfer is |
131 | received from a buddy. The first argument is the object representing | |
132 | the transfer, as a | |
133 | :class:`sugar3.presence.filetransfer.IncomingFileTransfer`. The seccond | |
134 | argument is the description, as passed to the `send_file_*` function | |
135 | on the sender's client | |
152 | received. The signal has two arguments. The first is a | |
153 | :class:`IncomingFileTransfer`. The second is the description. | |
136 | 154 | ''' |
137 | 155 | |
138 | 156 | message = GObject.Signal('message', arg_types=[object, object]) |
142 | 160 | incoming_file = GObject.Signal('incoming_file', arg_types=[object, object]) |
143 | 161 | |
144 | 162 | def __init__(self, activity): |
163 | _logger.debug('__init__') | |
145 | 164 | GObject.GObject.__init__(self) |
146 | 165 | self.activity = activity |
147 | 166 | self.shared_activity = activity.shared_activity |
151 | 170 | |
152 | 171 | def setup(self): |
153 | 172 | ''' |
154 | Setup must be called to so that the activity can join or share | |
173 | Setup must be called so that the activity can join or share | |
155 | 174 | if appropriate. |
156 | 175 | |
157 | 176 | .. note:: |
158 | 177 | As soon as setup is called, any signal, `get_data` or |
159 | `set_data` call must be made. This means that your | |
160 | activity must have set up enough so these functions can | |
161 | work. For example, place this at the end of the activity's | |
178 | `set_data` call may occur. This means that the activity | |
179 | must have set up enough so these functions can work. For | |
180 | example, call setup at the end of the activity | |
162 | 181 | `__init__` function. |
163 | 182 | ''' |
183 | _logger.debug('setup') | |
164 | 184 | # Some glue to know if we are launching, joining, or resuming |
165 | 185 | # a shared activity. |
166 | 186 | if self.shared_activity: |
198 | 218 | |
199 | 219 | def __shared_cb(self, sender): |
200 | 220 | ''' Callback for when activity is shared. ''' |
221 | _logger.debug('__shared_cb') | |
222 | # FIXME: may be called twice, but we should only act once | |
201 | 223 | self.shared_activity = self.activity.shared_activity |
202 | 224 | self._setup_text_channel() |
203 | 225 | self._listen_for_channels() |
204 | _logger.debug('I am sharing...') | |
205 | 226 | |
206 | 227 | def __joined_cb(self, sender): |
207 | 228 | '''Callback for when an activity is joined.''' |
229 | _logger.debug('__joined_cb') | |
208 | 230 | self.shared_activity = self.activity.shared_activity |
209 | 231 | if not self.shared_activity: |
210 | 232 | return |
214 | 236 | self._init_waiting = True |
215 | 237 | self.post({'action': ACTION_INIT_REQUEST}) |
216 | 238 | |
217 | _logger.debug('I joined a shared activity.') | |
239 | for buddy in self.shared_activity.get_joined_buddies(): | |
240 | self.buddy_joined.emit(buddy) | |
241 | ||
218 | 242 | self.joined.emit() |
219 | 243 | |
220 | 244 | def _setup_text_channel(self): |
221 | 245 | ''' Set up a text channel to use for collaboration. ''' |
246 | _logger.debug('_setup_text_channel') | |
222 | 247 | self._text_channel = _TextChannelWrapper( |
223 | 248 | self.shared_activity.telepathy_text_chan, |
224 | 249 | self.shared_activity.telepathy_conn) |
233 | 258 | self.shared_activity.connect('buddy-left', self.__buddy_left_cb) |
234 | 259 | |
235 | 260 | def _listen_for_channels(self): |
261 | _logger.debug('_listen_for_channels') | |
236 | 262 | conn = self.shared_activity.telepathy_conn |
237 | 263 | conn.connect_to_signal('NewChannels', self.__new_channels_cb) |
238 | 264 | |
239 | 265 | def __new_channels_cb(self, channels): |
266 | _logger.debug('__new_channels_cb') | |
240 | 267 | conn = self.shared_activity.telepathy_conn |
241 | 268 | for path, props in channels: |
242 | 269 | if props[CHANNEL + '.Requested']: |
247 | 274 | self._handle_ft_channel(conn, path, props) |
248 | 275 | |
249 | 276 | def _handle_ft_channel(self, conn, path, props): |
277 | _logger.debug('_handle_ft_channel') | |
250 | 278 | ft = IncomingFileTransfer(conn, path, props) |
251 | 279 | if ft.description == ACTION_INIT_RESPONSE: |
252 | ft.connect('notify::state', self.__notify_ft_state_cb) | |
280 | ft.connect('ready', self.__ready_cb) | |
253 | 281 | ft.accept_to_memory() |
254 | 282 | else: |
255 | 283 | desc = json.loads(ft.description) |
256 | 284 | self.incoming_file.emit(ft, desc) |
257 | 285 | |
258 | def __notify_ft_state_cb(self, ft, pspec): | |
259 | if ft.props.state == FT_STATE_COMPLETED and self._init_waiting: | |
260 | stream = ft.props.output | |
286 | def __ready_cb(self, ft, stream): | |
287 | _logger.debug('__ready_cb') | |
288 | if self._init_waiting: | |
261 | 289 | stream.close(None) |
262 | 290 | # FIXME: The data prop seems to just be the raw pointer |
263 | 291 | gbytes = stream.steal_as_bytes() |
264 | 292 | data = gbytes.get_data() |
265 | logging.debug('Got init data from buddy: %s', data) | |
293 | _logger.debug('Got init data from buddy: %r', data) | |
266 | 294 | data = json.loads(data) |
267 | 295 | self.activity.set_data(data) |
268 | 296 | self._init_waiting = False |
269 | 297 | |
270 | 298 | def __received_cb(self, buddy, msg): |
271 | 299 | '''Process a message when it is received.''' |
300 | _logger.debug('__received_cb') | |
272 | 301 | action = msg.get('action') |
273 | if action == ACTION_INIT_REQUEST and self._leader: | |
274 | data = self.activity.get_data() | |
275 | data = json.dumps(data) | |
276 | OutgoingBlobTransfer( | |
277 | buddy, | |
278 | self.shared_activity.telepathy_conn, | |
279 | data, | |
280 | self.get_client_name(), | |
281 | ACTION_INIT_RESPONSE, | |
282 | ACTIVITY_FT_MIME) | |
302 | if action == ACTION_INIT_REQUEST: | |
303 | if self._leader: | |
304 | data = self.activity.get_data() | |
305 | if data is not None: | |
306 | data = json.dumps(data) | |
307 | OutgoingBlobTransfer( | |
308 | buddy, | |
309 | self.shared_activity.telepathy_conn, | |
310 | data.encode(), | |
311 | self.get_client_name(), | |
312 | ACTION_INIT_RESPONSE, | |
313 | ACTIVITY_FT_MIME) | |
283 | 314 | return |
284 | 315 | |
285 | 316 | if buddy: |
291 | 322 | |
292 | 323 | def send_file_memory(self, buddy, data, description): |
293 | 324 | ''' |
294 | Send a 1-to-1 transfer from memory to a given buddy. They will | |
295 | get the file transfer and description through the `incoming_transfer` | |
296 | signal. | |
325 | Send a one to one file transfer from memory to a buddy. The | |
326 | buddy will get the file transfer and description through the | |
327 | `incoming_transfer` signal. | |
297 | 328 | |
298 | 329 | Args: |
299 | buddy (sugar3.presence.buddy.Buddy), buddy to offer the transfer to | |
300 | data (str), the data to offer to the buddy via the transfer | |
330 | buddy (sugar3.presence.buddy.Buddy), buddy to send to. | |
331 | data (str), the data to send. | |
301 | 332 | description (object), a json encodable description for the |
302 | transfer. This will be given to the `incoming_transfer` signal | |
303 | of the transfer | |
333 | transfer. This will be given to the | |
334 | `incoming_transfer` signal at the buddy. | |
304 | 335 | ''' |
305 | 336 | OutgoingBlobTransfer( |
306 | 337 | buddy, |
312 | 343 | |
313 | 344 | def send_file_file(self, buddy, path, description): |
314 | 345 | ''' |
315 | Send a 1-to-1 transfer from a file to a given buddy. They will | |
316 | get the file transfer and description through the `incoming_transfer` | |
317 | signal. | |
346 | Send a one to one file transfer from a filesystem path to a | |
347 | given buddy. The buddy will get the file transfer and | |
348 | description through the `incoming_transfer` signal. | |
318 | 349 | |
319 | 350 | Args: |
320 | buddy (sugar3.presence.buddy.Buddy), buddy to offer the transfer to | |
321 | path (str), path of the file to send to the buddy | |
351 | buddy (sugar3.presence.buddy.Buddy), buddy to send to. | |
352 | path (str), path of the file containing the data to send. | |
322 | 353 | description (object), a json encodable description for the |
323 | transfer. This will be given to the `incoming_transfer` signal | |
324 | of the transfer | |
354 | transfer. This will be given to the | |
355 | `incoming_transfer` signal at the buddy. | |
325 | 356 | ''' |
326 | 357 | OutgoingFileTransfer( |
327 | 358 | buddy, |
333 | 364 | |
334 | 365 | def post(self, msg): |
335 | 366 | ''' |
336 | Broadcast a message to the other buddies if the activity is | |
337 | shared. If it is not shared, the message will not be send | |
338 | at all. | |
367 | Send a message to all buddies. If the activity is not shared, | |
368 | no message is sent. | |
339 | 369 | |
340 | 370 | Args: |
341 | msg (object): json encodable object to send to the other | |
342 | buddies, eg. :class:`dict` or :class:`str`. | |
371 | msg (object): json encodable object to send, | |
372 | eg. :class:`dict` or :class:`str`. | |
343 | 373 | ''' |
344 | 374 | if self._text_channel is not None: |
345 | 375 | self._text_channel.post(msg) |
365 | 395 | ''' |
366 | 396 | Boolean of if this client is the leader in this activity. The |
367 | 397 | way the leader is decided may change, however there should only |
368 | ever be 1 leader for an activity. | |
398 | ever be one leader for an activity. | |
369 | 399 | ''' |
370 | 400 | return self._leader |
401 | ||
371 | 402 | |
372 | 403 | FT_STATE_NONE = 0 |
373 | 404 | FT_STATE_PENDING = 1 |
401 | 432 | |
402 | 433 | GObject Props: |
403 | 434 | state (FT_STATE_*), current state of the transfer |
404 | transferred_bytes (int), number of bytes transfered so far | |
435 | transferred_bytes (int), number of bytes transferred so far | |
405 | 436 | ''' |
406 | 437 | |
407 | 438 | def __init__(self): |
430 | 461 | self.channel[CHANNEL_TYPE_FILE_TRANSFER].connect_to_signal( |
431 | 462 | 'InitialOffsetDefined', self.__initial_offset_defined_cb) |
432 | 463 | |
433 | channel_properties = self.channel[dbus.PROPERTIES_IFACE] | |
464 | channel_properties = self.channel[PROPERTIES_IFACE] | |
434 | 465 | |
435 | 466 | props = channel_properties.GetAll(CHANNEL_TYPE_FILE_TRANSFER) |
436 | 467 | self._state = props['State'] |
440 | 471 | self.mime_type = props['ContentType'] |
441 | 472 | |
442 | 473 | def __transferred_bytes_changed_cb(self, transferred_bytes): |
443 | logging.debug('__transferred_bytes_changed_cb %r', transferred_bytes) | |
474 | _logger.debug('__transferred_bytes_changed_cb %r', transferred_bytes) | |
444 | 475 | self.props.transferred_bytes = transferred_bytes |
445 | 476 | |
446 | 477 | def _set_transferred_bytes(self, transferred_bytes): |
455 | 486 | setter=_set_transferred_bytes) |
456 | 487 | |
457 | 488 | def __initial_offset_defined_cb(self, offset): |
458 | logging.debug('__initial_offset_defined_cb %r', offset) | |
489 | _logger.debug('__initial_offset_defined_cb %r', offset) | |
459 | 490 | self.initial_offset = offset |
460 | 491 | |
461 | 492 | def __state_changed_cb(self, state, reason): |
462 | logging.debug('__state_changed_cb %r %r', state, reason) | |
493 | _logger.debug('__state_changed_cb %r %r', state, reason) | |
463 | 494 | self.reason_last_change = reason |
464 | 495 | self.props.state = state |
465 | 496 | |
494 | 525 | it is a :class:`Gio.MemoryOutputStream`. |
495 | 526 | ''' |
496 | 527 | |
528 | ready = GObject.Signal('ready', arg_types=[object]) | |
529 | ||
497 | 530 | def __init__(self, connection, object_path, props): |
498 | 531 | _BaseFileTransfer.__init__(self) |
499 | 532 | |
500 | channel = Channel(connection.bus_name, object_path) | |
533 | channel = {} | |
534 | proxy = dbus.Bus().get_object(connection.bus_name, object_path) | |
535 | channel[PROPERTIES_IFACE] = dbus.Interface(proxy, PROPERTIES_IFACE) | |
536 | channel[CHANNEL] = dbus.Interface(proxy, CHANNEL) | |
537 | channel[CHANNEL_TYPE_FILE_TRANSFER] = dbus.Interface( | |
538 | proxy, CHANNEL_TYPE_FILE_TRANSFER) | |
501 | 539 | self.set_channel(channel) |
502 | 540 | |
503 | 541 | self.connect('notify::state', self.__notify_state_cb) |
529 | 567 | Accept the file transfer. Once the state is FT_STATE_OPEN, a |
530 | 568 | :class:`Gio.MemoryOutputStream` accessible via the output prop. |
531 | 569 | ''' |
570 | self._destination_path = None | |
532 | 571 | self._accept() |
533 | 572 | |
534 | 573 | def _accept(self): |
541 | 580 | byte_arrays=True) |
542 | 581 | |
543 | 582 | def __notify_state_cb(self, file_transfer, pspec): |
544 | logging.debug('__notify_state_cb %r', self.props.state) | |
583 | _logger.debug('__notify_state_cb %r', self.props.state) | |
545 | 584 | if self.props.state == FT_STATE_OPEN: |
546 | 585 | # Need to hold a reference to the socket so that python doesn't |
547 | 586 | # close the fd when it goes out of scope |
558 | 597 | else: |
559 | 598 | self._output_stream = destination_file.append_to() |
560 | 599 | else: |
561 | self._output_stream = Gio.MemoryOutputStream.new_resizable() | |
600 | if hasattr(Gio.MemoryOutputStream, 'new_resizable'): | |
601 | self._output_stream = \ | |
602 | Gio.MemoryOutputStream.new_resizable() | |
603 | else: | |
604 | self._output_stream = Gio.MemoryOutputStream() | |
562 | 605 | |
563 | 606 | self._output_stream.splice_async( |
564 | 607 | input_stream, |
565 | 608 | Gio.OutputStreamSpliceFlags.CLOSE_SOURCE | |
566 | 609 | Gio.OutputStreamSpliceFlags.CLOSE_TARGET, |
567 | GLib.PRIORITY_LOW, None, None, None) | |
610 | GLib.PRIORITY_LOW, None, self.__splice_done_cb, None) | |
611 | ||
612 | def __splice_done_cb(self, output_stream, res, user): | |
613 | _logger.debug('__splice_done_cb') | |
614 | self.ready.emit(self._destination_path or self._output_stream) | |
568 | 615 | |
569 | 616 | @GObject.Property |
570 | 617 | def output(self): |
612 | 659 | CHANNEL_TYPE_FILE_TRANSFER + '.Size': file_size, |
613 | 660 | CHANNEL_TYPE_FILE_TRANSFER + '.ContentType': self._mime, |
614 | 661 | CHANNEL_TYPE_FILE_TRANSFER + '.InitialOffset': 0}, signature='sv')) |
615 | self.set_channel(Channel(self._conn.bus_name, object_path)) | |
662 | channel = {} | |
663 | proxy = dbus.Bus().get_object(self._conn.bus_name, object_path) | |
664 | channel[PROPERTIES_IFACE] = dbus.Interface(proxy, PROPERTIES_IFACE) | |
665 | channel[CHANNEL] = dbus.Interface(proxy, CHANNEL) | |
666 | channel[CHANNEL_TYPE_FILE_TRANSFER] = dbus.Interface( | |
667 | proxy, CHANNEL_TYPE_FILE_TRANSFER) | |
668 | self.set_channel(channel) | |
616 | 669 | |
617 | 670 | channel_file_transfer = self.channel[CHANNEL_TYPE_FILE_TRANSFER] |
618 | 671 | self._socket_address = channel_file_transfer.ProvideFile( |
802 | 855 | |
803 | 856 | # Get the Telepathy Connection |
804 | 857 | tp_name, tp_path = pservice.get_preferred_connection() |
805 | conn = Connection(tp_name, tp_path) | |
858 | obj = dbus.Bus().get_object(tp_name, tp_path) | |
859 | conn = dbus.Interface(obj, CONN_INTERFACE) | |
806 | 860 | group = self._text_chan[CHANNEL_INTERFACE_GROUP] |
807 | 861 | my_csh = group.GetSelfHandle() |
808 | 862 | if my_csh == cs_handle: |
0 | 0 | import pippy |
1 | 1 | |
2 | for i in xrange(0, 50): | |
2 | for i in range(0, 50): | |
3 | 3 | pippy.console.clear() |
4 | 4 | if i < 25: |
5 | 5 | pippy.console.red() |
7 | 7 | pippy.console.blue() |
8 | 8 | |
9 | 9 | # Note that we have to escape backslashes |
10 | print '\\o/' | |
11 | print '_|_' | |
12 | print ' ' | |
10 | print('\\o/') | |
11 | print('_|_') | |
12 | print(' ') | |
13 | 13 | pippy.wait() |
14 | 14 | |
15 | 15 | pippy.console.clear() |
16 | print '_o_' | |
17 | print ' | ' | |
18 | print '/ \\' | |
16 | print('_o_') | |
17 | print(' | ') | |
18 | print('/ \\') | |
19 | 19 | pippy.wait() |
20 | 20 | |
21 | 21 | pippy.console.clear() |
22 | print ' o ' | |
23 | print '/|\\' | |
24 | print '| |' | |
22 | print(' o ') | |
23 | print('/|\\') | |
24 | print('| |') | |
25 | 25 | pippy.wait() |
26 | 26 | |
27 | 27 | pippy.console.clear() |
28 | print '_o_' | |
29 | print ' | ' | |
30 | print '/ \\' | |
28 | print('_o_') | |
29 | print(' | ') | |
30 | print('/ \\') | |
31 | 31 | pippy.wait() |
0 | # -*- coding: utf-8 -*- | |
1 | # This is the game life http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life | |
2 | ||
3 | import os | |
4 | import time | |
5 | import random | |
6 | ||
7 | ||
8 | def LoadCells(rows, cols): | |
9 | """ We need a function to load cells in the neighborhood """ | |
10 | grid = [] | |
11 | col = [0] * cols | |
12 | # first we load an empty grid | |
13 | for i in range(rows): | |
14 | col = [0] * cols | |
15 | grid.append(col) | |
16 | # then we load some cells | |
17 | for x in range(rows): | |
18 | for y in range(cols): | |
19 | cell = random.randint(0, random.randint(0, 1)) | |
20 | grid[x][y] = cell | |
21 | return grid | |
22 | ||
23 | ||
24 | def DrawGrid(grid): | |
25 | """ Here we draw the grid """ | |
26 | """ Test: Print the number of neighbors of living cells """ | |
27 | rows = len(grid) | |
28 | cols = len(grid[1]) | |
29 | # print rows, cols | |
30 | for x in range(rows): | |
31 | for y in range(cols): | |
32 | if grid[x][y] != 1: | |
33 | print '.', | |
34 | else: | |
35 | neighbors = CountNeighbors(grid, x, y) | |
36 | print chr(neighbors+48), | |
37 | # print 'o', | |
38 | print '\n', | |
39 | ||
40 | ||
41 | def CountNeighbors(grid, x, y): | |
42 | """ Count neighbors arround a single cell""" | |
43 | ||
44 | neighbors = 0 | |
45 | rows = len(grid) | |
46 | cols = len(grid[1]) | |
47 | ||
48 | # if x < (rows - 1) and grid[x + 1][y] == 1: | |
49 | # neighbors += 1 | |
50 | # if x > 0 and grid[x - 1][y] == 1: | |
51 | # neighbors += 1 | |
52 | # if y < (cols - 1) and grid[x][y + 1] == 1: | |
53 | # neighbors += 1 | |
54 | # if y > 0 and grid[x][y - 1] == 1: | |
55 | # neighbors += 1 | |
56 | # if x < (rows - 1) and y < (cols - 1) and grid[x + 1][y + 1] == 1: | |
57 | # neighbors += 1 | |
58 | # if x > 0 and y > 0 and grid[x - 1][y - 1] == 1: | |
59 | # neighbors += 1 | |
60 | # if x > 0 and y < (cols - 1) and grid[x - 1][y + 1] == 1: | |
61 | # neighbors += 1 | |
62 | # if x < (rows - 1) and y > 0 and grid[x + 1][y - 1] == 1: | |
63 | # neighbors += 1 | |
64 | ||
65 | neighbors += grid[(x+rows-1) % rows][(y+cols-1) % cols] | |
66 | neighbors += grid[(x+rows-1) % rows][ y ] | |
67 | neighbors += grid[(x+rows-1) % rows][(y +1) % cols] | |
68 | neighbors += grid[ x ][(y+cols-1) % cols] | |
69 | # neighbors += grid[ x ][ y ] | |
70 | neighbors += grid[ x ][(y +1) % cols] | |
71 | neighbors += grid[(x +1) % rows][(y+cols-1) % cols] | |
72 | neighbors += grid[(x +1) % rows][ y ] | |
73 | neighbors += grid[(x +1) % rows][(y +1) % cols] | |
74 | ||
75 | return neighbors | |
76 | ||
77 | ||
78 | def Iteration(grid): | |
79 | """ here we define a single iteration : | |
80 | # if we have between 3 and 6 neighbors the single cell lives | |
81 | # in other case the cell dies | |
82 | If a living cell has 2 or 3 neighbors, it survives | |
83 | in other cases it dies. | |
84 | A dead cell with 3 neighbors will become alive. | |
85 | """ | |
86 | rows = len(grid) | |
87 | cols = len(grid[1]) | |
88 | ||
89 | # grid0 = grid # Save the original grid for proper counts | |
90 | grid0 = [] | |
91 | col = [0] * cols | |
92 | # First we load an empty grid | |
93 | for x in range(rows): | |
94 | col = [0] * cols | |
95 | grid0.append(col) | |
96 | ||
97 | for x in range(rows): | |
98 | for y in range(cols): | |
99 | cell = grid[x][y] | |
100 | grid0[x][y] = cell | |
101 | ||
102 | # neighbors = 0 | |
103 | for x in range(rows): | |
104 | for y in range(cols): | |
105 | neighbors = CountNeighbors(grid0, x, y) | |
106 | if grid0[x][y] == 1: | |
107 | if neighbors < 2 or neighbors > 3: | |
108 | grid[x][y] = 0 | |
109 | else: | |
110 | if neighbors == 3: | |
111 | grid[x][y] = 1 | |
112 | ||
113 | return grid | |
114 | ||
115 | def Iterator(rows, cols, pulses): | |
116 | """ Iterate n pulses and draws the result of each one """ | |
117 | pulse = 1 | |
118 | grid = LoadCells(rows, cols) | |
119 | while pulse <= pulses: | |
120 | # os.system('clear') | |
121 | print 'Pulse: ', pulse | |
122 | # Iteration(grid) | |
123 | grid = Iteration(grid) | |
124 | DrawGrid(grid) | |
125 | pulse += 1 | |
126 | time.sleep(0.2) | |
127 | ||
128 | number = input('Please input the number of rows and cols (unique number):') | |
129 | pulses = input('Please input the number of pulses:') | |
130 | Iterator(number, 4*number, pulses) | |
0 | # -*- coding: utf-8 -*- | |
1 | # This is the game life http://en.wikipedia.org/wiki/Conway%27s_Game_of_Life | |
2 | ||
3 | import os | |
4 | import time | |
5 | import random | |
6 | ||
7 | ||
8 | def LoadCells(rows, cols): | |
9 | """ We need a function to load cells in the neighborhood """ | |
10 | grid = [] | |
11 | col = [0] * cols | |
12 | # first we load an empty grid | |
13 | for i in range(rows): | |
14 | col = [0] * cols | |
15 | grid.append(col) | |
16 | # then we load some cells | |
17 | for x in range(rows): | |
18 | for y in range(cols): | |
19 | cell = random.randint(0, random.randint(0, 1)) | |
20 | grid[x][y] = cell | |
21 | return grid | |
22 | ||
23 | ||
24 | def DrawGrid(grid): | |
25 | """ Here we draw the grid """ | |
26 | """ Test: Print the number of neighbors of living cells """ | |
27 | rows = len(grid) | |
28 | cols = len(grid[1]) | |
29 | # print rows, cols | |
30 | for x in range(rows): | |
31 | for y in range(cols): | |
32 | if grid[x][y] != 1: | |
33 | print('.', end=' ') | |
34 | else: | |
35 | neighbors = CountNeighbors(grid, x, y) | |
36 | print(chr(neighbors+48), end=' ') | |
37 | # print 'o', | |
38 | print('\n', end=' ') | |
39 | ||
40 | ||
41 | def CountNeighbors(grid, x, y): | |
42 | """ Count neighbors arround a single cell""" | |
43 | ||
44 | neighbors = 0 | |
45 | rows = len(grid) | |
46 | cols = len(grid[1]) | |
47 | ||
48 | # if x < (rows - 1) and grid[x + 1][y] == 1: | |
49 | # neighbors += 1 | |
50 | # if x > 0 and grid[x - 1][y] == 1: | |
51 | # neighbors += 1 | |
52 | # if y < (cols - 1) and grid[x][y + 1] == 1: | |
53 | # neighbors += 1 | |
54 | # if y > 0 and grid[x][y - 1] == 1: | |
55 | # neighbors += 1 | |
56 | # if x < (rows - 1) and y < (cols - 1) and grid[x + 1][y + 1] == 1: | |
57 | # neighbors += 1 | |
58 | # if x > 0 and y > 0 and grid[x - 1][y - 1] == 1: | |
59 | # neighbors += 1 | |
60 | # if x > 0 and y < (cols - 1) and grid[x - 1][y + 1] == 1: | |
61 | # neighbors += 1 | |
62 | # if x < (rows - 1) and y > 0 and grid[x + 1][y - 1] == 1: | |
63 | # neighbors += 1 | |
64 | ||
65 | neighbors += grid[(x+rows-1) % rows][(y+cols-1) % cols] | |
66 | neighbors += grid[(x+rows-1) % rows][ y ] | |
67 | neighbors += grid[(x+rows-1) % rows][(y +1) % cols] | |
68 | neighbors += grid[ x ][(y+cols-1) % cols] | |
69 | # neighbors += grid[ x ][ y ] | |
70 | neighbors += grid[ x ][(y +1) % cols] | |
71 | neighbors += grid[(x +1) % rows][(y+cols-1) % cols] | |
72 | neighbors += grid[(x +1) % rows][ y ] | |
73 | neighbors += grid[(x +1) % rows][(y +1) % cols] | |
74 | ||
75 | return neighbors | |
76 | ||
77 | ||
78 | def Iteration(grid): | |
79 | """ here we define a single iteration : | |
80 | # if we have between 3 and 6 neighbors the single cell lives | |
81 | # in other case the cell dies | |
82 | If a living cell has 2 or 3 neighbors, it survives | |
83 | in other cases it dies. | |
84 | A dead cell with 3 neighbors will become alive. | |
85 | """ | |
86 | rows = len(grid) | |
87 | cols = len(grid[1]) | |
88 | ||
89 | # grid0 = grid # Save the original grid for proper counts | |
90 | grid0 = [] | |
91 | col = [0] * cols | |
92 | # First we load an empty grid | |
93 | for x in range(rows): | |
94 | col = [0] * cols | |
95 | grid0.append(col) | |
96 | ||
97 | for x in range(rows): | |
98 | for y in range(cols): | |
99 | cell = grid[x][y] | |
100 | grid0[x][y] = cell | |
101 | ||
102 | # neighbors = 0 | |
103 | for x in range(rows): | |
104 | for y in range(cols): | |
105 | neighbors = CountNeighbors(grid0, x, y) | |
106 | if grid0[x][y] == 1: | |
107 | if neighbors < 2 or neighbors > 3: | |
108 | grid[x][y] = 0 | |
109 | else: | |
110 | if neighbors == 3: | |
111 | grid[x][y] = 1 | |
112 | ||
113 | return grid | |
114 | ||
115 | def Iterator(rows, cols, pulses): | |
116 | """ Iterate n pulses and draws the result of each one """ | |
117 | pulse = 1 | |
118 | grid = LoadCells(rows, cols) | |
119 | while pulse <= pulses: | |
120 | # os.system('clear') | |
121 | print('Pulse: ', pulse) | |
122 | # Iteration(grid) | |
123 | grid = Iteration(grid) | |
124 | DrawGrid(grid) | |
125 | pulse += 1 | |
126 | time.sleep(0.2) | |
127 | ||
128 | number = eval(input('Please input the number of rows and cols (unique number):')) | |
129 | pulses = eval(input('Please input the number of pulses:')) | |
130 | Iterator(number, 4*number, pulses) |
5 | 5 | result = 1 |
6 | 6 | if number > 0: |
7 | 7 | result = number * factorial_recursive(number - 1) |
8 | print 'factorizing: ', number, ' result: ', result | |
8 | print('factorizing: ', number, ' result: ', result) | |
9 | 9 | return result |
10 | 10 | |
11 | 11 | |
14 | 14 | result = 1 |
15 | 15 | for i in range(1, number + 1): |
16 | 16 | result = result * i |
17 | print 'factorizing: ', i, ' result: ', result | |
17 | print('factorizing: ', i, ' result: ', result) | |
18 | 18 | return result |
19 | 19 | |
20 | 20 | |
29 | 29 | factorial_iterative(number) |
30 | 30 | delta = time.time() - start |
31 | 31 | if delta > 0: |
32 | print 'Type: ', type_s, ' in: ', 1 / delta | |
32 | print('Type: ', type_s, ' in: ', 1 / delta) | |
33 | 33 | else: |
34 | print 'Type: ', type_s | |
34 | print('Type: ', type_s) | |
35 | 35 | |
36 | 36 | # ask for a number to compute the factorial of |
37 | number = input('Please input a number:') | |
38 | print 'Calculating...' | |
37 | number = eval(input('Please input a number:')) | |
38 | print('Calculating...') | |
39 | 39 | calculate(number, 0) |
40 | 40 | calculate(number, 1) |
1 | 1 | import pippy |
2 | 2 | R = random.randrange(1, 100) |
3 | 3 | |
4 | print 'Guess a number between 1 and 100!' | |
5 | N = input('Enter a number: ') | |
4 | print('Guess a number between 1 and 100!') | |
5 | N = eval(input('Enter a number: ')) | |
6 | 6 | i = 1 |
7 | 7 | while (N != R): |
8 | 8 | if N > R: |
9 | 9 | pippy.console.red() |
10 | print 'Too big... try again' | |
10 | print('Too big... try again') | |
11 | 11 | else: |
12 | 12 | pippy.console.blue() |
13 | print 'Too small.. try again' | |
13 | print('Too small.. try again') | |
14 | 14 | pippy.console.black() |
15 | N = input('Enter a number: ') | |
15 | N = eval(input('Enter a number: ')) | |
16 | 16 | i = i + 1 |
17 | 17 | |
18 | print 'You got it in', i, 'tries' | |
18 | print('You got it in', i, 'tries') |
9 | 9 | newvector = vector[:] |
10 | 10 | for j in range(0, len(vector) - 1): |
11 | 11 | if (newvector[j] == 0): |
12 | print ' ', | |
12 | print(' ', end=' ') | |
13 | 13 | else: |
14 | print '%2d' % newvector[j], | |
14 | print('%2d' % newvector[j], end=' ') | |
15 | 15 | newvector[j] = vector[j - 1] + vector[j + 1] |
16 | ||
16 | print() | |
17 | 17 | vector = newvector[:] |
4 | 4 | pi += (4.0/a) - (4.0/b) |
5 | 5 | a += 4 |
6 | 6 | b += 4 |
7 | print pi | |
7 | print(pi) | |
8 | 8 | # Now that the result has been computed we can explore printing the result. |
9 | print "There are multiple ways to print numbers here is a quick sample." | |
10 | print "Just print it :", pi | |
11 | print "Using repr() :", repr(pi) | |
12 | print "Our approximation: %3.20f" % pi | |
13 | print "\nPi is a very famous number...." | |
9 | print("There are multiple ways to print numbers here is a quick sample.") | |
10 | print("Just print it :", pi) | |
11 | print("Using repr() :", repr(pi)) | |
12 | print("Our approximation: %3.20f" % pi) | |
13 | print("\nPi is a very famous number....") | |
14 | 14 | # Use python's math module it is faster and close enough for most computations. |
15 | 15 | import math |
16 | print "Python's Math library computes" | |
17 | print "a better value pi: %3.39f" % math.pi; # it uses...(math.atan(1.0) * 4.0) | |
16 | print("Python's Math library computes") | |
17 | print("a better value pi: %3.39f" % math.pi); # it uses...(math.atan(1.0) * 4.0) | |
18 | 18 | # when running computations based on "pi" it is good to begin with the best value you can get. |
19 | 19 | # from the gnu 'C' comiler /usr/include/math.h" |
20 | print "For reference a more exact 32 bit floating point value for pi is." | |
21 | print "Known value of pi: 3.14159265358979323846" | |
20 | print("For reference a more exact 32 bit floating point value for pi is.") | |
21 | print("Known value of pi: 3.14159265358979323846") |
12 | 12 | newvector = vector[:] |
13 | 13 | for j in range(0, len(vector) - 1): |
14 | 14 | if (newvector[j] == 0): |
15 | print ' ', | |
15 | print(' ', end=' ') | |
16 | 16 | else: |
17 | 17 | remainder = newvector[j] % modulus |
18 | 18 | if (remainder == 0): |
19 | print 'O', | |
19 | print('O', end=' ') | |
20 | 20 | else: |
21 | print '.', | |
21 | print('.', end=' ') | |
22 | 22 | newvector[j] = vector[j - 1] + vector[j + 1] |
23 | ||
23 | print() | |
24 | 24 | vector = newvector[:] |
0 | number = input('Which times table? ') | |
0 | number = eval(input('Which times table? ')) | |
1 | 1 | for i in range(1, 13): |
2 | print i, 'x', number, '=', i * number | |
2 | print(i, 'x', number, '=', i * number) |
0 | number = input('Enter a number: ') | |
0 | number = eval(input('Enter a number: ')) | |
1 | 1 | |
2 | 2 | if number > 5: |
3 | print 'Greater than 5' | |
3 | print('Greater than 5') | |
4 | 4 | elif number < 5: |
5 | print 'Less than 5' | |
5 | print('Less than 5') | |
6 | 6 | else: |
7 | print 'Number is 5!' | |
7 | print('Number is 5!') |
0 | 0 | def count_backwards(number): |
1 | print 'I have the number', number | |
1 | print('I have the number', number) | |
2 | 2 | if number > 0: |
3 | print 'Calling count_backwards again!' | |
3 | print('Calling count_backwards again!') | |
4 | 4 | count_backwards(number - 1) |
5 | 5 | else: |
6 | print 'I am done counting' | |
6 | print('I am done counting') | |
7 | 7 | |
8 | number = input('Enter a number: ') | |
8 | number = eval(input('Enter a number: ')) | |
9 | 9 | count_backwards(number) |
0 | 0 | import pippy |
1 | 1 | |
2 | print " ".join(pippy.sound.getSoundList()) | |
2 | print(" ".join(pippy.sound.getSoundList())) |
0 | name = raw_input("Type your name here: ") | |
1 | print "Hello " + name + "!" | |
0 | name = input("Type your name here: ") | |
1 | print("Hello " + name + "!") |
7 | 7 | vowels = ['a', 'e', 'i', 'o', 'u'] |
8 | 8 | |
9 | 9 | # then we ask for a string to make the replacements |
10 | text = raw_input("Please input your text to translate to jeringoso:") | |
10 | text = input("Please input your text to translate to jeringoso:") | |
11 | 11 | length = len(text) |
12 | 12 | jeringoso = "" |
13 | 13 | for i in range(length): |
17 | 17 | else: |
18 | 18 | jeringoso = jeringoso + char |
19 | 19 | |
20 | print jeringoso | |
20 | print(jeringoso) |
0 | 0 | table = { |
1 | 'Hardware & Mechanicals': 'John Watlington, Mark Foster, Mary Lou Jepsen, Yves Behar, Bret Recor, Mitch Pergola, Martin Schnitzer, Kenneth Jewell, Kevin Young, Jacques Gagne, Nicholas Negroponte, Frank Lee, Victor Chau, Albert Hsu, HT Chen, Vance Ke, Ben Chuang, Johnson Huang, Sam Chang, Alex Chu, Roger Huang, and the rest of the Quanta team, the Marvell team, the AMD team, the ChiMei team...', | |
2 | ||
3 | 'Firmware': 'Ron Minnich, Richard Smith, Mitch Bradley, Tom Sylla, Lilian Walter, Bruce Wang, James Cameron', | |
1 | 'Hardware & Mechanicals': 'John Watlington, Mark Foster, Mary Lou Jepsen, Yves Behar, Bret Recor, Mitch Pergola, Martin Schnitzer, Kenneth Jewell, Kevin Young, Jacques Gagne, Nicholas Negroponte, Frank Lee, Victor Chau, Albert Hsu, HT Chen, Vance Ke, Ben Chuang, Johnson Huang, Sam Chang, Alex Chu, Roger Huang, and the rest of the Quanta team, the Marvell team, the AMD team, the ChiMei team ...', | |
4 | 2 | |
5 | 'Kernel & Drivers': 'Jaya Kumar, Jon Corbet, Reynaldo Verdejo, Pierre Ossman, Dave Woodhouse, Matthew Garrett, Chris Ball, Andy Tanenbaum, Linus Torvalds, Dave Jones, Andres Salomon, Marcelo Tosatti..', | |
6 | ||
7 | 'Graphics systems': 'Jordan Crouse, Daniel Stone, Zephaniah Hull, Bernardo Innocenti, Behdad Esfahbod, Jim Gettys, Adam Jackson, RobertTheKing, William Orr, Simon Schampijer, Gary Martin', | |
8 | ||
9 | 'Programming': 'Guido Van Rossum, Johan Dahlin, Brian Silverman, Alan Kay, Kim Rose, Bert Freudenberg, Yoshiki Ohshima, Takashi Yamamiya, Scott Wallace, Ted Kaehler, Stephane Ducasse, Hilaire Fernandes, David Narveaz, Tim Moody, Martin Langhoff, Paul Fox, Tim Shepard, Martin Abente Lahaye, Sam Parkinson, James Cameron, Ignacio Rodriguez, Jerry Vonau, Sebastian Silva, Ana Balica, rcunning01 Frederick Grose, Prason Shukla, Emil Dudev, Christofer Yael, cheekujodhpur, Agustin Zubiaga, Daniel Francis', | |
10 | ||
11 | 'Sugar': 'Marco Pesenti Gritti, Dan Williams, Chris Blizzard, John Palmieri, Lisa Strausfeld, Christian Marc Schmidt, Takaaki Okada, Eben Eliason, Walter Bender, Tomeu Vizoso, Simon Schampijer, Reinier Heeres, Ben Saller, Martin Dengler, Benjamin Berg, Daniel Drake, Jameson Quinn, Miguel Alvarez...', | |
12 | ||
13 | 'Activities': 'Erik Blankinship, Bakhtiar Mikhak, Manusheel Gupta, J.M. Maurer (uwog) and the Abiword team, the Mozilla team, Jean Piche, Barry Vercoe, Richard Boulanger, Greg Thompson, Arjun Sarwal, Cody Lodrige, Shannon Sullivan, Idit Harel, and the MaMaMedia team, John Huang, Bruno Coudoin, Eduardo Silva, Hakon Wium Lie, Don Hopkins, Muriel de Souza Godoi, Benjamin M. Schwartz..', | |
14 | ||
15 | 'Network': 'Michael Bletsas, James Cameron, Javier Cardona, Ronak Chokshi, Polychronis Ypodimatopoulos, Simon McVittie, Dafydd Harries, Sjoerd Simons, Morgan Collett, Guillaume Desmottes, Robert McQueen..', | |
16 | ||
17 | 'Security': 'Ivan Krstic, Michael Stone, C. Scott Ananian, Noah Kantrowitz, Herbert Poetzl, Marcus Leech..', | |
18 | ||
19 | 'Content': 'SJ Klein, Mako Hill, Xavier Alvarez, Alfonso de la Guarda, Sayamindu Dasgupta, Mallory Chua, Lauren Klein, Zdenek Broz, Felicity Tepper, Andy Sisson, Christine Madsen, Matthew Steven Carlos, Justin Thorp, Ian Bicking, Christopher Fabian, Wayne Mackintosh, the OurStories team, Will Wright, Chuck Normann..', | |
20 | ||
21 | 'Testing': 'Kim Quirk, Alex Latham, Giannis Galanis, Ricardo Carrano, Zach Cerza, John Fuhrer, Tom Gilliard, Niraj Nakrani', | |
22 | ||
23 | 'Country Support': 'Carla Gomez Monroy, David Cavallo, Matt Keller, Khaled Hassounah, Antonio Battro, Audrey Choi, Habib Kahn, Arnan (Roger) Sipitakiat, Reuben Caron', | |
24 | ||
25 | 'Administrative Support': 'Nia Lewis, Felice Gardner, Lindsay Petrillose, Jill Clarke, Julia Reynolds, Tracy Price, David Robertson, Danny Clark', | |
26 | ||
27 | 'Finance & Legal': 'Eben Moglen, Bruce Parker, William Kolb, John Sare, Sandra Lee, Richard Bernstein, Jaclyn Tsai, Jaime Cheng, Robert Fadel, Charles Kane (Grasshopper), Kathy Paur, Andriani Ferti', | |
28 | ||
29 | 'PR and Media': 'Larry Weber, Jackie Lustig, Jodi Petrie, George Snell, Kyle Austin, Hilary Meserole, Erick A. Betancourt, Michael Borosky, Sylvain Lefebvre, Martin Le Sauteur', | |
30 | ||
31 | 'Directors & Advisors': 'Howard Anderson, Rebecca Allen, Ayo Kusamotu, Jose Maria Aznar, V. Michael Bove, Jr., Rodrigo Mesquita, Seymour Papert, Ted Selker, Ethan Beard (Google); John Roese (Nortel); Dandy Hsu (Quanta); Marcelo Claure (Brightstar); Gary Dillabough (eBay); Gustavo Arenas (AMD); Mike Evans (Red Hat); Ed Horowitz (SES Astra); Jeremy Philips (NewsCorp); Scott Soong (Chi Lin); Sehat Sutardja (Marvell); Joe Jacobson (MIT Media Lab); Steve Kaufman (Riverside); and Tom Meredith (MFI)', | |
32 | ||
33 | 'Pippy': 'Chris Ball, C. Scott Ananian, James Cameron, Anish Mangal' | |
34 | } | |
3 | 'Firmware': 'Ron Minnich, Richard Smith, Mitch Bradley, Tom Sylla, Lilian Walter, Bruce Wang, James Cameron ...', | |
4 | ||
5 | 'Kernel & Drivers': 'Jaya Kumar, Jon Corbet, Reynaldo Verdejo, Pierre Ossman, Dave Woodhouse, Matthew Garrett, Chris Ball, Andy Tanenbaum, Linus Torvalds, Dave Jones, Andres Salomon, Marcelo Tosatti ...', | |
6 | ||
7 | 'Graphics systems': 'Jordan Crouse, Daniel Stone, Zephaniah Hull, Bernardo Innocenti, Behdad Esfahbod, Jim Gettys, Adam Jackson, RobertTheKing, William Orr, Simon Schampijer, Gary Martin ...', | |
8 | ||
9 | 'Programming': 'Guido Van Rossum, Johan Dahlin, Brian Silverman, Alan Kay, Kim Rose, Bert Freudenberg, Yoshiki Ohshima, Takashi Yamamiya, Scott Wallace, Ted Kaehler, Stephane Ducasse, Hilaire Fernandes, David Narveaz, Tim Moody, Martin Langhoff, Paul Fox, Tim Shepard, Martin Abente Lahaye, Sam Parkinson, James Cameron, Ignacio Rodriguez, Jerry Vonau, Sebastian Silva, Ana Balica, rcunning01 Frederick Grose, Prason Shukla, Emil Dudev, Christofer Yael, cheekujodhpur, Agustin Zubiaga, Daniel Francis ...', | |
10 | ||
11 | 'Sugar': 'Marco Pesenti Gritti, Dan Williams, Chris Blizzard, John Palmieri, Lisa Strausfeld, Christian Marc Schmidt, Takaaki Okada, Eben Eliason, Walter Bender, Tomeu Vizoso, Simon Schampijer, Reinier Heeres, Ben Saller, Martin Dengler, Benjamin Berg, Daniel Drake, Jameson Quinn, Miguel Alvarez ...', | |
12 | ||
13 | 'Activities': 'Erik Blankinship, Bakhtiar Mikhak, Manusheel Gupta, J.M. Maurer (uwog) and the Abiword team, the Mozilla team, Jean Piche, Barry Vercoe, Richard Boulanger, Greg Thompson, Arjun Sarwal, Cody Lodrige, Shannon Sullivan, Idit Harel, and the MaMaMedia team, John Huang, Bruno Coudoin, Eduardo Silva, Hakon Wium Lie, Don Hopkins, Muriel de Souza Godoi, Benjamin M. Schwartz ...', | |
14 | ||
15 | 'Network': 'Michael Bletsas, James Cameron, Javier Cardona, Ronak Chokshi, Polychronis Ypodimatopoulos, Simon McVittie, Dafydd Harries, Sjoerd Simons, Morgan Collett, Guillaume Desmottes, Robert McQueen ...', | |
16 | ||
17 | 'Security': 'Ivan Krstic, Michael Stone, C. Scott Ananian, Noah Kantrowitz, Herbert Poetzl, Marcus Leech ...', | |
18 | ||
19 | 'Content': 'SJ Klein, Mako Hill, Xavier Alvarez, Alfonso de la Guarda, Sayamindu Dasgupta, Mallory Chua, Lauren Klein, Zdenek Broz, Felicity Tepper, Andy Sisson, Christine Madsen, Matthew Steven Carlos, Justin Thorp, Ian Bicking, Christopher Fabian, Wayne Mackintosh, the OurStories team, Will Wright, Chuck Normann ...', | |
20 | ||
21 | 'Testing': 'Kim Quirk, Alex Latham, Giannis Galanis, Ricardo Carrano, Zach Cerza, John Fuhrer, Tom Gilliard, Niraj Nakrani ...', | |
22 | ||
23 | 'Country Support': 'Carla Gomez Monroy, David Cavallo, Matt Keller, Khaled Hassounah, Antonio Battro, Audrey Choi, Habib Kahn, Arnan (Roger) Sipitakiat, Reuben Caron ...', | |
24 | ||
25 | 'Administrative Support': 'Nia Lewis, Felice Gardner, Lindsay Petrillose, Jill Clarke, Julia Reynolds, Tracy Price, David Robertson, Danny Clark ...', | |
26 | ||
27 | 'Finance & Legal': 'Eben Moglen, Bruce Parker, William Kolb, John Sare, Sandra Lee, Richard Bernstein, Jaclyn Tsai, Jaime Cheng, Robert Fadel, Charles Kane (Grasshopper), Kathy Paur, Andriani Ferti ...', | |
28 | ||
29 | 'PR and Media': 'Larry Weber, Jackie Lustig, Jodi Petrie, George Snell, Kyle Austin, Hilary Meserole, Erick A. Betancourt, Michael Borosky, Sylvain Lefebvre, Martin Le Sauteur ...', | |
30 | ||
31 | 'Directors & Advisors': 'Howard Anderson, Rebecca Allen, Ayo Kusamotu, Jose Maria Aznar, V. Michael Bove, Jr., Rodrigo Mesquita, Seymour Papert, Ted Selker, Ethan Beard (Google); John Roese (Nortel); Dandy Hsu (Quanta); Marcelo Claure (Brightstar); Gary Dillabough (eBay); Gustavo Arenas (AMD); Mike Evans (Red Hat); Ed Horowitz (SES Astra); Jeremy Philips (NewsCorp); Scott Soong (Chi Lin); Sehat Sutardja (Marvell); Joe Jacobson (MIT Media Lab); Steve Kaufman (Riverside); and Tom Meredith (MFI)', | |
32 | ||
33 | 'Pippy': 'Chris Ball, C. Scott Ananian, James Cameron, Anish Mangal ...' | |
34 | } | |
35 | 35 | |
36 | 36 | import random |
37 | 37 | import time |
46 | 46 | |
47 | 47 | while True: |
48 | 48 | reset() |
49 | print fill("OLPC would like to take this opportunity to acknowledge the community of people and projects that have made the XO laptop possible.", int(cols)) | |
49 | print(fill("OLPC would like to take this opportunity to acknowledge the community of people and projects that have made the XO laptop possible.", int(cols))) | |
50 | 50 | |
51 | subsystem = random.choice(table.keys()) | |
51 | subsystem = random.choice(list(table.keys())) | |
52 | 52 | random.choice([red, green, yellow, blue, magenta, cyan])() |
53 | 53 | #random.choice([normal, bold, underlined, inverse])() |
54 | print '\n', fill("%s: %s" % (subsystem, table[subsystem]), int(cols)) | |
54 | print('\n' + fill("%s: %s" % (subsystem, table[subsystem]), int(cols))) | |
55 | 55 | table.pop(subsystem) |
56 | 56 | if len(table) == 0: |
57 | 57 | break |
0 | 0 | |
1 | name = raw_input('What is your name?\n') | |
2 | print 'Hi, %s.' % name | |
1 | name = input('What is your name?\n') | |
2 | print('Hi, %s.' % name) |
1 | 1 | |
2 | 2 | def while_backward_count(number): |
3 | 3 | while(number > -1): |
4 | print str(number) + " for the explosion!!!" | |
4 | print(str(number) + " for the explosion!!!") | |
5 | 5 | time.sleep(1) |
6 | 6 | number = number -1 |
7 | 7 | |
8 | number = input('Enter a number: ') | |
9 | print "Let's count backward using a while sentence!!" | |
8 | number = eval(input('Enter a number: ')) | |
9 | print("Let's count backward using a while sentence!!") | |
10 | 10 | while_backward_count(number) |
11 | print "Kaboooommm!!!, X_X" | |
11 | print("Kaboooommm!!!, X_X") |
2 | 2 | num1 = num1 + 1 |
3 | 3 | num2 = num2 + 1 |
4 | 4 | for i in range(num1, num2): |
5 | print str(total) + " + " + str(i) + " = " + str(total+i) | |
5 | print(str(total) + " + " + str(i) + " = " + str(total+i)) | |
6 | 6 | total = total + 1 |
7 | 7 | |
8 | number1 = int(input('Enter first number: ')) | |
9 | number2 = int(input('Enter second number: ')) | |
8 | number1 = int(eval(input('Enter first number: '))) | |
9 | number2 = int(eval(input('Enter second number: '))) | |
10 | 10 | |
11 | 11 | if number1 < number2: |
12 | 12 | sum_in_range(number1, number2) |
2 | 2 | num = 1 |
3 | 3 | |
4 | 4 | while(num < 5): |
5 | data = input("Please enter number " + str(num) + ":") | |
5 | data = eval(input("Please enter number " + str(num) + ":")) | |
6 | 6 | my_list.append(int(data)) |
7 | 7 | num = num + 1 |
8 | 8 | |
9 | print "You entered the following numbers:" | |
10 | print my_list | |
9 | print("You entered the following numbers:") | |
10 | print(my_list) |
1 | 1 | |
2 | 2 | basket['bananas'] = 5 |
3 | 3 | |
4 | print basket | |
5 | print "There are %d various items in the basket" % len(basket) | |
4 | print(basket) | |
5 | print("There are %d various items in the basket" % len(basket)) | |
6 | 6 | |
7 | print basket['apples'] | |
7 | print(basket['apples']) | |
8 | 8 | basket['apples'] = 8 |
9 | print basket['apples'] | |
9 | print(basket['apples']) | |
10 | 10 | |
11 | print basket.get('oranges', 'undefined') | |
12 | print basket.get('cherries', 'undefined') | |
11 | print(basket.get('oranges', 'undefined')) | |
12 | print(basket.get('cherries', 'undefined')) |
0 | 0 | def is_valid_number(num): |
1 | 1 | try: |
2 | 2 | int(num) |
3 | print "You wrote a number" | |
3 | print("You wrote a number") | |
4 | 4 | except: |
5 | print "Sorry but, you didn't write a number" | |
5 | print("Sorry but, you didn't write a number") | |
6 | 6 | |
7 | number1 = raw_input("Give me any input and I will tell you if it's a number: ") | |
7 | number1 = input("Give me any input and I will tell you if it's a number: ") | |
8 | 8 | is_valid_number(number1) |
11 | 11 | self.set_position(Gtk.WindowPosition.CENTER_ALWAYS) |
12 | 12 | |
13 | 13 | def button_cb(widget): |
14 | print 'click' | |
14 | print('click') | |
15 | 15 | |
16 | button = Gtk.Button('Button') | |
16 | button = Gtk.Button(label='Button') | |
17 | 17 | fixed = Gtk.Fixed() |
18 | 18 | fixed.put(button, 20, 30) |
19 | 19 | button.connect('clicked', button_cb) |
12 | 12 | |
13 | 13 | def entry_cb(widget, event): |
14 | 14 | if Gdk.keyval_name(event.keyval) == 'Return': |
15 | print widget.get_text() | |
15 | print(widget.get_text()) | |
16 | 16 | |
17 | 17 | entry = Gtk.Entry() |
18 | 18 | entry.connect('key_press_event', entry_cb) |
14 | 14 | grid.set_column_homogeneous(True) |
15 | 15 | grid.set_row_homogeneous(True) |
16 | 16 | |
17 | button = Gtk.Button('Button 1') | |
17 | button = Gtk.Button(label='Button 1') | |
18 | 18 | grid.attach(button, 0, 0, 1, 1) |
19 | 19 | |
20 | button = Gtk.Button('Button 2') | |
20 | button = Gtk.Button(label='Button 2') | |
21 | 21 | grid.attach(button, 0, 2, 1, 2) |
22 | 22 | |
23 | button = Gtk.Button('Button 3') | |
23 | button = Gtk.Button(label='Button 3') | |
24 | 24 | grid.attach(button, 1, 1, 2, 2) |
25 | 25 | |
26 | button = Gtk.Button('Button 4') | |
26 | button = Gtk.Button(label='Button 4') | |
27 | 27 | grid.attach(button, 2, 0, 2, 1) |
28 | 28 | |
29 | button = Gtk.Button('Button 5') | |
29 | button = Gtk.Button(label='Button 5') | |
30 | 30 | grid.attach(button, 3, 3, 3, 3) |
31 | 31 | |
32 | 32 | self.add(grid) |
16 | 16 | scrolled.add(vbox) |
17 | 17 | |
18 | 18 | for x in range(1, 16): |
19 | boton = Gtk.Button('Button %d' % x) | |
19 | boton = Gtk.Button(label='Button %d' % x) | |
20 | 20 | vbox.pack_start(boton, False, False, 1) |
21 | 21 | |
22 | 22 | self.add(scrolled) |
23 | 23 | box = Gtk.HBox() |
24 | 24 | textview.add_child_at_anchor(box, anchor) |
25 | 25 | |
26 | button = Gtk.Button('Click me') | |
26 | button = Gtk.Button(label='Click me') | |
27 | 27 | button.connect('clicked', self._clicked_cb, textbuffer) |
28 | 28 | box.pack_start(button, False, False, 0) |
29 | 29 |
31 | 31 | |
32 | 32 | def _activate_cb(self, button, button_index): |
33 | 33 | if button.get_active(): |
34 | print 'You selected %d button' % button_index | |
34 | print('You selected %d button' % button_index) | |
35 | 35 | |
36 | 36 | |
37 | 37 | PyApp() |
18 | 18 | menubar = Gtk.MenuBar() |
19 | 19 | vbox.pack_start(menubar, False, False, 0) |
20 | 20 | |
21 | self.label = Gtk.Label('Activate a menu item') | |
21 | self.label = Gtk.Label(label='Activate a menu item') | |
22 | 22 | vbox.pack_start(self.label, True, True, 0) |
23 | 23 | |
24 | 24 | menu_file = Gtk.Menu() |
102 | 102 | menu_edit.append(separator) |
103 | 103 | |
104 | 104 | label = 'Vertical page' |
105 | item_vertical = Gtk.RadioMenuItem(label) | |
105 | item_vertical = Gtk.RadioMenuItem(label=label) | |
106 | 106 | item_vertical.set_active(True) |
107 | 107 | item_vertical.connect('toggled', self._toggled_cb, label) |
108 | 108 | menu_edit.append(item_vertical) |
126 | 126 | |
127 | 127 | menu_help = Gtk.Menu() |
128 | 128 | |
129 | item_help = Gtk.MenuItem('Ayuda') | |
129 | item_help = Gtk.MenuItem(label='Ayuda') | |
130 | 130 | item_help.set_submenu(menu_help) |
131 | 131 | menubar.append(item_help) |
132 | 132 |
0 | 0 | import gi |
1 | 1 | gi.require_version('Gtk', '3.0') |
2 | 2 | from gi.repository import Gtk |
3 | from gi.repository import GObject | |
3 | from gi.repository import GLib | |
4 | 4 | |
5 | 5 | |
6 | 6 | class PyApp(Gtk.Window): |
22 | 22 | self.bar1.set_vexpand(True) |
23 | 23 | grid.attach(self.bar1, 1, 0, 3, 1) |
24 | 24 | |
25 | label = Gtk.Label("Una barra de progreso simple") | |
25 | label = Gtk.Label(label="Una barra de progreso simple") | |
26 | 26 | label.set_hexpand(True) |
27 | 27 | grid.attach(label, 1, 1, 1, 1) |
28 | 28 | |
31 | 31 | self.bar2.set_vexpand(True) |
32 | 32 | grid.attach(self.bar2, 1, 2, 3, 1) |
33 | 33 | |
34 | label = Gtk.Label("Una barra de progreso con pulsos") | |
34 | label = Gtk.Label(label="Una barra de progreso con pulsos") | |
35 | 35 | grid.attach(label, 1, 3, 1, 1) |
36 | 36 | |
37 | GObject.timeout_add(200, self._update) | |
37 | GLib.timeout_add(200, self._update) | |
38 | 38 | |
39 | 39 | self.add(grid) |
40 | 40 | self.show_all() |
34 | 34 | palette_box = Gtk.VBox() |
35 | 35 | palette.set_content(palette_box) |
36 | 36 | |
37 | checkbutton1 = Gtk.CheckButton('Option 1') | |
37 | checkbutton1 = Gtk.CheckButton(label='Option 1') | |
38 | 38 | palette_box.pack_start(checkbutton1, False, False, 0) |
39 | 39 | |
40 | checkbutton2 = Gtk.CheckButton('Option 2') | |
40 | checkbutton2 = Gtk.CheckButton(label='Option 2') | |
41 | 41 | palette_box.pack_start(checkbutton2, False, False, 0) |
42 | 42 | |
43 | checkbutton3 = Gtk.CheckButton('Option 3') | |
43 | checkbutton3 = Gtk.CheckButton(label='Option 3') | |
44 | 44 | palette_box.pack_start(checkbutton3, False, False, 0) |
45 | 45 | |
46 | 46 | separator = Gtk.VSeparator() |
47 | 47 | palette_box.pack_start(separator, False, False, 0) |
48 | 48 | |
49 | radio_button1 = Gtk.RadioButton('Option 1') | |
49 | radio_button1 = Gtk.RadioButton(label='Option 1') | |
50 | 50 | palette_box.pack_start(radio_button1, False, False, 0) |
51 | 51 | |
52 | radio_button2 = Gtk.RadioButton('Option 2', group=radio_button1) | |
52 | radio_button2 = Gtk.RadioButton(label='Option 2', group=radio_button1) | |
53 | 53 | palette_box.pack_start(radio_button2, False, False, 0) |
54 | 54 | |
55 | radio_button3 = Gtk.RadioButton('Option 3', group=radio_button1) | |
55 | radio_button3 = Gtk.RadioButton(label='Option 3', group=radio_button1) | |
56 | 56 | palette_box.pack_start(radio_button3, False, False, 0) |
57 | 57 | |
58 | 58 | palette_box.show_all() |
0 | 0 | # -*- coding: utf-8 -*- |
1 | name = raw_input('¿Cual es tu nombre?\n') | |
2 | print 'Hi, %s.' % name | |
1 | name = input('¿Cual es tu nombre?\n') | |
2 | print('Hi, %s.' % name) |
3 | 3 | |
4 | 4 | def while_cuenta_regresiva(numero): |
5 | 5 | while(numero > -1): |
6 | print str(numero) + ' para la explosion!!!' | |
6 | print(str(numero) + ' para la explosion!!!') | |
7 | 7 | time.sleep(1) |
8 | 8 | numero = numero -1 |
9 | 9 | |
10 | numero = input('Escribe un numero: ') | |
11 | print 'Cuenta regresiva usando sentencia while!!' | |
10 | numero = eval(input('Escribe un numero: ')) | |
11 | print('Cuenta regresiva usando sentencia while!!') | |
12 | 12 | while_cuenta_regresiva(numero) |
13 | print 'Kaboooommm!!!, X_X' | |
13 | print('Kaboooommm!!!, X_X') |
2 | 2 | num1 = num1 + 1 |
3 | 3 | num2 = num2 + 1 |
4 | 4 | for i in range(num1, num2): |
5 | print str(total) + " + " + str(i) + " = " + str(total+i) | |
5 | print(str(total) + " + " + str(i) + " = " + str(total+i)) | |
6 | 6 | total = total + 1 |
7 | 7 | |
8 | numero1 = int(input('Escribe primer numero: ')) | |
9 | numero2 = int(input('Escribe segundo numero: ')) | |
8 | numero1 = int(eval(input('Escribe primer numero: '))) | |
9 | numero2 = int(eval(input('Escribe segundo numero: '))) | |
10 | 10 | |
11 | 11 | if numero1 > numero2: |
12 | 12 | suma_en_rango(numero1, numero2) |
2 | 2 | num = 1 |
3 | 3 | |
4 | 4 | while(num < 5): |
5 | data = input("Porfavor escriba el numero " + str(num) + ":") | |
5 | data = eval(input("Porfavor escriba el numero " + str(num) + ":")) | |
6 | 6 | mi_lista.append(int(data)) |
7 | 7 | num = num + 1 |
8 | 8 | |
9 | print "Tu escribiste los siguientes numeros:" | |
10 | print mi_lista | |
9 | print("Tu escribiste los siguientes numeros:") | |
10 | print(mi_lista) |
1 | 1 | |
2 | 2 | canasta['bananas'] = 5 |
3 | 3 | |
4 | print canasta | |
5 | print "Hay %d tipos de fruta en la canasta" % len(canasta) | |
4 | print(canasta) | |
5 | print("Hay %d tipos de fruta en la canasta" % len(canasta)) | |
6 | 6 | |
7 | print canasta['manzanas'] | |
7 | print(canasta['manzanas']) | |
8 | 8 | canasta['manzanas'] = 8 |
9 | print canasta['manzanas'] | |
9 | print(canasta['manzanas']) | |
10 | 10 | |
11 | print canasta.get('naranjas', 'undefined') | |
12 | print canasta.get('cerezas', 'undefined') | |
11 | print(canasta.get('naranjas', 'undefined')) | |
12 | print(canasta.get('cerezas', 'undefined')) |
0 | 0 | def es_numero_valido(num): |
1 | 1 | try: |
2 | 2 | int(num) |
3 | print "Escribio un numero" | |
3 | print("Escribio un numero") | |
4 | 4 | except: |
5 | print "Lo siento, no escribiste un numero" | |
5 | print("Lo siento, no escribiste un numero") | |
6 | 6 | |
7 | number1 = input("Escriba y le dire si es un numero: ") | |
7 | number1 = eval(input("Escriba y le dire si es un numero: ")) | |
8 | 8 | es_numero_valido(number1) |
10 | 10 | self.set_size_request(250, 200) |
11 | 11 | |
12 | 12 | def button_cb(widget): |
13 | print 'click' | |
13 | print('click') | |
14 | 14 | |
15 | button = Gtk.Button("Boton") | |
15 | button = Gtk.Button(label="Boton") | |
16 | 16 | fixed = Gtk.Fixed() |
17 | 17 | fixed.put(button, 20, 30) |
18 | 18 | button.connect('clicked', button_cb) |
12 | 12 | |
13 | 13 | def entry_cb(widget, event): |
14 | 14 | if Gdk.keyval_name(event.keyval) == 'Return': |
15 | print widget.get_text() | |
15 | print(widget.get_text()) | |
16 | 16 | |
17 | 17 | entry = Gtk.Entry() |
18 | 18 | entry.connect('key_press_event', entry_cb) |
14 | 14 | grid.set_column_homogeneous(True) |
15 | 15 | grid.set_row_homogeneous(True) |
16 | 16 | |
17 | button = Gtk.Button('Boton 1') | |
17 | button = Gtk.Button(label='Boton 1') | |
18 | 18 | grid.attach(button, 0, 0, 1, 1) |
19 | 19 | |
20 | button = Gtk.Button('Boton 2') | |
20 | button = Gtk.Button(label='Boton 2') | |
21 | 21 | grid.attach(button, 0, 2, 1, 2) |
22 | 22 | |
23 | button = Gtk.Button('Boton 3') | |
23 | button = Gtk.Button(label='Boton 3') | |
24 | 24 | grid.attach(button, 1, 1, 2, 2) |
25 | 25 | |
26 | button = Gtk.Button('Boton 4') | |
26 | button = Gtk.Button(label='Boton 4') | |
27 | 27 | grid.attach(button, 2, 0, 2, 1) |
28 | 28 | |
29 | button = Gtk.Button('Boton 5') | |
29 | button = Gtk.Button(label='Boton 5') | |
30 | 30 | grid.attach(button, 3, 3, 3, 3) |
31 | 31 | |
32 | 32 | self.add(grid) |
16 | 16 | scrolled.add(vbox) |
17 | 17 | |
18 | 18 | for x in range(1, 16): |
19 | boton = Gtk.Button('Boton %d' % x) | |
19 | boton = Gtk.Button(label='Boton %d' % x) | |
20 | 20 | vbox.pack_start(boton, False, False, 1) |
21 | 21 | |
22 | 22 | self.add(scrolled) |
23 | 23 | box = Gtk.HBox() |
24 | 24 | textview.add_child_at_anchor(box, anchor) |
25 | 25 | |
26 | button = Gtk.Button('Haz click en mi') | |
26 | button = Gtk.Button(label='Haz click en mi') | |
27 | 27 | button.connect('clicked', self._clicked_cb, textbuffer) |
28 | 28 | box.pack_start(button, False, False, 0) |
29 | 29 |
31 | 31 | |
32 | 32 | def _activate_cb(self, button, button_index): |
33 | 33 | if button.get_active(): |
34 | print 'Has seleccionado el boton %d' % button_index | |
34 | print('Has seleccionado el boton %d' % button_index) | |
35 | 35 | |
36 | 36 | |
37 | 37 | PyApp() |
18 | 18 | menubar = Gtk.MenuBar() |
19 | 19 | vbox.pack_start(menubar, False, False, 0) |
20 | 20 | |
21 | self.label = Gtk.Label('Activa un item del menu') | |
21 | self.label = Gtk.Label(label='Activa un item del menu') | |
22 | 22 | vbox.pack_start(self.label, True, True, 0) |
23 | 23 | |
24 | 24 | menu_file = Gtk.Menu() |
102 | 102 | menu_edit.append(separator) |
103 | 103 | |
104 | 104 | label = 'Pagina vertical' |
105 | item_vertical = Gtk.RadioMenuItem(label) | |
105 | item_vertical = Gtk.RadioMenuItem(label=label) | |
106 | 106 | item_vertical.set_active(True) |
107 | 107 | item_vertical.connect('toggled', self._toggled_cb, label) |
108 | 108 | menu_edit.append(item_vertical) |
126 | 126 | |
127 | 127 | menu_help = Gtk.Menu() |
128 | 128 | |
129 | item_help = Gtk.MenuItem('Ayuda') | |
129 | item_help = Gtk.MenuItem(label='Ayuda') | |
130 | 130 | item_help.set_submenu(menu_help) |
131 | 131 | menubar.append(item_help) |
132 | 132 |
0 | 0 | import gi |
1 | 1 | gi.require_version('Gtk', '3.0') |
2 | 2 | from gi.repository import Gtk |
3 | from gi.repository import GObject | |
3 | from gi.repository import GLib | |
4 | 4 | |
5 | 5 | |
6 | 6 | class PyApp(Gtk.Window): |
22 | 22 | self.bar1.set_vexpand(True) |
23 | 23 | grid.attach(self.bar1, 1, 0, 3, 1) |
24 | 24 | |
25 | label = Gtk.Label('Una barra de progreso simple') | |
25 | label = Gtk.Label(label='Una barra de progreso simple') | |
26 | 26 | label.set_hexpand(True) |
27 | 27 | grid.attach(label, 1, 1, 1, 1) |
28 | 28 | |
31 | 31 | self.bar2.set_vexpand(True) |
32 | 32 | grid.attach(self.bar2, 1, 2, 3, 1) |
33 | 33 | |
34 | label = Gtk.Label('Una barra de progreso con pulsos') | |
34 | label = Gtk.Label(label='Una barra de progreso con pulsos') | |
35 | 35 | grid.attach(label, 1, 3, 1, 1) |
36 | 36 | |
37 | GObject.timeout_add(200, self._update) | |
37 | GLib.timeout_add(200, self._update) | |
38 | 38 | |
39 | 39 | self.add(grid) |
40 | 40 | self.show_all() |
34 | 34 | palette_box = Gtk.VBox() |
35 | 35 | palette.set_content(palette_box) |
36 | 36 | |
37 | checkbutton1 = Gtk.CheckButton('Opcion 1') | |
37 | checkbutton1 = Gtk.CheckButton(label='Opcion 1') | |
38 | 38 | palette_box.pack_start(checkbutton1, False, False, 0) |
39 | 39 | |
40 | checkbutton2 = Gtk.CheckButton('Opcion 2') | |
40 | checkbutton2 = Gtk.CheckButton(label='Opcion 2') | |
41 | 41 | palette_box.pack_start(checkbutton2, False, False, 0) |
42 | 42 | |
43 | checkbutton3 = Gtk.CheckButton('Opcion 3') | |
43 | checkbutton3 = Gtk.CheckButton(label='Opcion 3') | |
44 | 44 | palette_box.pack_start(checkbutton3, False, False, 0) |
45 | 45 | |
46 | 46 | separator = Gtk.VSeparator() |
47 | 47 | palette_box.pack_start(separator, False, False, 0) |
48 | 48 | |
49 | radio_button1 = Gtk.RadioButton("Opcion 1") | |
49 | radio_button1 = Gtk.RadioButton(label="Opcion 1") | |
50 | 50 | palette_box.pack_start(radio_button1, False, False, 0) |
51 | 51 | |
52 | radio_button2 = Gtk.RadioButton("Opcion 2", group=radio_button1) | |
52 | radio_button2 = Gtk.RadioButton(label="Opcion 2", group=radio_button1) | |
53 | 53 | palette_box.pack_start(radio_button2, False, False, 0) |
54 | 54 | |
55 | radio_button3 = Gtk.RadioButton("Opcion 3", group=radio_button1) | |
55 | radio_button3 = Gtk.RadioButton(label="Opcion 3", group=radio_button1) | |
56 | 56 | palette_box.pack_start(radio_button3, False, False, 0) |
57 | 57 | |
58 | 58 | palette_box.show_all() |
133 | 133 | if not files: |
134 | 134 | return None |
135 | 135 | |
136 | files.sort() | |
137 | ||
136 | 138 | for _file in files: |
137 | 139 | if _file.endswith('~'): |
138 | 140 | continue |
139 | 141 | entry = {"name": _(_file.capitalize()), |
140 | 142 | "path": os.path.join(path, _file)} |
141 | 143 | |
142 | button = Gtk.Button(entry['name']) | |
144 | button = Gtk.Button(label=entry['name']) | |
143 | 145 | button.set_tooltip_text(entry['path']) |
144 | 146 | button.set_has_tooltip(False) |
145 | 147 | button.connect('clicked', self._destroy, True) |
0 | #!/usr/bin/env python | |
0 | #!/usr/bin/python3 | |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | # Copyright (C) 2013 Ignacio Rodríguez <ignacio@sugarlabs.org> |
3 | 3 | # |
0 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
1 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | |
2 | ||
3 | <svg | |
4 | xmlns:dc="http://purl.org/dc/elements/1.1/" | |
5 | xmlns:cc="http://creativecommons.org/ns#" | |
6 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
7 | xmlns:svg="http://www.w3.org/2000/svg" | |
8 | xmlns="http://www.w3.org/2000/svg" | |
9 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |
10 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |
11 | width="32px" | |
12 | height="32px" | |
13 | id="svg2985" | |
14 | version="1.1" | |
15 | inkscape:version="0.48.3.1 r9886" | |
16 | sodipodi:docname="dark-theme.svg"> | |
17 | <defs | |
18 | id="defs2987" /> | |
19 | <sodipodi:namedview | |
20 | id="base" | |
21 | pagecolor="#ffffff" | |
22 | bordercolor="#666666" | |
23 | borderopacity="1.0" | |
24 | inkscape:pageopacity="0.0" | |
25 | inkscape:pageshadow="2" | |
26 | inkscape:zoom="12.219689" | |
27 | inkscape:cx="12.682313" | |
28 | inkscape:cy="14.416406" | |
29 | inkscape:current-layer="layer1" | |
30 | showgrid="true" | |
31 | inkscape:grid-bbox="true" | |
32 | inkscape:document-units="px" | |
33 | inkscape:snap-global="false" | |
34 | objecttolerance="10000" | |
35 | guidetolerance="10000" | |
36 | showguides="false" | |
37 | inkscape:window-width="1360" | |
38 | inkscape:window-height="712" | |
39 | inkscape:window-x="0" | |
40 | inkscape:window-y="27" | |
41 | inkscape:window-maximized="1"> | |
42 | <sodipodi:guide | |
43 | position="0,0" | |
44 | orientation="0,32" | |
45 | id="guide3767" /> | |
46 | <sodipodi:guide | |
47 | position="32,0" | |
48 | orientation="-32,0" | |
49 | id="guide3769" /> | |
50 | <sodipodi:guide | |
51 | position="32,32" | |
52 | orientation="0,-32" | |
53 | id="guide3771" /> | |
54 | <sodipodi:guide | |
55 | position="0,32" | |
56 | orientation="32,0" | |
57 | id="guide3773" /> | |
58 | <inkscape:grid | |
59 | type="xygrid" | |
60 | id="grid3775" | |
61 | empspacing="5" | |
62 | visible="true" | |
63 | enabled="true" | |
64 | snapvisiblegridlinesonly="true" /> | |
65 | <sodipodi:guide | |
66 | position="0,0" | |
67 | orientation="0,32" | |
68 | id="guide3777" /> | |
69 | <sodipodi:guide | |
70 | position="32,0" | |
71 | orientation="-32,0" | |
72 | id="guide3779" /> | |
73 | <sodipodi:guide | |
74 | position="32,32" | |
75 | orientation="0,-32" | |
76 | id="guide3781" /> | |
77 | <sodipodi:guide | |
78 | position="0,32" | |
79 | orientation="32,0" | |
80 | id="guide3783" /> | |
81 | <sodipodi:guide | |
82 | position="0,0" | |
83 | orientation="0,32" | |
84 | id="guide3785" /> | |
85 | <sodipodi:guide | |
86 | position="32,0" | |
87 | orientation="-32,0" | |
88 | id="guide3787" /> | |
89 | <sodipodi:guide | |
90 | position="32,32" | |
91 | orientation="0,-32" | |
92 | id="guide3789" /> | |
93 | <sodipodi:guide | |
94 | position="0,32" | |
95 | orientation="32,0" | |
96 | id="guide3791" /> | |
97 | </sodipodi:namedview> | |
98 | <metadata | |
99 | id="metadata2990"> | |
100 | <rdf:RDF> | |
101 | <cc:Work | |
102 | rdf:about=""> | |
103 | <dc:format>image/svg+xml</dc:format> | |
104 | <dc:type | |
105 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |
106 | <dc:title></dc:title> | |
107 | </cc:Work> | |
108 | </rdf:RDF> | |
109 | </metadata> | |
110 | <g | |
111 | id="layer1" | |
112 | inkscape:label="Layer 1" | |
113 | inkscape:groupmode="layer"> | |
114 | <rect | |
115 | style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:none" | |
116 | id="rect2993" | |
117 | width="31.022896" | |
118 | height="31.194761" | |
119 | x="0.66299194" | |
120 | y="0.60228604" | |
121 | ry="2.9258621" /> | |
122 | <text | |
123 | xml:space="preserve" | |
124 | style="font-size:11.23703003px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#ffffff;fill-opacity:1;stroke:none;font-family:Sans" | |
125 | x="5.8393445" | |
126 | y="26.455677" | |
127 | id="text3763" | |
128 | sodipodi:linespacing="125%"><tspan | |
129 | sodipodi:role="line" | |
130 | id="tspan3765" | |
131 | x="5.8393445" | |
132 | y="26.455677" | |
133 | style="font-size:30.90183258px;fill:#ffffff;fill-opacity:1">A</tspan></text> | |
134 | </g> | |
135 | </svg> |
0 | <?xml version="1.0" encoding="UTF-8" standalone="no"?> | |
1 | <!-- Created with Inkscape (http://www.inkscape.org/) --> | |
2 | ||
3 | <svg | |
4 | xmlns:dc="http://purl.org/dc/elements/1.1/" | |
5 | xmlns:cc="http://creativecommons.org/ns#" | |
6 | xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" | |
7 | xmlns:svg="http://www.w3.org/2000/svg" | |
8 | xmlns="http://www.w3.org/2000/svg" | |
9 | xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd" | |
10 | xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape" | |
11 | width="32px" | |
12 | height="32px" | |
13 | id="svg2985" | |
14 | version="1.1" | |
15 | inkscape:version="0.48.3.1 r9886" | |
16 | sodipodi:docname="dark-theme.svg"> | |
17 | <defs | |
18 | id="defs2987" /> | |
19 | <sodipodi:namedview | |
20 | id="base" | |
21 | pagecolor="#ffffff" | |
22 | bordercolor="#666666" | |
23 | borderopacity="1.0" | |
24 | inkscape:pageopacity="0.0" | |
25 | inkscape:pageshadow="2" | |
26 | inkscape:zoom="12.219689" | |
27 | inkscape:cx="12.682313" | |
28 | inkscape:cy="14.416406" | |
29 | inkscape:current-layer="layer1" | |
30 | showgrid="true" | |
31 | inkscape:grid-bbox="true" | |
32 | inkscape:document-units="px" | |
33 | inkscape:snap-global="false" | |
34 | objecttolerance="10000" | |
35 | guidetolerance="10000" | |
36 | showguides="false" | |
37 | inkscape:window-width="1360" | |
38 | inkscape:window-height="712" | |
39 | inkscape:window-x="0" | |
40 | inkscape:window-y="27" | |
41 | inkscape:window-maximized="1"> | |
42 | <sodipodi:guide | |
43 | position="0,0" | |
44 | orientation="0,32" | |
45 | id="guide3767" /> | |
46 | <sodipodi:guide | |
47 | position="32,0" | |
48 | orientation="-32,0" | |
49 | id="guide3769" /> | |
50 | <sodipodi:guide | |
51 | position="32,32" | |
52 | orientation="0,-32" | |
53 | id="guide3771" /> | |
54 | <sodipodi:guide | |
55 | position="0,32" | |
56 | orientation="32,0" | |
57 | id="guide3773" /> | |
58 | <inkscape:grid | |
59 | type="xygrid" | |
60 | id="grid3775" | |
61 | empspacing="5" | |
62 | visible="true" | |
63 | enabled="true" | |
64 | snapvisiblegridlinesonly="true" /> | |
65 | <sodipodi:guide | |
66 | position="0,0" | |
67 | orientation="0,32" | |
68 | id="guide3777" /> | |
69 | <sodipodi:guide | |
70 | position="32,0" | |
71 | orientation="-32,0" | |
72 | id="guide3779" /> | |
73 | <sodipodi:guide | |
74 | position="32,32" | |
75 | orientation="0,-32" | |
76 | id="guide3781" /> | |
77 | <sodipodi:guide | |
78 | position="0,32" | |
79 | orientation="32,0" | |
80 | id="guide3783" /> | |
81 | <sodipodi:guide | |
82 | position="0,0" | |
83 | orientation="0,32" | |
84 | id="guide3785" /> | |
85 | <sodipodi:guide | |
86 | position="32,0" | |
87 | orientation="-32,0" | |
88 | id="guide3787" /> | |
89 | <sodipodi:guide | |
90 | position="32,32" | |
91 | orientation="0,-32" | |
92 | id="guide3789" /> | |
93 | <sodipodi:guide | |
94 | position="0,32" | |
95 | orientation="32,0" | |
96 | id="guide3791" /> | |
97 | </sodipodi:namedview> | |
98 | <metadata | |
99 | id="metadata2990"> | |
100 | <rdf:RDF> | |
101 | <cc:Work | |
102 | rdf:about=""> | |
103 | <dc:format>image/svg+xml</dc:format> | |
104 | <dc:type | |
105 | rdf:resource="http://purl.org/dc/dcmitype/StillImage" /> | |
106 | <dc:title></dc:title> | |
107 | </cc:Work> | |
108 | </rdf:RDF> | |
109 | </metadata> | |
110 | <g | |
111 | id="layer1" | |
112 | inkscape:label="Layer 1" | |
113 | inkscape:groupmode="layer"> | |
114 | <rect | |
115 | style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none" | |
116 | id="rect2993" | |
117 | width="31.022896" | |
118 | height="31.194761" | |
119 | x="0.66299194" | |
120 | y="0.60228604" | |
121 | ry="2.9258621" /> | |
122 | <text | |
123 | xml:space="preserve" | |
124 | style="font-size:11.23703002999999967px;font-style:normal;font-weight:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Sans" | |
125 | x="5.8393445" | |
126 | y="26.455677" | |
127 | id="text3763" | |
128 | sodipodi:linespacing="125%"><tspan | |
129 | sodipodi:role="line" | |
130 | id="tspan3765" | |
131 | x="5.8393445" | |
132 | y="26.455677" | |
133 | style="font-size:30.90183258000000066px;fill:#000000;fill-opacity:1">A</tspan></text> | |
134 | </g> | |
135 | </svg> |
0 | This software is covered under the zlib license. | |
1 | ||
2 | C++ version Copyright (c) 2006-2011 Erin Catto http://www.box2d.org | |
3 | Python version Copyright (c) 2008-2011 Ken Lauer / sirkne at gmail dot com | |
4 | ||
5 | Implemented using the pybox2d SWIG interface for Box2D (pybox2d.googlecode.com) | |
6 | ||
7 | This software is provided 'as-is', without any express or implied | |
8 | warranty. In no event will the authors be held liable for any damages | |
9 | arising from the use of this software. | |
10 | Permission is granted to anyone to use this software for any purpose, | |
11 | including commercial applications, and to alter it and redistribute it | |
12 | freely, subject to the following restrictions: | |
13 | 1. The origin of this software must not be misrepresented; you must not | |
14 | claim that you wrote the original software. If you use this software | |
15 | in a product, an acknowledgment in the product documentation would be | |
16 | appreciated but is not required. | |
17 | 2. Altered source versions must be plainly marked as such, and must not be | |
18 | misrepresented as being the original software. | |
19 | 3. This notice may not be removed or altered from any source distribution. |
38 | 38 | if c == delimit: |
39 | 39 | break |
40 | 40 | buf.append(c) |
41 | return ''.join(buf) | |
41 | return b''.join(buf) | |
42 | 42 | oldattr = termios.tcgetattr(fd) # make sure we can restore tty state |
43 | 43 | tty.setraw(fd, termios.TCSANOW) # set to raw mode. |
44 | os.write(fd, '\x1B[18t') # write the 'query screen size' command | |
45 | read_to_delimit('\x1b') # parse response. | |
46 | read_to_delimit('[') | |
47 | size = read_to_delimit('t') | |
44 | os.write(fd, b'\x1B[18t') # write the 'query screen size' command | |
45 | read_to_delimit(b'\x1b') # parse response. | |
46 | read_to_delimit(b'[') | |
47 | size = read_to_delimit(b't') | |
48 | 48 | # Output can be '8;rows;cols' or 'rows;cols' depending on vte version. |
49 | 49 | # (SL #843) |
50 | values = size.split(';') | |
50 | values = size.split(b';') | |
51 | 51 | if len(values) == 3: |
52 | 52 | rows = int(values[1]) |
53 | 53 | cols = int(values[2]) |
73 | 73 | if c == delimit: |
74 | 74 | break |
75 | 75 | buf.append(c) |
76 | return ''.join(buf) | |
76 | return b''.join(buf) | |
77 | 77 | oldattr = termios.tcgetattr(fd) # make sure we can restore tty state |
78 | 78 | tty.setraw(fd, termios.TCSANOW) # set to raw mode. |
79 | os.write(fd, '\x1B[6n') # Report Cursor Position | |
80 | read_to_delimit('\x1b') # parse response. | |
81 | read_to_delimit('[') | |
82 | row = int(read_to_delimit(';')) | |
83 | col = int(read_to_delimit('R')) | |
79 | os.write(fd, b'\x1B[6n') # Report Cursor Position | |
80 | read_to_delimit(b'\x1b') # parse response. | |
81 | read_to_delimit(b'[') | |
82 | row = int(read_to_delimit(b';')) | |
83 | col = int(read_to_delimit(b'R')) | |
84 | 84 | termios.tcsetattr(fd, termios.TCSANOW, oldattr) # reset tty |
85 | 85 | return col, row |
86 | 86 |
75 | 75 | clock = _default_clock |
76 | 76 | clock.tick(max_fps) |
77 | 77 | |
78 | if pygame.event.peek(xrange(pygame.NOEVENT, pygame.USEREVENT)): | |
78 | if pygame.event.peek(list(range(pygame.NOEVENT, pygame.USEREVENT))): | |
79 | 79 | # we're not idle anymore. |
80 | 80 | _last_event_time = pygame.time.get_ticks() |
81 | 81 | elif (pygame.time.get_ticks() - _last_event_time) >= idle_timeout * 1000: |
4 | 4 | # Use own 'elements' modified module |
5 | 5 | # http://bugs.sugarlabs.org/ticket/3361 |
6 | 6 | # sys.path.append('library/pippy/physics/Elements-0.13-py2.5.egg') |
7 | from myelements import Elements | |
7 | from .myelements import Elements |
394 | 394 | try: |
395 | 395 | polyDef.shape.valid |
396 | 396 | except ValueError: |
397 | print "concavePoly: Created an invalid polygon!" | |
397 | print("concavePoly: Created an invalid polygon!") | |
398 | 398 | return None |
399 | 399 | |
400 | 400 | body.CreateFixture(polyDef) |
38 | 38 | |
39 | 39 | # init callback dict to avoid those slow try |
40 | 40 | # (especially for self.get, as it is called *often*) |
41 | for i in xrange(10): | |
41 | for i in range(10): | |
42 | 42 | self.callbacks[i] = [] |
43 | 43 | |
44 | 44 | def add(self, callback_type, callback_handler, *args): |
61 | 61 | if self.parent.listener is None: |
62 | 62 | self.parent.listener = kContactListener(self.get) |
63 | 63 | self.parent.world.SetContactListener(self.parent.listener) |
64 | print "* ContactListener added" | |
64 | print("* ContactListener added") | |
65 | 65 | |
66 | 66 | # Get callback dict for this callback_type |
67 | 67 | c = self.callbacks[callback_type] |
69 | 69 | |
70 | 70 | Return: Class draw_pygame() |
71 | 71 | """ |
72 | print "* Pygame selected as renderer" | |
72 | print("* Pygame selected as renderer") | |
73 | 73 | from pygame import draw |
74 | 74 | from pygame import Rect |
75 | 75 | |
168 | 168 | |
169 | 169 | Return: Class draw_cairo() |
170 | 170 | """ |
171 | print "* Cairo selected as renderer" | |
171 | print("* Cairo selected as renderer") | |
172 | 172 | import cairo |
173 | 173 | self.cairo = cairo |
174 | 174 | self.set_drawing_method(drawMethod) |
186 | 186 | """ |
187 | 187 | self.da = da |
188 | 188 | self.window = da.window |
189 | print "* Cairo renderer drawing area set" | |
189 | print("* Cairo renderer drawing area set") | |
190 | 190 | |
191 | 191 | def set_drawing_method(self, type): |
192 | 192 | """ type = filled, image """ |
334 | 334 | surface .... not used with pyglet |
335 | 335 | lineWidth .. |
336 | 336 | """ |
337 | print "* OpenGL_Pyglet selected as renderer" | |
337 | print("* OpenGL_Pyglet selected as renderer") | |
338 | 338 | |
339 | 339 | from pyglet import gl |
340 | 340 | self.gl = gl |
31 | 31 | try: |
32 | 32 | import Box2D as box2d |
33 | 33 | except: |
34 | print 'Could not load the pybox2d library (Box2D).' | |
35 | print 'Please run "setup.py install" to install the dependencies.' | |
36 | ||
37 | print 'Or recompile pybox2d for your system and python version.' | |
38 | print "See http://code.google.com/p/pybox2d" | |
34 | print('Could not load the pybox2d library (Box2D).') | |
35 | print('Please run "setup.py install" to install the dependencies.') | |
36 | print() | |
37 | print('Or recompile pybox2d for your system and python version.') | |
38 | print("See http://code.google.com/p/pybox2d") | |
39 | 39 | exit() |
40 | 40 | |
41 | 41 | # Standard Imports |
376 | 376 | self.renderer.draw_polygon(clr, points) |
377 | 377 | |
378 | 378 | else: |
379 | print "unknown shape type:%d" % shape.type | |
379 | print("unknown shape type:%d" % shape.type) | |
380 | 380 | |
381 | 381 | for joint in self.world.joints: |
382 | 382 | p2 = joint.anchorA |
409 | 409 | self.mouseJoint.target = (x, y) |
410 | 410 | |
411 | 411 | def pickle_save(self, fn, additional_vars={}): |
412 | import cPickle as pickle | |
412 | import pickle as pickle | |
413 | 413 | self.add.remove_mouseJoint() |
414 | 414 | |
415 | 415 | if not additional_vars and hasattr(self, '_pickle_vars'): |
422 | 422 | try: |
423 | 423 | pickle.dump(save_values, open(fn, 'wb')) |
424 | 424 | except Exception as s: |
425 | print 'Pickling failed: ', s | |
425 | print('Pickling failed: ', s) | |
426 | 426 | return |
427 | 427 | |
428 | print 'Saved to %s' % fn | |
428 | print('Saved to %s' % fn) | |
429 | 429 | |
430 | 430 | def pickle_load(self, fn, set_vars=True, additional_vars=[]): |
431 | 431 | """ |
433 | 433 | additional_vars is a dictionary to be populated with the |
434 | 434 | loaded variables. |
435 | 435 | """ |
436 | import cPickle as pickle | |
436 | import pickle as pickle | |
437 | 437 | try: |
438 | 438 | world, variables = pickle.load(open(fn, 'rb')) |
439 | 439 | world = world._pickle_finalize() |
440 | 440 | variables = box2d.pickle_fix(world, variables, 'load') |
441 | 441 | except Exception as s: |
442 | print 'Error while loading world: ', s | |
442 | print('Error while loading world: ', s) | |
443 | 443 | return |
444 | 444 | |
445 | 445 | self.world = world |
446 | 446 | |
447 | 447 | if set_vars: |
448 | 448 | # reset the additional saved variables: |
449 | for var, value in variables.items(): | |
449 | for var, value in list(variables.items()): | |
450 | 450 | if hasattr(self, var): |
451 | 451 | setattr(self, var, value) |
452 | 452 | else: |
453 | print 'Unknown property %s=%s' % (var, value) | |
454 | ||
455 | print 'Loaded from %s' % fn | |
453 | print('Unknown property %s=%s' % (var, value)) | |
454 | ||
455 | print('Loaded from %s' % fn) | |
456 | 456 | |
457 | 457 | return variables |
458 | 458 | |
530 | 530 | addvars = additional_vars |
531 | 531 | trackinfo = addvars['trackinfo'] |
532 | 532 | backup = trackinfo |
533 | for key, info in backup.iteritems(): | |
533 | for key, info in backup.items(): | |
534 | 534 | if not info[3]: |
535 | 535 | try: |
536 | 536 | trackinfo[key][0] = info[0].userData['saveid'] |
625 | 625 | |
626 | 626 | self.additional_vars = {} |
627 | 627 | addvars = {} |
628 | for (k, v) in worldmodel['additional_vars'].items(): | |
628 | for (k, v) in list(worldmodel['additional_vars'].items()): | |
629 | 629 | addvars[k] = v |
630 | 630 | |
631 | 631 | if serialized and 'trackinfo' in addvars: |
632 | 632 | trackinfo = addvars['trackinfo'] |
633 | for key, info in trackinfo.iteritems(): | |
633 | for key, info in trackinfo.items(): | |
634 | 634 | if not info[3]: |
635 | 635 | addvars['trackinfo'][key][0] = \ |
636 | 636 | self.getBodyWithSaveId(info[0]) |
159 | 159 | focus_in = self.focus |
160 | 160 | |
161 | 161 | found = False |
162 | for i in xrange(len(self.items)): | |
162 | for i in range(len(self.items)): | |
163 | 163 | item = self.items[i] |
164 | 164 | if item.pos_inside(pos): |
165 | 165 | found = True |
194 | 194 | |
195 | 195 | surface.blit(s, (0, 0)) |
196 | 196 | |
197 | for i in xrange(len(self.items)): | |
197 | for i in range(len(self.items)): | |
198 | 198 | item = self.items[i] |
199 | 199 | if not item.parent: |
200 | 200 | x, y, w, h = item.rect |
110 | 110 | |
111 | 111 | # Get maximum difference |
112 | 112 | alpha_diff = fabs(alphas[-1] - alphas[0]) |
113 | print "alpha difference:", alpha_diff | |
113 | print("alpha difference:", alpha_diff) | |
114 | 114 | |
115 | 115 | if alpha_diff < tolerance: |
116 | 116 | return True |
140 | 140 | dir = None |
141 | 141 | is_convex = True |
142 | 142 | |
143 | for i in xrange(len(vertices) - 1): | |
143 | for i in range(len(vertices) - 1): | |
144 | 144 | if i == 0: |
145 | 145 | p_old = vertices[i] |
146 | 146 | continue |
172 | 172 | angle = degrees(acos(a / (b * c))) |
173 | 173 | except: |
174 | 174 | # cos=1.0 |
175 | print "cos=", a / (b * c) | |
175 | print("cos=", a / (b * c)) | |
176 | 176 | continue |
177 | 177 | |
178 | 178 | # Check if inside tolerance |
18 | 18 | import dbus |
19 | 19 | import gobject |
20 | 20 | |
21 | from sugar.datastore import datastore | |
21 | from sugar3.datastore import datastore | |
22 | 22 | |
23 | 23 | DS_DBUS_SERVICE = 'org.laptop.sugar.DataStore' |
24 | 24 | DS_DBUS_INTERFACE = 'org.laptop.sugar.DataStore' |
81 | 81 | return len(self._array) |
82 | 82 | |
83 | 83 | def __getitem__(self, key): |
84 | if isinstance(key, basestring): | |
84 | if isinstance(key, str): | |
85 | 85 | return self._dict[key] |
86 | 86 | else: |
87 | 87 | return self._array[key] |
279 | 279 | SCREEN_SIZE = 10 |
280 | 280 | |
281 | 281 | def mock_debug(string): |
282 | print "\tDEBUG: %s" % string | |
282 | print("\tDEBUG: %s" % string) | |
283 | 283 | logging.debug = mock_debug |
284 | 284 | |
285 | 285 | def mock_find(query, sorting=None, limit=None, offset=None, properties=[]): |
286 | print "mock_find %r %r" % (offset, (offset + limit)) | |
286 | print("mock_find %r %r" % (offset, (offset + limit))) | |
287 | 287 | |
288 | 288 | if limit is None or offset is None: |
289 | 289 | raise RuntimeError("Unimplemented test.") |
298 | 298 | |
299 | 299 | result_set = find({}) |
300 | 300 | |
301 | print "Get first page" | |
301 | print("Get first page") | |
302 | 302 | objects = result_set.read(SCREEN_SIZE) |
303 | print [obj.object_id for obj in objects] | |
304 | assert range(0, SCREEN_SIZE) == [obj.object_id for obj in objects] | |
305 | print "" | |
306 | ||
307 | print "Scroll to 5th item" | |
303 | print([obj.object_id for obj in objects]) | |
304 | assert list(range(0, SCREEN_SIZE)) == [obj.object_id for obj in objects] | |
305 | print("") | |
306 | ||
307 | print("Scroll to 5th item") | |
308 | 308 | result_set.seek(5) |
309 | 309 | objects = result_set.read(SCREEN_SIZE) |
310 | print [obj.object_id for obj in objects] | |
311 | assert range(5, SCREEN_SIZE + 5) == [obj.object_id for obj in objects] | |
312 | print "" | |
313 | ||
314 | print "Scroll back to beginning" | |
310 | print([obj.object_id for obj in objects]) | |
311 | assert list(range(5, SCREEN_SIZE + 5)) == [obj.object_id for obj in objects] | |
312 | print("") | |
313 | ||
314 | print("Scroll back to beginning") | |
315 | 315 | result_set.seek(0) |
316 | 316 | objects = result_set.read(SCREEN_SIZE) |
317 | print [obj.object_id for obj in objects] | |
318 | assert range(0, SCREEN_SIZE) == [obj.object_id for obj in objects] | |
319 | print "" | |
320 | ||
321 | print "Hit PgDn five times" | |
317 | print([obj.object_id for obj in objects]) | |
318 | assert list(range(0, SCREEN_SIZE)) == [obj.object_id for obj in objects] | |
319 | print("") | |
320 | ||
321 | print("Hit PgDn five times") | |
322 | 322 | for i in range(0, 5): |
323 | 323 | result_set.seek((i + 1) * SCREEN_SIZE) |
324 | 324 | objects = result_set.read(SCREEN_SIZE) |
325 | print [obj.object_id for obj in objects] | |
326 | assert range((i + 1) * SCREEN_SIZE, (i + 2) * SCREEN_SIZE) == \ | |
325 | print([obj.object_id for obj in objects]) | |
326 | assert list(range((i + 1) * SCREEN_SIZE, (i + 2) * SCREEN_SIZE)) == \ | |
327 | 327 | [obj.object_id for obj in objects] |
328 | print "" | |
329 | ||
330 | print "Hit PgUp five times" | |
328 | print("") | |
329 | ||
330 | print("Hit PgUp five times") | |
331 | 331 | for i in range(0, 5)[::-1]: |
332 | 332 | result_set.seek(i * SCREEN_SIZE) |
333 | 333 | objects = result_set.read(SCREEN_SIZE) |
334 | print [obj.object_id for obj in objects] | |
335 | assert range(i * SCREEN_SIZE, (i + 1) * SCREEN_SIZE) == \ | |
334 | print([obj.object_id for obj in objects]) | |
335 | assert list(range(i * SCREEN_SIZE, (i + 1) * SCREEN_SIZE)) == \ | |
336 | 336 | [obj.object_id for obj in objects] |
337 | print "" | |
337 | print("") |
30 | 30 | from gettext import gettext as _ |
31 | 31 | |
32 | 32 | from sugar3.graphics.toolbutton import ToolButton |
33 | from sugar3.graphics.alert import ConfirmationAlert | |
33 | 34 | |
34 | 35 | from texteditor import TextBufferCollaberizer |
35 | 36 | |
43 | 44 | 'tab-close': (GObject.SignalFlags.RUN_FIRST, |
44 | 45 | None, |
45 | 46 | ([GObject.TYPE_PYOBJECT])), |
47 | 'tab-rename': (GObject.SignalFlags.RUN_FIRST, | |
48 | None, | |
49 | ([GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT, ])), | |
46 | 50 | } |
47 | 51 | |
48 | 52 | def __init__(self, child, label, path, tabs, editor_id): |
76 | 80 | self._close_button = button |
77 | 81 | tab_object.append(self) |
78 | 82 | |
79 | def set_text(self, title): | |
80 | self._label.set_text(title) | |
83 | def set_text(self, label): | |
84 | self.label_text = label | |
85 | self._label.set_text(self.label_text) | |
81 | 86 | |
82 | 87 | def get_text(self): |
83 | 88 | return self._label.get_text() |
110 | 115 | self.label_entry.show() |
111 | 116 | |
112 | 117 | def _label_entry_cb(self, entry, focus=None): |
113 | if self.label_entry.get_text() != "": | |
114 | self.label_text = self.label_entry.get_text() | |
118 | label = self.label_entry.get_text() | |
119 | if label != "": | |
120 | if label != self.label_text: | |
121 | self.label_text = label | |
122 | self.emit('tab-rename', self.child, label) | |
115 | 123 | self.label_box.show_all() |
116 | 124 | self.label_entry.hide() |
117 | 125 | self._label.set_text(self.label_text) |
128 | 136 | 'tab-added': (GObject.SignalFlags.RUN_FIRST, |
129 | 137 | None, |
130 | 138 | ([])), |
139 | 'tab-renamed': (GObject.SignalFlags.RUN_FIRST, | |
140 | None, | |
141 | ([GObject.TYPE_PYOBJECT, GObject.TYPE_PYOBJECT, ])), | |
142 | 'tab-closed': (GObject.SignalFlags.RUN_FIRST, | |
143 | None, | |
144 | ([GObject.TYPE_PYOBJECT, ])), | |
131 | 145 | } |
132 | 146 | |
133 | 147 | def __init__(self): |
146 | 160 | |
147 | 161 | def __init__(self, buffer_text, editor_id, collab): |
148 | 162 | GtkSource.View.__init__(self) |
163 | ||
164 | self._css_provider = Gtk.CssProvider() | |
165 | self.set_light() | |
166 | self.get_style_context().add_provider( | |
167 | self._css_provider, Gtk.STYLE_PROVIDER_PRIORITY_USER) | |
149 | 168 | |
150 | 169 | text_buffer = GtkSource.Buffer() |
151 | 170 | TextBufferCollaberizer(text_buffer, editor_id, collab) |
188 | 207 | Pango.FontDescription( |
189 | 208 | 'Monospace {}'.format(font_size))) |
190 | 209 | |
210 | def set_dark(self): | |
211 | theme = b""" | |
212 | textview text { | |
213 | background: @black; | |
214 | color: @white; | |
215 | }""" | |
216 | self._css_provider.load_from_data(theme) | |
217 | ||
218 | def set_light(self): | |
219 | theme = b""" | |
220 | textview text { | |
221 | background: @white; | |
222 | color: @black; | |
223 | }""" | |
224 | self._css_provider.load_from_data(theme) | |
191 | 225 | |
192 | 226 | class SourceNotebook(AddNotebook): |
193 | 227 | def __init__(self, activity, collab): |
212 | 246 | text_view.show() |
213 | 247 | text_view.grab_focus() |
214 | 248 | if label: |
215 | self.tablabel = TabLabel(codesw, label, path, self, editor_id) | |
249 | tablabel = TabLabel(codesw, label, path, self, editor_id) | |
216 | 250 | else: |
217 | self.tablabel = TabLabel(codesw, | |
251 | tablabel = TabLabel(codesw, | |
218 | 252 | _('New Source File %d' % self.last_tab), |
219 | 253 | path, self, editor_id) |
220 | self.tablabel.connect('tab-close', self._tab_closed_cb) | |
254 | tablabel.connect('tab-close', self._tab_closed_cb) | |
255 | tablabel.connect('tab-rename', self._tab_renamed_cb) | |
221 | 256 | self.connect('key-press-event', self._key_press_cb) |
222 | 257 | |
223 | 258 | codesw.show_all() |
224 | 259 | |
225 | index = self.append_page(codesw, self.tablabel) | |
260 | index = self.append_page(codesw, tablabel) | |
226 | 261 | self.props.page = index # Set new page as active tab |
227 | 262 | |
228 | 263 | # Show close only when tabs > 1 |
238 | 273 | if event.get_state() & Gdk.ModifierType.CONTROL_MASK: |
239 | 274 | if key_name == 'w': |
240 | 275 | if self.get_n_pages() > 1: |
241 | index = self.get_current_page() | |
242 | self.remove_page(index) | |
243 | tab_object.pop(index) | |
244 | try: | |
245 | logging.debug('deleting session_data %s' % | |
246 | str(self.activity.session_data[index])) | |
247 | del self.activity.session_data[index] | |
248 | except IndexError: | |
249 | pass | |
250 | # Show close only when tabs > 1 | |
251 | only_widget = self.get_nth_page(0) | |
252 | if self.get_n_pages() == 1: | |
253 | self.get_tab_label(only_widget).hide_close_button() | |
254 | else: | |
255 | self.get_tab_label(only_widget).show_close_button() | |
276 | self._tab_closed_cb( | |
277 | None, self.get_nth_page(self.get_current_page())) | |
256 | 278 | elif key_name in ['1', '2', '3', '4', '5', '6', '7', '8', '9']: |
257 | 279 | if int(key_name) <= self.get_n_pages(): |
258 | 280 | self.set_current_page(int(key_name) - 1) |
279 | 301 | def set_current_label(self, label): |
280 | 302 | child = self.get_nth_page(self.get_current_page()) |
281 | 303 | widget = self.get_tab_label(child) |
282 | widget.set_text(self._purify_file(label)) | |
304 | widget.set_text(self.purify_name(label)) | |
283 | 305 | |
284 | 306 | def set_current_path(self, path): |
285 | 307 | child = self.get_nth_page(self.get_current_page()) |
292 | 314 | return text_buffer |
293 | 315 | |
294 | 316 | def get_text_view(self): |
295 | tab = self.get_nth_page(self.get_current_page()).get_children() | |
317 | page = self.get_current_page() | |
318 | if page == -1: | |
319 | return None | |
320 | tab = self.get_nth_page(page).get_children() | |
296 | 321 | text_view = tab[0] |
297 | 322 | return text_view |
298 | 323 | |
299 | def _purify_file(self, label): | |
324 | def purify_name(self, label): | |
300 | 325 | if not label.endswith('.py'): |
301 | 326 | label = label + '.py' |
302 | 327 | |
303 | 328 | label = label.replace(' ', '_') |
304 | if isinstance(label, unicode): | |
305 | label = \ | |
306 | unicodedata.normalize('NFKD', label).encode('ascii', 'ignore') | |
307 | ||
308 | 329 | return label |
309 | 330 | |
310 | 331 | def get_all_data(self): |
317 | 338 | for i in range(0, self.get_n_pages()): |
318 | 339 | child = self.get_nth_page(i) |
319 | 340 | |
320 | label = self._purify_file(self.get_tab_label(child).get_text()) | |
341 | label = self.get_tab_label(child).get_text() | |
321 | 342 | names.append(label) |
322 | 343 | |
323 | 344 | path = self.get_tab_label(child).get_path() |
337 | 358 | def get_current_file_name(self): |
338 | 359 | child = self.get_nth_page(self.get_current_page()) |
339 | 360 | label = self.get_tab_label(child).get_text() |
340 | label = self._purify_file(label) | |
361 | label = self.purify_name(label) | |
341 | 362 | |
342 | 363 | return label |
343 | 364 | |
344 | 365 | def set_font_size(self, font_size): |
345 | 366 | self._font_size = font_size |
346 | 367 | |
347 | for i in xrange(self.get_n_pages()): | |
368 | for i in range(self.get_n_pages()): | |
348 | 369 | page = self.get_nth_page(i) |
349 | 370 | children = page.get_children() |
350 | 371 | children[0].set_font_size(self._font_size) |
351 | 372 | |
352 | 373 | def get_font_size(self): |
353 | 374 | return self._font_size |
375 | ||
376 | def set_light(self): | |
377 | for i in range(self.get_n_pages()): | |
378 | page = self.get_nth_page(i) | |
379 | children = page.get_children() | |
380 | children[0].set_light() | |
381 | ||
382 | def set_dark(self): | |
383 | for i in range(self.get_n_pages()): | |
384 | page = self.get_nth_page(i) | |
385 | children = page.get_children() | |
386 | children[0].set_dark() | |
354 | 387 | |
355 | 388 | def child_exited_cb(self, *args): |
356 | 389 | '''Called whenever a child exits. If there's a handler, runadd it.''' |
359 | 392 | if h is not None: |
360 | 393 | h() |
361 | 394 | |
362 | def _tab_closed_cb(self, notebook, child): | |
363 | index = self.page_num(child) | |
395 | def __tab_close(self, index): | |
364 | 396 | self.remove_page(index) |
365 | 397 | tab_object.pop(index) |
366 | 398 | # Hide close button if only one tab present |
375 | 407 | except IndexError: |
376 | 408 | pass |
377 | 409 | |
378 | def rename_tab(self, iterator1): | |
379 | for i in range(iterator1, self.get_n_pages()): | |
380 | mo = re.match('New Source File ', tab_object[i].get_text()) | |
381 | if mo is not None: | |
382 | tab_object[i].label_text = 'New Source File ' + \ | |
383 | str(self.last_tab + 1) | |
384 | else: | |
385 | tab_object[i].label_text = tab_object[i].get_text() | |
386 | tab_object[i]._label.set_text(tab_object[i].label_text) | |
410 | def _tab_closed_cb(self, notebook, child): | |
411 | index = self.page_num(child) | |
412 | ||
413 | page = self.get_nth_page(index) | |
414 | ||
415 | text_buffer = page.get_children()[0].get_buffer() | |
416 | empty = text_buffer.get_char_count() == 0 | |
417 | ||
418 | if empty: | |
419 | self.__tab_close(index) | |
420 | self.emit('tab-closed', index) | |
421 | return | |
422 | ||
423 | tablabel = self.get_tab_label(page) | |
424 | path = tablabel.get_path() | |
425 | example = self.activity.is_example(path) | |
426 | pristine = not text_buffer.get_modified() | |
427 | ||
428 | if example and pristine: | |
429 | self.__tab_close(index) | |
430 | self.emit('tab-closed', index) | |
431 | return | |
432 | ||
433 | alert = ConfirmationAlert() | |
434 | alert.props.title = _('Erase') | |
435 | alert.props.msg = _('Do you want to permanently erase \"%s\"?') \ | |
436 | % tablabel.get_text() | |
437 | alert.connect('response', self._tab_close_alert_response_cb, index) | |
438 | self.activity.add_alert(alert) | |
439 | ||
440 | def _tab_close_alert_response_cb(self, alert, response_id, index): | |
441 | self.activity.remove_alert(alert) | |
442 | ||
443 | if response_id is not Gtk.ResponseType.OK: | |
444 | return | |
445 | ||
446 | logging.debug( | |
447 | 'SourceNotebook._tab_close_alert_response_cb %r' % (index)) | |
448 | self.__tab_close(index) | |
449 | self.emit('tab-closed', index) | |
450 | ||
451 | def close_tab(self, index): | |
452 | logging.debug('SourceNotebook.close_tab %r' % (index)) | |
453 | self.__tab_close(index) | |
454 | ||
455 | def _tab_renamed_cb(self, tablabel, child, name): | |
456 | index = self.page_num(child) | |
457 | logging.debug('SourceNotebook._tab_renamed_cb %r %r' % (index, name)) | |
458 | self.emit('tab-renamed', index, name) | |
459 | ||
460 | def rename_tab(self, index, name): | |
461 | logging.debug('SourceNotebook.rename_tab %r %r' % (index, name)) | |
462 | page = self.get_nth_page(index) | |
463 | tablabel = self.get_tab_label(page) | |
464 | tablabel.set_text(name) |
0 | #!/usr/bin/python | |
0 | #!/usr/bin/python3 | |
1 | 1 | # -*- coding: utf-8 -*- |
2 | 2 | # |
3 | 3 | # Copyright (C) 2007,2008,2009 Chris Ball, based on Collabora's |
23 | 23 | # Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA |
24 | 24 | |
25 | 25 | """Pippy Activity: A simple Python programming activity .""" |
26 | from __future__ import with_statement | |
26 | ||
27 | 27 | |
28 | 28 | import re |
29 | 29 | import os |
41 | 41 | from dbus.mainloop.glib import DBusGMainLoop |
42 | 42 | |
43 | 43 | from gi import require_version |
44 | require_version('Gdk', '3.0') | |
44 | 45 | require_version('Gtk', '3.0') |
46 | from gi.repository import Gdk | |
45 | 47 | from gi.repository import Gtk |
46 | from gi.repository import Gdk | |
47 | 48 | from gi.repository import GLib |
48 | 49 | from gi.repository import Pango |
49 | 50 | try: |
89 | 90 | |
90 | 91 | text_buffer = None |
91 | 92 | # magic prefix to use utf-8 source encoding |
92 | PYTHON_PREFIX = '''#!/usr/bin/python | |
93 | PYTHON_PREFIX = '''#!/usr/bin/python3 | |
93 | 94 | # -*- coding: utf-8 -*- |
94 | 95 | ''' |
95 | 96 | # Force category names into Pootle |
98 | 99 | |
99 | 100 | _logger = logging.getLogger('pippy-activity') |
100 | 101 | |
101 | DISTUTILS_SETUP_SCRIPT = """#!/usr/bin/python | |
102 | DISTUTILS_SETUP_SCRIPT = """#!/usr/bin/python3 | |
102 | 103 | # -*- coding: utf-8 -*- |
103 | 104 | from distutils.core import setup |
104 | 105 | setup(name='{modulename}', |
109 | 110 | ) |
110 | 111 | """ # This is .format()'ed with the list of the file names. |
111 | 112 | |
112 | DISTUTILS_SETUP_SCRIPT = """#!/usr/bin/python | |
113 | DISTUTILS_SETUP_SCRIPT = """#!/usr/bin/python3 | |
113 | 114 | # -*- coding: utf-8 -*- |
114 | 115 | from distutils.core import setup |
115 | 116 | setup(name='{modulename}', |
159 | 160 | self.after_init() |
160 | 161 | self.connect("notify::active", self.__active_cb) |
161 | 162 | self._collab.setup() |
163 | ||
164 | def focus(): | |
165 | """ Enforce focus for the text view once. """ | |
166 | widget = self.get_toplevel().get_focus() | |
167 | textview = self._source_tabs.get_text_view() | |
168 | if widget is None and textview is not None: | |
169 | textview.grab_focus() | |
170 | return True | |
171 | return False | |
172 | GLib.timeout_add(100, focus) | |
162 | 173 | |
163 | 174 | def initialize_display(self): |
164 | 175 | '''Build activity toolbar with title input, share button and export |
248 | 259 | self._toggle_output.connect('toggled', self._toggle_output_cb) |
249 | 260 | actions_toolbar.insert(self._toggle_output, -1) |
250 | 261 | self._toggle_output.show() |
262 | ||
263 | self._inverted_colors = ToggleToolButton(icon_name='dark-theme') | |
264 | self._inverted_colors.set_tooltip(_('Inverted Colors')) | |
265 | self._inverted_colors.set_accelerator('<Ctrl><Shift>I') | |
266 | self._inverted_colors.connect( | |
267 | 'toggled', self.__inverted_colors_toggled_cb) | |
268 | actions_toolbar.insert(self._inverted_colors, -1) | |
269 | self._inverted_colors.show() | |
251 | 270 | |
252 | 271 | icons_path = os.path.join(get_bundle_path(), 'icons') |
253 | 272 | |
289 | 308 | icon_color = Gtk.Image() |
290 | 309 | icon_color.set_from_file(os.path.join(icons_path, 'eraser_color.svg')) |
291 | 310 | icon_color.show() |
292 | button = ToolButton(label=_('Clear')) | |
311 | button = ToolButton(label=_('Clear output panel')) | |
293 | 312 | button.props.accelerator = _('<alt>c') |
294 | 313 | button.set_icon_widget(icon_bw) |
295 | 314 | button.connect('clicked', self._clear_button_cb) |
296 | 315 | button.connect('clicked', self._flash_cb, |
297 | 316 | dict({'bw': icon_bw, 'color': icon_color})) |
298 | button.set_tooltip(_('Clear')) | |
317 | button.set_tooltip(_('Clear output panel')) | |
299 | 318 | actions_toolbar.insert(button, -1) |
300 | 319 | button.show() |
301 | 320 | |
385 | 404 | |
386 | 405 | self._source_tabs = SourceNotebook(self, self._collab) |
387 | 406 | self._source_tabs.connect('tab-added', self._add_source_cb) |
407 | self._source_tabs.connect('tab-renamed', self._rename_source_cb) | |
408 | self._source_tabs.connect('tab-closed', self._close_source_cb) | |
388 | 409 | if self._loaded_session: |
389 | 410 | for name, content, path in self._loaded_session: |
390 | 411 | self._source_tabs.add_tab(name, content, path) |
402 | 423 | self._vte.set_size(30, 5) |
403 | 424 | self._vte.set_scrollback_lines(-1) |
404 | 425 | |
405 | # XXX support both Vte APIs | |
406 | if _has_new_vte_api(): | |
407 | foreground = Gdk.RGBA() | |
408 | foreground.parse('#000000') | |
409 | background = Gdk.RGBA() | |
410 | background.parse('#E7E7E7') | |
411 | else: | |
412 | foreground = Gdk.color_parse('#000000') | |
413 | background = Gdk.color_parse('#E7E7E7') | |
414 | ||
415 | self._vte.set_colors(foreground, background, []) | |
426 | self._vte_set_colors('#000000', '#E7E7E7') | |
416 | 427 | |
417 | 428 | self._child_exited_handler = None |
418 | 429 | self._vte.connect('child_exited', self._child_exited_cb) |
430 | 441 | self._outbox.show() |
431 | 442 | vpane.show() |
432 | 443 | return vpane |
444 | ||
445 | def _vte_set_colors(self, bg, fg): | |
446 | # XXX support both Vte APIs | |
447 | if _has_new_vte_api(): | |
448 | foreground = Gdk.RGBA() | |
449 | foreground.parse(bg) | |
450 | background = Gdk.RGBA() | |
451 | background.parse(fg) | |
452 | else: | |
453 | foreground = Gdk.color_parse(bg) | |
454 | background = Gdk.color_parse(fg) | |
455 | ||
456 | self._vte.set_colors(foreground, background, []) | |
433 | 457 | |
434 | 458 | def after_init(self): |
435 | 459 | self._outbox.hide() |
463 | 487 | Pango.FontDescription('Monospace {}'.format(font_size))) |
464 | 488 | |
465 | 489 | def __active_cb(self, widget, event): |
466 | logging.debug('__active_cb %r', self.props.active) | |
490 | _logger.debug('__active_cb %r', self.props.active) | |
467 | 491 | if self.props.active: |
468 | 492 | self.resume() |
469 | 493 | else: |
470 | 494 | self.pause() |
471 | 495 | |
472 | 496 | def do_visibility_notify_event(self, event): |
473 | logging.debug('do_visibility_notify_event %r', event.get_state()) | |
497 | _logger.debug('do_visibility_notify_event %r', event.get_state()) | |
474 | 498 | if event.get_state() == Gdk.VisibilityState.FULLY_OBSCURED: |
475 | 499 | self.pause() |
476 | 500 | else: |
494 | 518 | self._outbox.hide() |
495 | 519 | self._toggle_output.set_tooltip(_('Show output panel')) |
496 | 520 | self._toggle_output.set_icon_name('tray-show') |
521 | ||
522 | def __inverted_colors_toggled_cb(self, button): | |
523 | if button.props.active: | |
524 | self._vte_set_colors('#E7E7E7', '#000000') | |
525 | self._source_tabs.set_dark() | |
526 | button.set_icon_name('light-theme') | |
527 | button.set_tooltip(_('Normal Colors')) | |
528 | else: | |
529 | self._vte_set_colors('#000000', '#E7E7E7') | |
530 | self._source_tabs.set_light() | |
531 | button.set_icon_name('dark-theme') | |
532 | button.set_tooltip(_('Inverted Colors')) | |
497 | 533 | |
498 | 534 | def _load_example_cb(self, widget): |
499 | 535 | widget.set_icon_name('pippy-openon') |
521 | 557 | # up the text buffer |
522 | 558 | self._collab.post(dict(action='add-source-request')) |
523 | 559 | |
560 | def _rename_source_cb(self, notebook, page, name): | |
561 | _logger.debug('_rename_source_cb %r %r' % (page, name)) | |
562 | self._collab.post(dict(action='rename-source', page=page, name=name)) | |
563 | ||
564 | def _close_source_cb(self, notebook, page): | |
565 | _logger.debug('_close_source_cb %r' % (page)) | |
566 | self._collab.post(dict(action='close-source', page=page)) | |
567 | ||
524 | 568 | def __message_cb(self, collab, buddy, msg): |
525 | 569 | action = msg.get('action') |
526 | 570 | if action == 'add-source-request' and self._collab._leader: |
528 | 572 | elif action == 'add-source': |
529 | 573 | self._add_source_cb( |
530 | 574 | None, force=True, editor_id=msg.get('editor_id')) |
575 | elif action == 'rename-source': | |
576 | page = msg.get('page') | |
577 | name = msg.get('name') | |
578 | _logger.debug('__message_cb rename-source %r %r' % (page, name)) | |
579 | self._source_tabs.rename_tab(page, name) | |
580 | elif action == 'close-source': | |
581 | page = msg.get('page') | |
582 | _logger.debug('__message_cb close-source %r' % (page)) | |
583 | self._source_tabs.close_tab(page) | |
531 | 584 | |
532 | 585 | def _vte_drop_cb(self, widget, context, x, y, selection, targetType, time): |
533 | 586 | if targetType == TARGET_TYPE_TEXT: |
543 | 596 | try: |
544 | 597 | self._source_tabs.remove_page(0) |
545 | 598 | tab_object.pop(0) |
599 | self._source_tabs.last_tab = 0 | |
546 | 600 | except IndexError: |
547 | 601 | pass |
548 | 602 | |
549 | list_ = zip(*data) | |
603 | list_ = list(zip(*data)) | |
550 | 604 | for name, code, path, modified, editor_id in list_: |
551 | 605 | self._source_tabs.add_tab( |
552 | 606 | label=name, editor_id=editor_id) |
592 | 646 | |
593 | 647 | def _write_all_buffers(self, tmp_dir): |
594 | 648 | data = self._source_tabs.get_all_data() |
595 | zipdata = zip(data[0], data[1]) | |
649 | zipdata = list(zip(data[0], data[1])) | |
596 | 650 | for name, content in zipdata: |
651 | name = self._source_tabs.purify_name(name) | |
597 | 652 | with open(os.path.join(tmp_dir, name), 'w') as f: |
598 | 653 | # Write utf-8 coding prefix if there's not one already |
599 | 654 | if re.match(r'coding[:=]\s*([-\w.]+)', |
603 | 658 | |
604 | 659 | def _reset_vte(self): |
605 | 660 | self._vte.grab_focus() |
606 | self._vte.feed('\x1B[H\x1B[J\x1B[0;39m') | |
661 | self._vte.feed(b'\x1B[H\x1B[J\x1B[0;39m') | |
607 | 662 | |
608 | 663 | def __undobutton_cb(self, butston): |
609 | 664 | text_buffer = self._source_tabs.get_text_buffer() |
659 | 714 | self._pid = vte_run( |
660 | 715 | Vte.PtyFlags.DEFAULT, |
661 | 716 | get_bundle_path(), |
662 | ['/bin/sh', '-c', 'python %s; sleep 1' % current_file, | |
717 | ['/bin/sh', '-c', 'python3 %s; sleep 1' % current_file, | |
663 | 718 | 'PYTHONPATH=%s/library:%s' % (get_bundle_path(), |
664 | 719 | os.getenv('PYTHONPATH', ''))], |
665 | 720 | ['PYTHONPATH=%s/library:%s' % (get_bundle_path(), |
772 | 827 | self._stop_button_cb(None) # try stopping old code first. |
773 | 828 | self._reset_vte() |
774 | 829 | self._outbox.show_all() |
775 | self._vte.feed(_("Creating activity bundle...")) | |
776 | self._vte.feed("\r\n") | |
830 | self._vte.feed(_("Creating activity bundle...").encode()) | |
831 | self._vte.feed(b'\r\n') | |
777 | 832 | TMPDIR = 'instance' |
778 | 833 | app_temp = mkdtemp('.activity', 'Pippy', |
779 | 834 | os.path.join(self.get_activity_root(), TMPDIR)) |
787 | 842 | icon = window.get_icon() |
788 | 843 | self._stop_button_cb(None) # Try stopping old code first. |
789 | 844 | self._reset_vte() |
790 | self._vte.feed(_('Creating activity bundle...')) | |
791 | self._vte.feed('\r\n') | |
845 | self._vte.feed(_('Creating activity bundle...').encode()) | |
846 | self._vte.feed(b'\r\n') | |
792 | 847 | |
793 | 848 | TMPDIR = 'instance' |
794 | 849 | app_temp = mkdtemp('.activity', 'Pippy', |
804 | 859 | # FIXME: vte invocation was raising errors. |
805 | 860 | # Switched to subprocss |
806 | 861 | output = subprocess.check_output( |
807 | ['/usr/bin/python2', | |
862 | ['/usr/bin/python3', | |
808 | 863 | '%s/pippy_app.py' % get_bundle_path(), |
809 | 864 | '-p', '%s/library' % get_bundle_path(), |
810 | 865 | '-d', app_temp, title, sourcefile, icon]) |
811 | 866 | self._vte.feed(output) |
812 | self._vte.feed('\r\n') | |
867 | self._vte.feed(b'\r\n') | |
813 | 868 | self._bundle_cb(title, app_temp) |
814 | 869 | except subprocess.CalledProcessError: |
815 | 870 | rmtree(app_temp, ignore_errors=True) # clean up! |
816 | self._vte.feed(_('Save as Activity Error')) | |
817 | self._vte.feed('\r\n') | |
871 | self._vte.feed(_('Save as Activity Error').encode()) | |
872 | self._vte.feed(b'\r\n') | |
818 | 873 | raise |
819 | 874 | |
820 | 875 | def _alert_response(alert, response_id): |
874 | 929 | os.chdir(app_temp) |
875 | 930 | |
876 | 931 | subprocess.check_output( |
877 | ['/usr/bin/python', os.path.join(app_temp, 'setup.py'), 'sdist', | |
932 | ['/usr/bin/python3', os.path.join(app_temp, 'setup.py'), 'sdist', | |
878 | 933 | '-v']) |
879 | 934 | |
880 | 935 | # Hand off to journal |
881 | os.chmod(app_temp, 0777) | |
936 | os.chmod(app_temp, 0o777) | |
882 | 937 | jobject = datastore.create() |
883 | 938 | metadata = { |
884 | 939 | 'title': '%s distutils bundle' % title, |
885 | 940 | 'title_set_by_user': '1', |
886 | 941 | 'mime_type': 'application/x-gzip', |
887 | 942 | } |
888 | for k, v in metadata.items(): | |
943 | for k, v in list(metadata.items()): | |
889 | 944 | # The dict.update method is missing =( |
890 | 945 | jobject.metadata[k] = v |
891 | 946 | tarname = 'dist/{modulename}-1.0.tar.gz'.format(modulename=title) |
908 | 963 | return |
909 | 964 | self._stop_button_cb(None) # Try stopping old code first. |
910 | 965 | self._reset_vte() |
911 | self._vte.feed(_('Creating example...')) | |
912 | self._vte.feed('\r\n') | |
966 | self._vte.feed(_('Creating example...').encode()) | |
967 | self._vte.feed(b'\r\n') | |
913 | 968 | local_data = os.path.join(os.environ['SUGAR_ACTIVITY_ROOT'], 'data') |
914 | 969 | local_file = os.path.join(local_data, title) |
915 | 970 | if os.path.exists(local_file): |
922 | 977 | else: |
923 | 978 | self.write_file(local_file) |
924 | 979 | self._reset_vte() |
925 | self._vte.feed(_('Saved as example.')) | |
926 | self._vte.feed('\r\n') | |
980 | self._vte.feed(_('Saved as example.').encode()) | |
981 | self._vte.feed(b'\r\n') | |
927 | 982 | self._add_to_example_list(local_file) |
928 | 983 | |
929 | 984 | def _child_exited_cb(self, *args): |
943 | 998 | if len(bundle_file) != 1: |
944 | 999 | _logger.debug("Couldn't find bundle: %s" % |
945 | 1000 | str(bundle_file)) |
946 | self._vte.feed('\r\n') | |
947 | self._vte.feed(_('Error saving activity to journal.')) | |
948 | self._vte.feed('\r\n') | |
1001 | self._vte.feed(b'\r\n') | |
1002 | self._vte.feed(_('Error saving activity to journal.').encode()) | |
1003 | self._vte.feed(b'\r\n') | |
949 | 1004 | return # Something went wrong. |
950 | 1005 | # Hand off to journal |
951 | os.chmod(app_temp, 0755) | |
1006 | os.chmod(app_temp, 0o755) | |
952 | 1007 | jobject = datastore.create() |
953 | 1008 | metadata = { |
954 | 1009 | 'title': '%s Bundle' % title, |
958 | 1013 | 'icon-color': profile.get_color().to_string(), |
959 | 1014 | 'mime_type': 'application/vnd.olpc-sugar', |
960 | 1015 | } |
961 | for k, v in metadata.items(): | |
1016 | for k, v in list(metadata.items()): | |
962 | 1017 | # The dict.update method is missing =( |
963 | 1018 | jobject.metadata[k] = v |
964 | 1019 | jobject.file_path = os.path.join(app_temp, bundle_file[0]) |
965 | 1020 | datastore.write(jobject) |
966 | self._vte.feed('\r\n') | |
967 | self._vte.feed(_('Activity saved to journal.')) | |
968 | self._vte.feed('\r\n') | |
1021 | self._vte.feed(b'\r\n') | |
1022 | self._vte.feed(_('Activity saved to journal.').encode()) | |
1023 | self._vte.feed(b'\r\n') | |
969 | 1024 | self.journal_show_object(jobject.object_id) |
970 | 1025 | jobject.destroy() |
971 | 1026 | finally: |
980 | 1035 | if response_id is Gtk.ResponseType.OK: |
981 | 1036 | self.write_file(local_file) |
982 | 1037 | self._reset_vte() |
983 | self._vte.feed(_('Saved as example.')) | |
984 | self._vte.feed('\r\n') | |
1038 | self._vte.feed(_('Saved as example.').encode()) | |
1039 | self._vte.feed(b'\r\n') | |
985 | 1040 | else: |
986 | 1041 | self._reset_vte() |
987 | 1042 | |
991 | 1046 | _iter = self.model.insert_before(self.example_iter, None) |
992 | 1047 | self.model.set_value(_iter, 0, entry) |
993 | 1048 | self.model.set_value(_iter, 1, entry['name']) |
1049 | ||
1050 | def is_example(self, path): | |
1051 | if path is None: | |
1052 | return False | |
1053 | ||
1054 | for name in self.paths: | |
1055 | if path.startswith(name[1]): | |
1056 | return True | |
1057 | ||
1058 | return False | |
994 | 1059 | |
995 | 1060 | def _get_pippy_object_id(self): |
996 | 1061 | ''' We need the object_id of this pippy instance to save in the .py |
1004 | 1069 | def write_file(self, file_path): |
1005 | 1070 | pippy_id = self._get_pippy_object_id() |
1006 | 1071 | data = self._source_tabs.get_all_data() |
1007 | zipped_data = zip(*data) | |
1072 | zipped_data = list(zip(*data)) | |
1008 | 1073 | session_list = [] |
1009 | 1074 | app_temp = os.path.join(self.get_activity_root(), 'instance') |
1010 | 1075 | tmpfile = os.path.join(app_temp, 'pippy-tempfile-storing.py') |
1011 | 1076 | for zipdata, content in zip(zipped_data, self.session_data): |
1012 | logging.debug('Session data %r', content) | |
1077 | _logger.debug('Session data %r', content) | |
1013 | 1078 | name, python_code, path, modified, editor_id = zipdata |
1014 | 1079 | if content is not None and content == self._py_object_id: |
1015 | 1080 | _logger.debug('saving to self') |
1096 | 1161 | try: |
1097 | 1162 | self._source_tabs.remove_page(0) |
1098 | 1163 | tab_object.pop(0) |
1164 | self._source_tabs.last_tab = 0 | |
1099 | 1165 | except IndexError: |
1100 | 1166 | pass |
1101 | 1167 | |
1118 | 1184 | |
1119 | 1185 | self._py_file_loaded_from_journal = True |
1120 | 1186 | |
1121 | # Discard the '#!/usr/bin/python' and 'coding: utf-8' lines, | |
1187 | # Discard the '#!/usr/bin/python3' and 'coding: utf-8' lines, | |
1122 | 1188 | # if present |
1123 | 1189 | python_code = re.sub(r'^' + re.escape(PYTHON_PREFIX), '', text) |
1124 | 1190 | name = self.metadata['title'] |
1176 | 1242 | if 'mime_type' not in dsobject.metadata: |
1177 | 1243 | _logger.error( |
1178 | 1244 | 'Warning: %s missing mime_type' % content) |
1179 | elif dsobject.metadata['mime_type'] != 'text/python': | |
1245 | elif dsobject.metadata['mime_type'] != 'text/x-python': | |
1180 | 1246 | _logger.error( |
1181 | 1247 | 'Warning: %s has unexpected mime_type %s' % |
1182 | 1248 | (content, dsobject.metadata['mime_type'])) |
1208 | 1274 | [Activity] |
1209 | 1275 | name = %(title)s |
1210 | 1276 | bundle_id = %(bundle_id)s |
1211 | exec = sugar-activity %(class)s | |
1277 | exec = sugar-activity3 %(class)s | |
1212 | 1278 | icon = activity-icon |
1213 | 1279 | activity_version = %(version)d |
1214 | 1280 | mime_types = %(mime_types)s |
1362 | 1428 | try_import = False |
1363 | 1429 | |
1364 | 1430 | info = readmodule_ex(module, [sourcedir] + options.path) |
1365 | for func in bundle_info.keys(): | |
1431 | for func in list(bundle_info.keys()): | |
1366 | 1432 | p_a_func = 'pippy_activity_%s' % func |
1367 | 1433 | if p_a_func in info: |
1368 | 1434 | try_import = True |
1371 | 1437 | oldpath = list(sys.path) |
1372 | 1438 | sys.path[0:0] = [sourcedir] + options.path |
1373 | 1439 | modobj = __import__(module) |
1374 | for func in bundle_info.keys(): | |
1440 | for func in list(bundle_info.keys()): | |
1375 | 1441 | p_a_func = 'pippy_activity_%s' % func |
1376 | 1442 | if p_a_func in modobj.__dict__: |
1377 | 1443 | bundle_info[func] = modobj.__dict__[p_a_func]() |
1394 | 1460 | 'NEWS': bundle_info['news'], |
1395 | 1461 | } |
1396 | 1462 | extra_files.update(bundle_info['extra_files']) |
1397 | for path, contents in extra_files.items(): | |
1463 | for path, contents in list(extra_files.items()): | |
1398 | 1464 | # safety first! |
1399 | 1465 | assert '..' not in path |
1400 | 1466 | dirname, filename = os.path.split(path) |
7 | 7 | msgstr "" |
8 | 8 | "Project-Id-Version: PACKAGE VERSION\n" |
9 | 9 | "Report-Msgid-Bugs-To: \n" |
10 | "POT-Creation-Date: 2018-08-29 14:54+1000\n" | |
10 | "POT-Creation-Date: 2020-03-10 10:37+1100\n" | |
11 | 11 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" |
12 | 12 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" |
13 | 13 | "Language-Team: LANGUAGE <LL@li.org>\n" |
26 | 26 | "language your computer understands called \"Python\"." |
27 | 27 | msgstr "" |
28 | 28 | |
29 | #: activity.py:65 | |
29 | #: activity.py:67 | |
30 | 30 | #, python-format |
31 | 31 | msgid "%s Source" |
32 | 32 | msgstr "" |
33 | 33 | |
34 | #: collabwrapper.py:176 | |
34 | #: collabwrapper.py:196 | |
35 | 35 | msgid "Joining activity..." |
36 | 36 | msgstr "" |
37 | 37 | |
38 | #: collabwrapper.py:177 collabwrapper.py:189 | |
38 | #: collabwrapper.py:197 collabwrapper.py:209 | |
39 | 39 | msgid "Please wait for the connection..." |
40 | 40 | msgstr "" |
41 | 41 | |
42 | #: collabwrapper.py:188 | |
42 | #: collabwrapper.py:208 | |
43 | 43 | msgid "Resuming shared activity..." |
44 | 44 | msgstr "" |
45 | 45 | |
55 | 55 | msgid "PAUSED" |
56 | 56 | msgstr "" |
57 | 57 | |
58 | #: library/pippy/sound.py:41 sound_check.py:27 | |
58 | #: library/pippy/sound.py:41 sound_check.py:26 | |
59 | 59 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" |
60 | 60 | msgstr "" |
61 | 61 | |
62 | #: notebook.py:219 | |
62 | #: notebook.py:253 | |
63 | 63 | #, python-format |
64 | 64 | msgid "New Source File %d" |
65 | 65 | msgstr "" |
66 | 66 | |
67 | #: pippy_app.py:97 | |
67 | #: notebook.py:435 | |
68 | msgid "Erase" | |
69 | msgstr "" | |
70 | ||
71 | #: notebook.py:436 | |
72 | #, python-format | |
73 | msgid "Do you want to permanently erase \"%s\"?" | |
74 | msgstr "" | |
75 | ||
76 | #: pippy_app.py:98 | |
68 | 77 | msgid "graphics" |
69 | 78 | msgstr "" |
70 | 79 | |
71 | #: pippy_app.py:97 | |
80 | #: pippy_app.py:98 | |
72 | 81 | msgid "math" |
73 | 82 | msgstr "" |
74 | 83 | |
75 | #: pippy_app.py:97 | |
84 | #: pippy_app.py:98 | |
76 | 85 | msgid "python" |
77 | 86 | msgstr "" |
78 | 87 | |
79 | #: pippy_app.py:97 | |
88 | #: pippy_app.py:98 | |
80 | 89 | msgid "sound" |
81 | 90 | msgstr "" |
82 | 91 | |
83 | #: pippy_app.py:98 | |
92 | #: pippy_app.py:99 | |
84 | 93 | msgid "string" |
85 | 94 | msgstr "" |
86 | 95 | |
87 | #: pippy_app.py:98 | |
96 | #: pippy_app.py:99 | |
88 | 97 | msgid "tutorials" |
89 | 98 | msgstr "" |
90 | 99 | |
91 | #: pippy_app.py:181 | |
100 | #: pippy_app.py:192 | |
92 | 101 | msgid "Import Python file to new tab" |
93 | 102 | msgstr "" |
94 | 103 | |
95 | #: pippy_app.py:187 | |
104 | #: pippy_app.py:198 | |
96 | 105 | msgid "Export as Pippy document" |
97 | 106 | msgstr "" |
98 | 107 | |
99 | #: pippy_app.py:193 | |
108 | #: pippy_app.py:204 | |
100 | 109 | msgid "Save this file to the Pippy library" |
101 | 110 | msgstr "" |
102 | 111 | |
103 | #: pippy_app.py:201 | |
112 | #: pippy_app.py:212 | |
104 | 113 | msgid "Export as new Pippy example" |
105 | 114 | msgstr "" |
106 | 115 | |
107 | #: pippy_app.py:207 | |
116 | #: pippy_app.py:218 | |
108 | 117 | msgid "Create a Sugar activity bundle" |
109 | 118 | msgstr "" |
110 | 119 | |
111 | 120 | #. TRANS: A distutils package is used to distribute Python modules |
112 | #: pippy_app.py:214 | |
121 | #: pippy_app.py:225 | |
113 | 122 | msgid "Export as a distutils package" |
114 | 123 | msgstr "" |
115 | 124 | |
116 | #: pippy_app.py:224 | |
125 | #: pippy_app.py:235 | |
117 | 126 | msgid "Edit" |
118 | 127 | msgstr "" |
119 | 128 | |
120 | #: pippy_app.py:238 | |
129 | #: pippy_app.py:249 | |
121 | 130 | msgid "View" |
122 | 131 | msgstr "" |
123 | 132 | |
124 | #: pippy_app.py:248 pippy_app.py:496 | |
133 | #: pippy_app.py:259 pippy_app.py:520 | |
125 | 134 | msgid "Show output panel" |
126 | 135 | msgstr "" |
127 | 136 | |
128 | #: pippy_app.py:261 pippy_app.py:264 | |
137 | #: pippy_app.py:265 pippy_app.py:533 | |
138 | msgid "Inverted Colors" | |
139 | msgstr "" | |
140 | ||
141 | #: pippy_app.py:280 pippy_app.py:283 | |
129 | 142 | msgid "Run!" |
130 | 143 | msgstr "" |
131 | 144 | |
132 | #: pippy_app.py:262 | |
145 | #: pippy_app.py:281 | |
133 | 146 | msgid "<alt>r" |
134 | 147 | msgstr "" |
135 | 148 | |
136 | #: pippy_app.py:277 pippy_app.py:283 | |
149 | #: pippy_app.py:296 pippy_app.py:302 | |
137 | 150 | msgid "Stop" |
138 | 151 | msgstr "" |
139 | 152 | |
140 | #: pippy_app.py:278 | |
153 | #: pippy_app.py:297 | |
141 | 154 | msgid "<alt>s" |
142 | 155 | msgstr "" |
143 | 156 | |
144 | #: pippy_app.py:293 pippy_app.py:299 | |
145 | msgid "Clear" | |
146 | msgstr "" | |
147 | ||
148 | #: pippy_app.py:294 | |
157 | #: pippy_app.py:312 pippy_app.py:318 | |
158 | msgid "Clear output panel" | |
159 | msgstr "" | |
160 | ||
161 | #: pippy_app.py:313 | |
149 | 162 | msgid "<alt>c" |
150 | 163 | msgstr "" |
151 | 164 | |
152 | #: pippy_app.py:310 | |
165 | #: pippy_app.py:329 | |
153 | 166 | msgid "Open an example" |
154 | 167 | msgstr "" |
155 | 168 | |
156 | #: pippy_app.py:385 | |
169 | #: pippy_app.py:404 | |
157 | 170 | msgid "My examples" |
158 | 171 | msgstr "" |
159 | 172 | |
160 | #: pippy_app.py:492 | |
173 | #: pippy_app.py:516 | |
161 | 174 | msgid "Hide output panel" |
162 | 175 | msgstr "" |
163 | 176 | |
164 | #: pippy_app.py:699 | |
177 | #: pippy_app.py:528 | |
178 | msgid "Normal Colors" | |
179 | msgstr "" | |
180 | ||
181 | #: pippy_app.py:754 | |
165 | 182 | msgid "Python File added to Library" |
166 | 183 | msgstr "" |
167 | 184 | |
168 | #: pippy_app.py:700 | |
185 | #: pippy_app.py:755 | |
169 | 186 | #, python-brace-format |
170 | 187 | msgid "" |
171 | 188 | "The file you selected has been added to the library. Use \"import " |
172 | 189 | "{importname}\" to import the library for using." |
173 | 190 | msgstr "" |
174 | 191 | |
175 | #: pippy_app.py:710 | |
192 | #: pippy_app.py:765 | |
176 | 193 | msgid "Saved" |
177 | 194 | msgstr "" |
178 | 195 | |
179 | #: pippy_app.py:711 | |
196 | #: pippy_app.py:766 | |
180 | 197 | msgid "The document has been saved to journal." |
181 | 198 | msgstr "" |
182 | 199 | |
183 | #: pippy_app.py:725 pippy_app.py:732 | |
200 | #: pippy_app.py:780 pippy_app.py:787 | |
184 | 201 | msgid "Error importing Python file" |
185 | 202 | msgstr "" |
186 | 203 | |
187 | #: pippy_app.py:726 | |
204 | #: pippy_app.py:781 | |
188 | 205 | msgid "The file you selected is not a Python file." |
189 | 206 | msgstr "" |
190 | 207 | |
191 | #: pippy_app.py:733 | |
208 | #: pippy_app.py:788 | |
192 | 209 | msgid "The file you selected is already open" |
193 | 210 | msgstr "" |
194 | 211 | |
195 | #: pippy_app.py:758 pippy_app.py:817 | |
212 | #: pippy_app.py:813 pippy_app.py:872 | |
196 | 213 | msgid "Save as Activity Error" |
197 | 214 | msgstr "" |
198 | 215 | |
199 | #: pippy_app.py:759 | |
216 | #: pippy_app.py:814 | |
200 | 217 | msgid "" |
201 | 218 | "Please give your activity a meaningful name before attempting to save it as " |
202 | 219 | "an activity." |
203 | 220 | msgstr "" |
204 | 221 | |
205 | #: pippy_app.py:762 pippy_app.py:769 pippy_app.py:864 pippy_app.py:906 | |
222 | #: pippy_app.py:817 pippy_app.py:824 pippy_app.py:919 pippy_app.py:961 | |
206 | 223 | msgid "Ok" |
207 | 224 | msgstr "" |
208 | 225 | |
209 | #: pippy_app.py:770 | |
226 | #: pippy_app.py:825 | |
210 | 227 | msgid "Activity icon" |
211 | 228 | msgstr "" |
212 | 229 | |
213 | #: pippy_app.py:771 | |
230 | #: pippy_app.py:826 | |
214 | 231 | msgid "Please select an activity icon." |
215 | 232 | msgstr "" |
216 | 233 | |
217 | #: pippy_app.py:776 pippy_app.py:791 | |
234 | #: pippy_app.py:831 pippy_app.py:846 | |
218 | 235 | msgid "Creating activity bundle..." |
219 | 236 | msgstr "" |
220 | 237 | |
221 | #: pippy_app.py:857 pippy_app.py:899 | |
238 | #: pippy_app.py:912 pippy_app.py:954 | |
222 | 239 | msgid "Pippy Activity" |
223 | 240 | msgstr "" |
224 | 241 | |
225 | #: pippy_app.py:859 | |
242 | #: pippy_app.py:914 | |
226 | 243 | msgid "Save as distutils package error" |
227 | 244 | msgstr "" |
228 | 245 | |
229 | #: pippy_app.py:860 | |
246 | #: pippy_app.py:915 | |
230 | 247 | msgid "" |
231 | 248 | "Please give your activity a meaningful name before attempting to save it as " |
232 | 249 | "an distutils package." |
233 | 250 | msgstr "" |
234 | 251 | |
235 | #: pippy_app.py:901 | |
252 | #: pippy_app.py:956 | |
236 | 253 | msgid "Save as Example Error" |
237 | 254 | msgstr "" |
238 | 255 | |
239 | #: pippy_app.py:903 | |
256 | #: pippy_app.py:958 | |
240 | 257 | msgid "" |
241 | 258 | "Please give your activity a meaningful name before attempting to save it as " |
242 | 259 | "an example." |
243 | 260 | msgstr "" |
244 | 261 | |
245 | #: pippy_app.py:912 | |
262 | #: pippy_app.py:967 | |
246 | 263 | msgid "Creating example..." |
247 | 264 | msgstr "" |
248 | 265 | |
249 | #: pippy_app.py:918 | |
266 | #: pippy_app.py:973 | |
250 | 267 | msgid "Save as Example Warning" |
251 | 268 | msgstr "" |
252 | 269 | |
253 | #: pippy_app.py:919 | |
270 | #: pippy_app.py:974 | |
254 | 271 | msgid "This example already exists. Do you want to overwrite it?" |
255 | 272 | msgstr "" |
256 | 273 | |
257 | #: pippy_app.py:926 pippy_app.py:984 | |
274 | #: pippy_app.py:981 pippy_app.py:1039 | |
258 | 275 | msgid "Saved as example." |
259 | 276 | msgstr "" |
260 | 277 | |
261 | #: pippy_app.py:948 | |
278 | #: pippy_app.py:1003 | |
262 | 279 | msgid "Error saving activity to journal." |
263 | 280 | msgstr "" |
264 | 281 | |
265 | #: pippy_app.py:968 | |
282 | #: pippy_app.py:1023 | |
266 | 283 | msgid "Activity saved to journal." |
267 | 284 | msgstr "" |
268 | 285 | |
269 | #: pippy_app.py:1110 | |
286 | #: pippy_app.py:1176 | |
270 | 287 | msgid "Error" |
271 | 288 | msgstr "" |
272 | 289 | |
273 | #: pippy_app.py:1111 | |
290 | #: pippy_app.py:1177 | |
274 | 291 | msgid "Error reading data." |
275 | 292 | msgstr "" |
276 | 293 | |
277 | #: pippy_app.py:1434 | |
294 | #: pippy_app.py:1500 | |
278 | 295 | msgid "Working..." |
279 | 296 | msgstr "" |
280 | 297 | |
281 | #: pippy_app.py:1437 | |
298 | #: pippy_app.py:1503 | |
282 | 299 | msgid "done!" |
283 | 300 | msgstr "" |
284 | 301 |
303 | 303 | #: library/pippy/game.py:36 |
304 | 304 | msgid "PAUSED" |
305 | 305 | msgstr "OCUNG" |
306 | ||
307 | #: notebook.py:428 | |
308 | msgid "Erase" | |
309 | msgstr "Jwa" | |
310 | ||
311 | ||
312 | #: notebook.py:429 | |
313 | #, python-format | |
314 | msgid "Do you want to permanently erase \"%s\"?" | |
315 | msgstr "Imito jwayo matwal \"%s\"?" | |
316 |
294 | 294 | #: library/pippy/game.py:36 |
295 | 295 | msgid "PAUSED" |
296 | 296 | msgstr "" |
297 | ||
298 | #: notebook.py:428 | |
299 | msgid "Erase" | |
300 | msgstr "Uitwis" | |
301 |
294 | 294 | #: library/pippy/game.py:36 |
295 | 295 | msgid "PAUSED" |
296 | 296 | msgstr "" |
297 | ||
298 | #: notebook.py:428 | |
299 | msgid "Erase" | |
300 | msgstr "አጥፋው" | |
301 |
296 | 296 | #: library/pippy/game.py:36 |
297 | 297 | msgid "PAUSED" |
298 | 298 | msgstr "متوقف" |
299 | ||
300 | #: notebook.py:428 | |
301 | msgid "Erase" | |
302 | msgstr "امسح" | |
303 | ||
304 | ||
305 | #: notebook.py:429 | |
306 | #, python-format | |
307 | msgid "Do you want to permanently erase \"%s\"?" | |
308 | msgstr "أتريد إزالة \"%s\" نهائيًا؟" | |
309 |
322 | 322 | #: library/pippy/game.py:36 |
323 | 323 | msgid "PAUSED" |
324 | 324 | msgstr "Suyt'ayaña" |
325 | ||
326 | #: notebook.py:428 | |
327 | msgid "Erase" | |
328 | msgstr "Chhaqtayaña" | |
329 | ||
330 | ||
331 | #: notebook.py:429 | |
332 | #, python-format | |
333 | msgid "Do you want to permanently erase \"%s\"?" | |
334 | msgstr "¿Sapa kutiti chhaqtayaña munta \"%s\" ukxa?" | |
335 |
298 | 298 | #: library/pippy/game.py:36 |
299 | 299 | msgid "PAUSED" |
300 | 300 | msgstr "" |
301 | ||
302 | #: notebook.py:428 | |
303 | msgid "Erase" | |
304 | msgstr "Изтриване" | |
305 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # SOME DESCRIPTIVE TITLE. | |
5 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
6 | # This file is distributed under the same license as the PACKAGE package. | |
7 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
8 | # SOME DESCRIPTIVE TITLE. | |
9 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
10 | # This file is distributed under the same license as the PACKAGE package. | |
11 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
12 | #, fuzzy | |
13 | msgid "" | |
14 | msgstr "" | |
15 | "Project-Id-Version: PACKAGE VERSION\n" | |
16 | "Report-Msgid-Bugs-To: \n" | |
17 | "POT-Creation-Date: 2012-06-19 00:34-0400\n" | |
18 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
19 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
20 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
21 | "Language: \n" | |
22 | "MIME-Version: 1.0\n" | |
23 | "Content-Type: text/plain; charset=UTF-8\n" | |
24 | "Content-Transfer-Encoding: 8bit\n" | |
25 | "X-Generator: Translate Toolkit 1.1.1rc4\n" | |
26 | ||
27 | #: activity/activity.info:2 | |
28 | msgid "Pippy" | |
29 | msgstr "" | |
30 | ||
31 | #: activity.py:49 | |
32 | #, python-format | |
33 | msgid "%s Source" | |
34 | msgstr "" | |
35 | ||
36 | #: activity.py:91 | |
37 | msgid "Copy selected text to clipboard" | |
38 | msgstr "" | |
39 | ||
40 | #: activity.py:96 pippy_app.py:113 pippy_app.py:118 | |
41 | msgid "Edit" | |
42 | msgstr "" | |
43 | ||
44 | #: library/pippy/game.py:36 | |
45 | msgid "PAUSED" | |
46 | msgstr "" | |
47 | ||
48 | #: library/pippy/sound.py:54 | |
49 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
50 | msgstr "" | |
51 | ||
52 | #: pippy_app.py:90 | |
53 | msgid "Export as Pippy Document" | |
54 | msgstr "" | |
55 | ||
56 | #: pippy_app.py:96 | |
57 | msgid "Export as Pippy Example" | |
58 | msgstr "" | |
59 | ||
60 | #: pippy_app.py:102 | |
61 | msgid "Create Activity Bundle" | |
62 | msgstr "" | |
63 | ||
64 | #: pippy_app.py:111 | |
65 | msgid "Actions" | |
66 | msgstr "" | |
67 | ||
68 | #: pippy_app.py:138 pippy_app.py:141 | |
69 | msgid "Run!" | |
70 | msgstr "" | |
71 | ||
72 | #: pippy_app.py:139 | |
73 | msgid "<alt>r" | |
74 | msgstr "" | |
75 | ||
76 | #: pippy_app.py:152 pippy_app.py:158 | |
77 | msgid "Stop" | |
78 | msgstr "" | |
79 | ||
80 | #: pippy_app.py:153 | |
81 | msgid "<alt>s" | |
82 | msgstr "" | |
83 | ||
84 | #: pippy_app.py:167 pippy_app.py:173 | |
85 | msgid "Clear" | |
86 | msgstr "" | |
87 | ||
88 | #: pippy_app.py:168 | |
89 | msgid "<alt>c" | |
90 | msgstr "" | |
91 | ||
92 | #: pippy_app.py:197 | |
93 | msgid "Examples" | |
94 | msgstr "" | |
95 | ||
96 | #: pippy_app.py:229 | |
97 | msgid "My examples" | |
98 | msgstr "" | |
99 | ||
100 | #: pippy_app.py:358 | |
101 | #, python-format | |
102 | msgid "%s Activity" | |
103 | msgstr "" | |
104 | ||
105 | #: pippy_app.py:438 | |
106 | msgid "Save as Activity Error" | |
107 | msgstr "" | |
108 | ||
109 | #: pippy_app.py:439 | |
110 | msgid "" | |
111 | "Please give your activity a meaningful name before attempting to save it as " | |
112 | "an activity." | |
113 | msgstr "" | |
114 | ||
115 | #: pippy_app.py:442 pippy_app.py:486 | |
116 | msgid "Ok" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:448 | |
120 | msgid "Creating activity bundle..." | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:479 | |
124 | msgid "Pippy Activity" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:483 | |
128 | msgid "Save as Example Error" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:484 | |
132 | msgid "" | |
133 | "Please give your activity a meaningful name before attempting to save it as " | |
134 | "an example." | |
135 | msgstr "" | |
136 | ||
137 | #: pippy_app.py:492 | |
138 | msgid "Creating example..." | |
139 | msgstr "" | |
140 | ||
141 | #: pippy_app.py:499 | |
142 | msgid "Save as Example Warning" | |
143 | msgstr "" | |
144 | ||
145 | #: pippy_app.py:500 | |
146 | msgid "This example already exists. Do you want to overwrite it?" | |
147 | msgstr "" | |
148 | ||
149 | #: pippy_app.py:506 pippy_app.py:562 | |
150 | msgid "Saved as example." | |
151 | msgstr "" | |
152 | ||
153 | #: pippy_app.py:546 | |
154 | msgid "Activity saved to journal." | |
155 | msgstr "" |
295 | 295 | #: library/pippy/game.py:36 |
296 | 296 | msgid "PAUSED" |
297 | 297 | msgstr "স্থগিত" |
298 | ||
299 | #: notebook.py:428 | |
300 | msgid "Erase" | |
301 | msgstr "মোছো" | |
302 |
296 | 296 | #: library/pippy/game.py:36 |
297 | 297 | msgid "PAUSED" |
298 | 298 | msgstr "স্থগিত" |
299 | ||
300 | #: notebook.py:428 | |
301 | msgid "Erase" | |
302 | msgstr "মুছে ফেলো" | |
303 |
307 | 307 | #: library/pippy/game.py:36 |
308 | 308 | msgid "PAUSED" |
309 | 309 | msgstr "ATURAT" |
310 | ||
311 | #: notebook.py:428 | |
312 | msgid "Erase" | |
313 | msgstr "Esborra" | |
314 | ||
315 | ||
316 | #: notebook.py:429 | |
317 | #, python-format | |
318 | msgid "Do you want to permanently erase \"%s\"?" | |
319 | msgstr "Voleu esborrar \"%s\" de forma permanent?" | |
320 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # SOME DESCRIPTIVE TITLE. | |
5 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
6 | # This file is distributed under the same license as the PACKAGE package. | |
7 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
8 | # SOME DESCRIPTIVE TITLE. | |
9 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
10 | # This file is distributed under the same license as the PACKAGE package. | |
11 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
12 | #, fuzzy | |
13 | msgid "" | |
14 | msgstr "" | |
15 | "Project-Id-Version: PACKAGE VERSION\n" | |
16 | "Report-Msgid-Bugs-To: \n" | |
17 | "POT-Creation-Date: 2012-06-19 00:34-0400\n" | |
18 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
19 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
20 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
21 | "Language: \n" | |
22 | "MIME-Version: 1.0\n" | |
23 | "Content-Type: text/plain; charset=UTF-8\n" | |
24 | "Content-Transfer-Encoding: 8bit\n" | |
25 | "X-Generator: Translate Toolkit 1.1.1rc4\n" | |
26 | ||
27 | #: activity/activity.info:2 | |
28 | msgid "Pippy" | |
29 | msgstr "" | |
30 | ||
31 | #: activity.py:49 | |
32 | #, python-format | |
33 | msgid "%s Source" | |
34 | msgstr "" | |
35 | ||
36 | #: activity.py:91 | |
37 | msgid "Copy selected text to clipboard" | |
38 | msgstr "" | |
39 | ||
40 | #: activity.py:96 pippy_app.py:113 pippy_app.py:118 | |
41 | msgid "Edit" | |
42 | msgstr "" | |
43 | ||
44 | #: library/pippy/game.py:36 | |
45 | msgid "PAUSED" | |
46 | msgstr "" | |
47 | ||
48 | #: library/pippy/sound.py:54 | |
49 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
50 | msgstr "" | |
51 | ||
52 | #: pippy_app.py:90 | |
53 | msgid "Export as Pippy Document" | |
54 | msgstr "" | |
55 | ||
56 | #: pippy_app.py:96 | |
57 | msgid "Export as Pippy Example" | |
58 | msgstr "" | |
59 | ||
60 | #: pippy_app.py:102 | |
61 | msgid "Create Activity Bundle" | |
62 | msgstr "" | |
63 | ||
64 | #: pippy_app.py:111 | |
65 | msgid "Actions" | |
66 | msgstr "" | |
67 | ||
68 | #: pippy_app.py:138 pippy_app.py:141 | |
69 | msgid "Run!" | |
70 | msgstr "" | |
71 | ||
72 | #: pippy_app.py:139 | |
73 | msgid "<alt>r" | |
74 | msgstr "" | |
75 | ||
76 | #: pippy_app.py:152 pippy_app.py:158 | |
77 | msgid "Stop" | |
78 | msgstr "" | |
79 | ||
80 | #: pippy_app.py:153 | |
81 | msgid "<alt>s" | |
82 | msgstr "" | |
83 | ||
84 | #: pippy_app.py:167 pippy_app.py:173 | |
85 | msgid "Clear" | |
86 | msgstr "" | |
87 | ||
88 | #: pippy_app.py:168 | |
89 | msgid "<alt>c" | |
90 | msgstr "" | |
91 | ||
92 | #: pippy_app.py:197 | |
93 | msgid "Examples" | |
94 | msgstr "" | |
95 | ||
96 | #: pippy_app.py:229 | |
97 | msgid "My examples" | |
98 | msgstr "" | |
99 | ||
100 | #: pippy_app.py:358 | |
101 | #, python-format | |
102 | msgid "%s Activity" | |
103 | msgstr "" | |
104 | ||
105 | #: pippy_app.py:438 | |
106 | msgid "Save as Activity Error" | |
107 | msgstr "" | |
108 | ||
109 | #: pippy_app.py:439 | |
110 | msgid "" | |
111 | "Please give your activity a meaningful name before attempting to save it as " | |
112 | "an activity." | |
113 | msgstr "" | |
114 | ||
115 | #: pippy_app.py:442 pippy_app.py:486 | |
116 | msgid "Ok" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:448 | |
120 | msgid "Creating activity bundle..." | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:479 | |
124 | msgid "Pippy Activity" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:483 | |
128 | msgid "Save as Example Error" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:484 | |
132 | msgid "" | |
133 | "Please give your activity a meaningful name before attempting to save it as " | |
134 | "an example." | |
135 | msgstr "" | |
136 | ||
137 | #: pippy_app.py:492 | |
138 | msgid "Creating example..." | |
139 | msgstr "" | |
140 | ||
141 | #: pippy_app.py:499 | |
142 | msgid "Save as Example Warning" | |
143 | msgstr "" | |
144 | ||
145 | #: pippy_app.py:500 | |
146 | msgid "This example already exists. Do you want to overwrite it?" | |
147 | msgstr "" | |
148 | ||
149 | #: pippy_app.py:506 pippy_app.py:562 | |
150 | msgid "Saved as example." | |
151 | msgstr "" | |
152 | ||
153 | #: pippy_app.py:546 | |
154 | msgid "Activity saved to journal." | |
155 | msgstr "" |
294 | 294 | #: library/pippy/game.py:36 |
295 | 295 | msgid "PAUSED" |
296 | 296 | msgstr "POZASTAVIT" |
297 | ||
298 | #: notebook.py:428 | |
299 | msgid "Erase" | |
300 | msgstr "Odstranit" | |
301 |
6 | 6 | "Project-Id-Version: PACKAGE VERSION\n" |
7 | 7 | "Report-Msgid-Bugs-To: \n" |
8 | 8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" |
9 | "PO-Revision-Date: 2012-06-25 02:28+0200\n" | |
10 | "Last-Translator: Aputsiaq Niels <aj@isit.gl>\n" | |
9 | "PO-Revision-Date: 2018-10-22 18:23+0000\n" | |
10 | "Last-Translator: scootergrisen <scootergrisen@gmail.com>\n" | |
11 | 11 | "Language-Team: LANGUAGE <LL@li.org>\n" |
12 | 12 | "Language: da\n" |
13 | 13 | "MIME-Version: 1.0\n" |
14 | 14 | "Content-Type: text/plain; charset=UTF-8\n" |
15 | 15 | "Content-Transfer-Encoding: 8bit\n" |
16 | 16 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" |
17 | "X-Generator: Pootle 2.0.5\n" | |
17 | "X-Generator: Pootle 2.5.1.1\n" | |
18 | "X-POOTLE-MTIME: 1540232583.000000\n" | |
18 | 19 | |
19 | 20 | #: activity/activity.info:2 |
20 | 21 | msgid "Pippy" |
25 | 26 | "Searching for programmers! Here you can use examples to begin learning the " |
26 | 27 | "language your computer understands called \"Python.\"" |
27 | 28 | msgstr "" |
29 | "Søger efter programmører! Her kan du bruge eksempler for at begynde at lære " | |
30 | "sproget som din computer forstår, kaldet \"Python\"." | |
28 | 31 | |
29 | 32 | #: filedialog.py:79 |
30 | 33 | msgid "Choose an example to open" |
31 | msgstr "" | |
34 | msgstr "Vælg et eksempel som skal åbnes" | |
32 | 35 | |
33 | 36 | #: collabwrapper.py:178 |
34 | 37 | msgid "Joining activity..." |
35 | msgstr "" | |
38 | msgstr "Deltager i aktivitet..." | |
36 | 39 | |
37 | 40 | #: collabwrapper.py:179 collabwrapper.py:191 |
38 | 41 | msgid "Please wait for the connection..." |
39 | msgstr "" | |
42 | msgstr "Vent venligst på forbindelsen..." | |
40 | 43 | |
41 | 44 | #: collabwrapper.py:190 |
42 | 45 | msgid "Resuming shared activity..." |
43 | msgstr "" | |
46 | msgstr "Genoptager delt aktivitet..." | |
44 | 47 | |
45 | 48 | #: toolbars.py:42 |
46 | 49 | msgid "Zoom in" |
47 | msgstr "" | |
50 | msgstr "Zoom ind" | |
48 | 51 | |
49 | 52 | #: toolbars.py:48 |
50 | 53 | msgid "Zoom out" |
51 | msgstr "" | |
54 | msgstr "Zoom ud" | |
52 | 55 | |
53 | 56 | #: activity.py:65 |
54 | 57 | #, python-format |
57 | 60 | |
58 | 61 | #: icondialog.py:116 |
59 | 62 | msgid "Select an icon" |
60 | msgstr "" | |
63 | msgstr "Vælg et ikon" | |
61 | 64 | |
62 | 65 | #: notebook.py:219 |
63 | 66 | #, python-format |
64 | 67 | msgid "New Source File %d" |
65 | msgstr "" | |
68 | msgstr "Ny kildefil %d" | |
66 | 69 | |
67 | 70 | #: sound_check.py:27 library/pippy/sound.py:41 |
68 | 71 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" |
71 | 74 | |
72 | 75 | #: pippy_app.py:97 |
73 | 76 | msgid "graphics" |
74 | msgstr "" | |
77 | msgstr "grafik" | |
75 | 78 | |
76 | 79 | #: pippy_app.py:97 |
77 | 80 | msgid "math" |
78 | msgstr "" | |
81 | msgstr "matematik" | |
79 | 82 | |
80 | 83 | #: pippy_app.py:97 |
81 | 84 | msgid "python" |
82 | msgstr "" | |
85 | msgstr "python" | |
83 | 86 | |
84 | 87 | #: pippy_app.py:97 |
85 | 88 | msgid "sound" |
86 | msgstr "" | |
89 | msgstr "lyd" | |
87 | 90 | |
88 | 91 | #: pippy_app.py:98 |
89 | 92 | msgid "string" |
90 | msgstr "" | |
93 | msgstr "streng" | |
91 | 94 | |
92 | 95 | #: pippy_app.py:98 |
93 | 96 | msgid "tutorials" |
94 | msgstr "" | |
97 | msgstr "vejledninger" | |
95 | 98 | |
96 | 99 | #: pippy_app.py:185 |
97 | 100 | msgid "Import Python file to new tab" |
98 | msgstr "" | |
101 | msgstr "Importér Python-fil til nye faneblad" | |
99 | 102 | |
100 | 103 | #: pippy_app.py:191 |
101 | 104 | msgid "Export as Pippy document" |
102 | msgstr "" | |
105 | msgstr "Eksportér som Pippy-dokument" | |
103 | 106 | |
104 | 107 | #: pippy_app.py:197 |
105 | 108 | msgid "Save this file to the Pippy library" |
106 | msgstr "" | |
109 | msgstr "Gem filen til Pippy-biblioteket" | |
107 | 110 | |
108 | 111 | #: pippy_app.py:205 |
109 | 112 | msgid "Export as new Pippy example" |
110 | msgstr "" | |
113 | msgstr "Eksportér som nyt Pippy-eksempel" | |
111 | 114 | |
112 | 115 | #: pippy_app.py:211 |
113 | 116 | msgid "Create a Sugar activity bundle" |
114 | msgstr "" | |
117 | msgstr "Opret en Sugar-aktivitspakke" | |
115 | 118 | |
116 | 119 | #. TRANS: A distutils package is used to distribute Python modules |
117 | 120 | #: pippy_app.py:218 |
118 | 121 | msgid "Export as a distutils package" |
119 | msgstr "" | |
122 | msgstr "Eksportér som en distutils-pakke" | |
120 | 123 | |
121 | 124 | #: pippy_app.py:228 |
122 | 125 | msgid "Edit" |
124 | 127 | |
125 | 128 | #: pippy_app.py:242 |
126 | 129 | msgid "View" |
127 | msgstr "" | |
130 | msgstr "Vis" | |
128 | 131 | |
129 | 132 | #: pippy_app.py:252 pippy_app.py:500 |
130 | 133 | msgid "Show output panel" |
131 | msgstr "" | |
134 | msgstr "Vis outputpanel" | |
132 | 135 | |
133 | 136 | #: pippy_app.py:265 pippy_app.py:268 |
134 | 137 | msgid "Run!" |
156 | 159 | |
157 | 160 | #: pippy_app.py:314 |
158 | 161 | msgid "Open an example" |
159 | msgstr "" | |
162 | msgstr "Åbn et eksempel" | |
160 | 163 | |
161 | 164 | #: pippy_app.py:389 |
162 | 165 | msgid "My examples" |
164 | 167 | |
165 | 168 | #: pippy_app.py:496 |
166 | 169 | msgid "Hide output panel" |
167 | msgstr "" | |
170 | msgstr "Skjul outputpanel" | |
168 | 171 | |
169 | 172 | #: pippy_app.py:598 |
170 | 173 | #, python-format |
173 | 176 | |
174 | 177 | #: pippy_app.py:708 |
175 | 178 | msgid "Python File added to Library" |
176 | msgstr "" | |
179 | msgstr "Python-fil blev tilføjet til bibliotek" | |
177 | 180 | |
178 | 181 | #: pippy_app.py:709 |
179 | 182 | #, python-brace-format |
181 | 184 | "The file you selected has been added to the library. Use \"import " |
182 | 185 | "{importname}\" to import the library for using." |
183 | 186 | msgstr "" |
187 | "Filen du har valgt er blevet tilføjet til biblioteket. Brug \"import " | |
188 | "{importname}\" til at importere biblioteket for at bruge det." | |
184 | 189 | |
185 | 190 | #: pippy_app.py:719 |
186 | 191 | msgid "Saved" |
187 | msgstr "" | |
192 | msgstr "Gemt" | |
188 | 193 | |
189 | 194 | #: pippy_app.py:720 |
190 | 195 | msgid "The document has been saved to journal." |
191 | msgstr "" | |
196 | msgstr "Dokumentet er blevet gemt til journalen." | |
192 | 197 | |
193 | 198 | #: pippy_app.py:734 pippy_app.py:741 |
194 | 199 | msgid "Error importing Python file" |
195 | msgstr "" | |
200 | msgstr "Fejl ved import af Python-fil" | |
196 | 201 | |
197 | 202 | #: pippy_app.py:735 |
198 | 203 | msgid "The file you selected is not a Python file." |
199 | msgstr "" | |
204 | msgstr "Filen du valgte er ikke en Python-fil." | |
200 | 205 | |
201 | 206 | #: pippy_app.py:742 |
202 | 207 | msgid "The file you selected is already open" |
203 | msgstr "" | |
208 | msgstr "Filen du valgte er allerede åben" | |
204 | 209 | |
205 | 210 | #: pippy_app.py:767 pippy_app.py:826 |
206 | 211 | msgid "Save as Activity Error" |
220 | 225 | |
221 | 226 | #: pippy_app.py:779 |
222 | 227 | msgid "Activity icon" |
223 | msgstr "" | |
228 | msgstr "Aktivitetsikon" | |
224 | 229 | |
225 | 230 | #: pippy_app.py:780 |
226 | 231 | msgid "Please select an activity icon." |
227 | msgstr "" | |
232 | msgstr "Vælg venligst et aktivitsikon." | |
228 | 233 | |
229 | 234 | #: pippy_app.py:785 pippy_app.py:800 |
230 | 235 | msgid "Creating activity bundle..." |
236 | 241 | |
237 | 242 | #: pippy_app.py:868 |
238 | 243 | msgid "Save as distutils package error" |
239 | msgstr "" | |
244 | msgstr "Fejl ved gem som distutils-pakke" | |
240 | 245 | |
241 | 246 | #: pippy_app.py:869 |
242 | 247 | msgid "" |
243 | 248 | "Please give your activity a meaningful name before attempting to save it as " |
244 | 249 | "an distutils package." |
245 | 250 | msgstr "" |
251 | "Giv venligst din aktivitet et meningsfyldt navn inden du forsøger at gemme " | |
252 | "den som en distutils-pakke." | |
246 | 253 | |
247 | 254 | #: pippy_app.py:910 |
248 | 255 | msgid "Save as Example Error" |
274 | 281 | |
275 | 282 | #: pippy_app.py:957 |
276 | 283 | msgid "Error saving activity to journal." |
277 | msgstr "" | |
284 | msgstr "Fejl ved forsøg på at gemme aktivitet til journal." | |
278 | 285 | |
279 | 286 | #: pippy_app.py:977 |
280 | 287 | msgid "Activity saved to journal." |
282 | 289 | |
283 | 290 | #: pippy_app.py:1119 |
284 | 291 | msgid "Error" |
285 | msgstr "" | |
292 | msgstr "Fejl" | |
286 | 293 | |
287 | 294 | #: pippy_app.py:1120 |
288 | 295 | msgid "Error reading data." |
289 | msgstr "" | |
296 | msgstr "Fejl ved læsning af data." | |
290 | 297 | |
291 | 298 | #: pippy_app.py:1448 |
292 | 299 | msgid "Working..." |
293 | msgstr "" | |
300 | msgstr "Arbejder..." | |
294 | 301 | |
295 | 302 | #: pippy_app.py:1451 |
296 | 303 | msgid "done!" |
297 | msgstr "" | |
304 | msgstr "færdig!" | |
298 | 305 | |
299 | 306 | #: library/pippy/game.py:36 |
300 | 307 | msgid "PAUSED" |
301 | 308 | msgstr "PÅ PAUSE" |
309 | ||
310 | #: notebook.py:428 | |
311 | msgid "Erase" | |
312 | msgstr "Slet" | |
313 | ||
314 | ||
315 | #: notebook.py:429 | |
316 | #, python-format | |
317 | msgid "Do you want to permanently erase \"%s\"?" | |
318 | msgstr "Vil du foretage permanent sletning af \"%s\"?" | |
319 |
302 | 302 | #: library/pippy/game.py:36 |
303 | 303 | msgid "PAUSED" |
304 | 304 | msgstr "ANGEHALTEN" |
305 | ||
306 | #: notebook.py:428 | |
307 | msgid "Erase" | |
308 | msgstr "Löschen" | |
309 | ||
310 | ||
311 | #: notebook.py:429 | |
312 | #, python-format | |
313 | msgid "Do you want to permanently erase \"%s\"?" | |
314 | msgstr "Möchtest Du \"%s\" dauerhaft löschen?" | |
315 |
294 | 294 | #: library/pippy/game.py:36 |
295 | 295 | msgid "PAUSED" |
296 | 296 | msgstr "" |
297 | ||
298 | #: notebook.py:428 | |
299 | msgid "Erase" | |
300 | msgstr "ཀྲེག་གཏང་།" | |
301 |
301 | 301 | #: library/pippy/game.py:36 |
302 | 302 | msgid "PAUSED" |
303 | 303 | msgstr "ΣΕ ΠΑΥΣΗ" |
304 | ||
305 | #: notebook.py:428 | |
306 | msgid "Erase" | |
307 | msgstr "Διαγραφή" | |
308 | ||
309 | ||
310 | #: notebook.py:429 | |
311 | #, python-format | |
312 | msgid "Do you want to permanently erase \"%s\"?" | |
313 | msgstr "Θέλετε να διαγράψετε μόνιμα το \"%s\";" | |
314 |
307 | 307 | #: library/pippy/game.py:36 |
308 | 308 | msgid "PAUSED" |
309 | 309 | msgstr "PAUSADO" |
310 | ||
311 | #: notebook.py:428 | |
312 | msgid "Erase" | |
313 | msgstr "Borrar" | |
314 | ||
315 | ||
316 | #: notebook.py:429 | |
317 | #, python-format | |
318 | msgid "Do you want to permanently erase \"%s\"?" | |
319 | msgstr "¿Deseas borrar permanentemente \"%s\"?" | |
320 |
296 | 296 | #: library/pippy/game.py:36 |
297 | 297 | msgid "PAUSED" |
298 | 298 | msgstr "مکث شده" |
299 | ||
300 | #: notebook.py:428 | |
301 | msgid "Erase" | |
302 | msgstr "پاک کن" | |
303 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: ff\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.0.1\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
305 | 305 | #: library/pippy/game.py:36 |
306 | 306 | msgid "PAUSED" |
307 | 307 | msgstr "PAUSE" |
308 | ||
309 | #: notebook.py:428 | |
310 | msgid "Erase" | |
311 | msgstr "Supprimer" | |
312 | ||
313 | ||
314 | #: notebook.py:429 | |
315 | #, python-format | |
316 | msgid "Do you want to permanently erase \"%s\"?" | |
317 | msgstr "Faut-il supprimer \"%s\" définitivement ?" | |
318 |
150 | 150 | #: pippy_app.py:546 |
151 | 151 | msgid "Activity saved to journal." |
152 | 152 | msgstr "Mba'apo oñeñongatu tembiapokuérañeñongatuha." |
153 | ||
154 | #: notebook.py:428 | |
155 | msgid "Erase" | |
156 | msgstr "Mbogue" | |
157 | ||
158 | ||
159 | #: notebook.py:429 | |
160 | #, python-format | |
161 | msgid "Do you want to permanently erase \"%s\"?" | |
162 | msgstr "Emboguese opyta haguãicha \"%s\"?" | |
163 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # SOME DESCRIPTIVE TITLE. | |
5 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
6 | # This file is distributed under the same license as the PACKAGE package. | |
7 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
8 | # SOME DESCRIPTIVE TITLE. | |
9 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
10 | # This file is distributed under the same license as the PACKAGE package. | |
11 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
12 | #, fuzzy | |
13 | msgid "" | |
14 | msgstr "" | |
15 | "Project-Id-Version: PACKAGE VERSION\n" | |
16 | "Report-Msgid-Bugs-To: \n" | |
17 | "POT-Creation-Date: 2012-06-19 00:34-0400\n" | |
18 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
19 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
20 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
21 | "Language: \n" | |
22 | "MIME-Version: 1.0\n" | |
23 | "Content-Type: text/plain; charset=UTF-8\n" | |
24 | "Content-Transfer-Encoding: 8bit\n" | |
25 | "X-Generator: Translate Toolkit 1.0.1\n" | |
26 | ||
27 | #: activity/activity.info:2 | |
28 | msgid "Pippy" | |
29 | msgstr "" | |
30 | ||
31 | #: activity.py:49 | |
32 | #, python-format | |
33 | msgid "%s Source" | |
34 | msgstr "" | |
35 | ||
36 | #: activity.py:91 | |
37 | msgid "Copy selected text to clipboard" | |
38 | msgstr "" | |
39 | ||
40 | #: activity.py:96 pippy_app.py:113 pippy_app.py:118 | |
41 | msgid "Edit" | |
42 | msgstr "" | |
43 | ||
44 | #: library/pippy/game.py:36 | |
45 | msgid "PAUSED" | |
46 | msgstr "" | |
47 | ||
48 | #: library/pippy/sound.py:54 | |
49 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
50 | msgstr "" | |
51 | ||
52 | #: pippy_app.py:90 | |
53 | msgid "Export as Pippy Document" | |
54 | msgstr "" | |
55 | ||
56 | #: pippy_app.py:96 | |
57 | msgid "Export as Pippy Example" | |
58 | msgstr "" | |
59 | ||
60 | #: pippy_app.py:102 | |
61 | msgid "Create Activity Bundle" | |
62 | msgstr "" | |
63 | ||
64 | #: pippy_app.py:111 | |
65 | msgid "Actions" | |
66 | msgstr "" | |
67 | ||
68 | #: pippy_app.py:138 pippy_app.py:141 | |
69 | msgid "Run!" | |
70 | msgstr "" | |
71 | ||
72 | #: pippy_app.py:139 | |
73 | msgid "<alt>r" | |
74 | msgstr "" | |
75 | ||
76 | #: pippy_app.py:152 pippy_app.py:158 | |
77 | msgid "Stop" | |
78 | msgstr "" | |
79 | ||
80 | #: pippy_app.py:153 | |
81 | msgid "<alt>s" | |
82 | msgstr "" | |
83 | ||
84 | #: pippy_app.py:167 pippy_app.py:173 | |
85 | msgid "Clear" | |
86 | msgstr "" | |
87 | ||
88 | #: pippy_app.py:168 | |
89 | msgid "<alt>c" | |
90 | msgstr "" | |
91 | ||
92 | #: pippy_app.py:197 | |
93 | msgid "Examples" | |
94 | msgstr "" | |
95 | ||
96 | #: pippy_app.py:229 | |
97 | msgid "My examples" | |
98 | msgstr "" | |
99 | ||
100 | #: pippy_app.py:358 | |
101 | #, python-format | |
102 | msgid "%s Activity" | |
103 | msgstr "" | |
104 | ||
105 | #: pippy_app.py:438 | |
106 | msgid "Save as Activity Error" | |
107 | msgstr "" | |
108 | ||
109 | #: pippy_app.py:439 | |
110 | msgid "" | |
111 | "Please give your activity a meaningful name before attempting to save it as " | |
112 | "an activity." | |
113 | msgstr "" | |
114 | ||
115 | #: pippy_app.py:442 pippy_app.py:486 | |
116 | msgid "Ok" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:448 | |
120 | msgid "Creating activity bundle..." | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:479 | |
124 | msgid "Pippy Activity" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:483 | |
128 | msgid "Save as Example Error" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:484 | |
132 | msgid "" | |
133 | "Please give your activity a meaningful name before attempting to save it as " | |
134 | "an example." | |
135 | msgstr "" | |
136 | ||
137 | #: pippy_app.py:492 | |
138 | msgid "Creating example..." | |
139 | msgstr "" | |
140 | ||
141 | #: pippy_app.py:499 | |
142 | msgid "Save as Example Warning" | |
143 | msgstr "" | |
144 | ||
145 | #: pippy_app.py:500 | |
146 | msgid "This example already exists. Do you want to overwrite it?" | |
147 | msgstr "" | |
148 | ||
149 | #: pippy_app.py:506 pippy_app.py:562 | |
150 | msgid "Saved as example." | |
151 | msgstr "" | |
152 | ||
153 | #: pippy_app.py:546 | |
154 | msgid "Activity saved to journal." | |
155 | msgstr "" |
304 | 304 | #: library/pippy/game.py:36 |
305 | 305 | msgid "PAUSED" |
306 | 306 | msgstr "Mbegue" |
307 | ||
308 | #: notebook.py:428 | |
309 | msgid "Erase" | |
310 | msgstr "Mbogue" | |
311 | ||
312 | ||
313 | #: notebook.py:429 | |
314 | #, python-format | |
315 | msgid "Do you want to permanently erase \"%s\"?" | |
316 | msgstr "Emboguese opyta haguãicha \"%s\"?" | |
317 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: ha\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.0.1\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
300 | 300 | #: library/pippy/game.py:36 |
301 | 301 | msgid "PAUSED" |
302 | 302 | msgstr "מושהה" |
303 | ||
304 | #: notebook.py:428 | |
305 | msgid "Erase" | |
306 | msgstr "למחוק" | |
307 | ||
308 | ||
309 | #: notebook.py:429 | |
310 | #, python-format | |
311 | msgid "Do you want to permanently erase \"%s\"?" | |
312 | msgstr "למחוק את „%s“ לצמיתות?" | |
313 |
296 | 296 | #: library/pippy/game.py:36 |
297 | 297 | msgid "PAUSED" |
298 | 298 | msgstr "विराम" |
299 | ||
300 | #: notebook.py:428 | |
301 | msgid "Erase" | |
302 | msgstr "मिटाएँ" | |
303 | ||
304 | ||
305 | #: notebook.py:429 | |
306 | #, python-format | |
307 | msgid "Do you want to permanently erase \"%s\"?" | |
308 | msgstr "आप स्थायी रूप से \"%s\" को मिटाना चाहते हैं?" | |
309 |
288 | 288 | #: library/pippy/game.py:36 |
289 | 289 | msgid "PAUSED" |
290 | 290 | msgstr "ZAUSTAVLJENO" |
291 | ||
292 | #: notebook.py:428 | |
293 | msgid "Erase" | |
294 | msgstr "Izbrisati" | |
295 | ||
296 | ||
297 | #: notebook.py:429 | |
298 | #, python-format | |
299 | msgid "Do you want to permanently erase \"%s\"?" | |
300 | msgstr "Želiš trajno izbrisati „%s“?" | |
301 |
299 | 299 | #: library/pippy/game.py:36 |
300 | 300 | msgid "PAUSED" |
301 | 301 | msgstr "Poze" |
302 | ||
303 | #: notebook.py:428 | |
304 | msgid "Erase" | |
305 | msgstr "Efase" | |
306 |
303 | 303 | #: library/pippy/game.py:36 |
304 | 304 | msgid "PAUSED" |
305 | 305 | msgstr "TONK'IDH" |
306 | ||
307 | #: notebook.py:428 | |
308 | msgid "Erase" | |
309 | msgstr "Pakuw" | |
310 | ||
311 | ||
312 | #: notebook.py:429 | |
313 | #, python-format | |
314 | msgid "Do you want to permanently erase \"%s\"?" | |
315 | msgstr "¿A le' ka pákuw abal etsey \"%s\"?" | |
316 |
298 | 298 | #: library/pippy/game.py:36 |
299 | 299 | msgid "PAUSED" |
300 | 300 | msgstr "ԴԱԴԱՐԵՑՎԱԾ" |
301 | ||
302 | #: notebook.py:428 | |
303 | msgid "Erase" | |
304 | msgstr "Ջնջել" | |
305 | ||
306 | ||
307 | #: notebook.py:429 | |
308 | #, python-format | |
309 | msgid "Do you want to permanently erase \"%s\"?" | |
310 | msgstr "Ցանկանում ես ընդմիշտ ջնջել \"%s\"?" | |
311 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: ibo\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.11.0\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
300 | 300 | #: library/pippy/game.py:36 |
301 | 301 | msgid "PAUSED" |
302 | 302 | msgstr "DITAHAN" |
303 | ||
304 | #: notebook.py:428 | |
305 | msgid "Erase" | |
306 | msgstr "Hapus" | |
307 | ||
308 | ||
309 | #: notebook.py:429 | |
310 | #, python-format | |
311 | msgid "Do you want to permanently erase \"%s\"?" | |
312 | msgstr "Apakah Anda hendak menghapus \"%s\" secara permanen?" | |
313 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # SOME DESCRIPTIVE TITLE. | |
5 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
6 | # This file is distributed under the same license as the PACKAGE package. | |
7 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
8 | # SOME DESCRIPTIVE TITLE. | |
9 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
10 | # This file is distributed under the same license as the PACKAGE package. | |
11 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
12 | #, fuzzy | |
13 | msgid "" | |
14 | msgstr "" | |
15 | "Project-Id-Version: PACKAGE VERSION\n" | |
16 | "Report-Msgid-Bugs-To: \n" | |
17 | "POT-Creation-Date: 2012-06-19 00:34-0400\n" | |
18 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
19 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
20 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
21 | "Language: \n" | |
22 | "MIME-Version: 1.0\n" | |
23 | "Content-Type: text/plain; charset=UTF-8\n" | |
24 | "Content-Transfer-Encoding: 8bit\n" | |
25 | "X-Generator: Translate Toolkit 1.0.1\n" | |
26 | ||
27 | #: activity/activity.info:2 | |
28 | msgid "Pippy" | |
29 | msgstr "" | |
30 | ||
31 | #: activity.py:49 | |
32 | #, python-format | |
33 | msgid "%s Source" | |
34 | msgstr "" | |
35 | ||
36 | #: activity.py:91 | |
37 | msgid "Copy selected text to clipboard" | |
38 | msgstr "" | |
39 | ||
40 | #: activity.py:96 pippy_app.py:113 pippy_app.py:118 | |
41 | msgid "Edit" | |
42 | msgstr "" | |
43 | ||
44 | #: library/pippy/game.py:36 | |
45 | msgid "PAUSED" | |
46 | msgstr "" | |
47 | ||
48 | #: library/pippy/sound.py:54 | |
49 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
50 | msgstr "" | |
51 | ||
52 | #: pippy_app.py:90 | |
53 | msgid "Export as Pippy Document" | |
54 | msgstr "" | |
55 | ||
56 | #: pippy_app.py:96 | |
57 | msgid "Export as Pippy Example" | |
58 | msgstr "" | |
59 | ||
60 | #: pippy_app.py:102 | |
61 | msgid "Create Activity Bundle" | |
62 | msgstr "" | |
63 | ||
64 | #: pippy_app.py:111 | |
65 | msgid "Actions" | |
66 | msgstr "" | |
67 | ||
68 | #: pippy_app.py:138 pippy_app.py:141 | |
69 | msgid "Run!" | |
70 | msgstr "" | |
71 | ||
72 | #: pippy_app.py:139 | |
73 | msgid "<alt>r" | |
74 | msgstr "" | |
75 | ||
76 | #: pippy_app.py:152 pippy_app.py:158 | |
77 | msgid "Stop" | |
78 | msgstr "" | |
79 | ||
80 | #: pippy_app.py:153 | |
81 | msgid "<alt>s" | |
82 | msgstr "" | |
83 | ||
84 | #: pippy_app.py:167 pippy_app.py:173 | |
85 | msgid "Clear" | |
86 | msgstr "" | |
87 | ||
88 | #: pippy_app.py:168 | |
89 | msgid "<alt>c" | |
90 | msgstr "" | |
91 | ||
92 | #: pippy_app.py:197 | |
93 | msgid "Examples" | |
94 | msgstr "" | |
95 | ||
96 | #: pippy_app.py:229 | |
97 | msgid "My examples" | |
98 | msgstr "" | |
99 | ||
100 | #: pippy_app.py:358 | |
101 | #, python-format | |
102 | msgid "%s Activity" | |
103 | msgstr "" | |
104 | ||
105 | #: pippy_app.py:438 | |
106 | msgid "Save as Activity Error" | |
107 | msgstr "" | |
108 | ||
109 | #: pippy_app.py:439 | |
110 | msgid "" | |
111 | "Please give your activity a meaningful name before attempting to save it as " | |
112 | "an activity." | |
113 | msgstr "" | |
114 | ||
115 | #: pippy_app.py:442 pippy_app.py:486 | |
116 | msgid "Ok" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:448 | |
120 | msgid "Creating activity bundle..." | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:479 | |
124 | msgid "Pippy Activity" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:483 | |
128 | msgid "Save as Example Error" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:484 | |
132 | msgid "" | |
133 | "Please give your activity a meaningful name before attempting to save it as " | |
134 | "an example." | |
135 | msgstr "" | |
136 | ||
137 | #: pippy_app.py:492 | |
138 | msgid "Creating example..." | |
139 | msgstr "" | |
140 | ||
141 | #: pippy_app.py:499 | |
142 | msgid "Save as Example Warning" | |
143 | msgstr "" | |
144 | ||
145 | #: pippy_app.py:500 | |
146 | msgid "This example already exists. Do you want to overwrite it?" | |
147 | msgstr "" | |
148 | ||
149 | #: pippy_app.py:506 pippy_app.py:562 | |
150 | msgid "Saved as example." | |
151 | msgstr "" | |
152 | ||
153 | #: pippy_app.py:546 | |
154 | msgid "Activity saved to journal." | |
155 | msgstr "" |
296 | 296 | #: library/pippy/game.py:36 |
297 | 297 | msgid "PAUSED" |
298 | 298 | msgstr "" |
299 | ||
300 | #: notebook.py:428 | |
301 | msgid "Erase" | |
302 | msgstr "Eyða" | |
303 | ||
304 | ||
305 | #: notebook.py:429 | |
306 | #, python-format | |
307 | msgid "Do you want to permanently erase \"%s\"?" | |
308 | msgstr "Ertu viss um að þú viljir endanlega eyða \"%s?" | |
309 |
299 | 299 | #: library/pippy/game.py:36 |
300 | 300 | msgid "PAUSED" |
301 | 301 | msgstr "INPAUSA" |
302 | ||
303 | #: notebook.py:428 | |
304 | msgid "Erase" | |
305 | msgstr "Elimina" | |
306 | ||
307 | ||
308 | #: notebook.py:429 | |
309 | #, python-format | |
310 | msgid "Do you want to permanently erase \"%s\"?" | |
311 | msgstr "Vuoi cancellare definitivamente \"%s\"?" | |
312 |
295 | 295 | #: library/pippy/game.py:36 |
296 | 296 | msgid "PAUSED" |
297 | 297 | msgstr "一時停止中" |
298 | ||
299 | #: notebook.py:428 | |
300 | msgid "Erase" | |
301 | msgstr "消去する" | |
302 |
296 | 296 | #: library/pippy/game.py:36 |
297 | 297 | msgid "PAUSED" |
298 | 298 | msgstr "បញ្ឈប់" |
299 | ||
300 | #: notebook.py:428 | |
301 | msgid "Erase" | |
302 | msgstr "លុប" | |
303 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # SOME DESCRIPTIVE TITLE. | |
5 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
6 | # This file is distributed under the same license as the PACKAGE package. | |
7 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
8 | # SOME DESCRIPTIVE TITLE. | |
9 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
10 | # This file is distributed under the same license as the PACKAGE package. | |
11 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
12 | #, fuzzy | |
13 | msgid "" | |
14 | msgstr "" | |
15 | "Project-Id-Version: PACKAGE VERSION\n" | |
16 | "Report-Msgid-Bugs-To: \n" | |
17 | "POT-Creation-Date: 2012-06-19 00:34-0400\n" | |
18 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
19 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
20 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
21 | "Language: \n" | |
22 | "MIME-Version: 1.0\n" | |
23 | "Content-Type: text/plain; charset=UTF-8\n" | |
24 | "Content-Transfer-Encoding: 8bit\n" | |
25 | "X-Generator: Translate Toolkit 1.3.0\n" | |
26 | ||
27 | #: activity/activity.info:2 | |
28 | msgid "Pippy" | |
29 | msgstr "" | |
30 | ||
31 | #: activity.py:49 | |
32 | #, python-format | |
33 | msgid "%s Source" | |
34 | msgstr "" | |
35 | ||
36 | #: activity.py:91 | |
37 | msgid "Copy selected text to clipboard" | |
38 | msgstr "" | |
39 | ||
40 | #: activity.py:96 pippy_app.py:113 pippy_app.py:118 | |
41 | msgid "Edit" | |
42 | msgstr "" | |
43 | ||
44 | #: library/pippy/game.py:36 | |
45 | msgid "PAUSED" | |
46 | msgstr "" | |
47 | ||
48 | #: library/pippy/sound.py:54 | |
49 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
50 | msgstr "" | |
51 | ||
52 | #: pippy_app.py:90 | |
53 | msgid "Export as Pippy Document" | |
54 | msgstr "" | |
55 | ||
56 | #: pippy_app.py:96 | |
57 | msgid "Export as Pippy Example" | |
58 | msgstr "" | |
59 | ||
60 | #: pippy_app.py:102 | |
61 | msgid "Create Activity Bundle" | |
62 | msgstr "" | |
63 | ||
64 | #: pippy_app.py:111 | |
65 | msgid "Actions" | |
66 | msgstr "" | |
67 | ||
68 | #: pippy_app.py:138 pippy_app.py:141 | |
69 | msgid "Run!" | |
70 | msgstr "" | |
71 | ||
72 | #: pippy_app.py:139 | |
73 | msgid "<alt>r" | |
74 | msgstr "" | |
75 | ||
76 | #: pippy_app.py:152 pippy_app.py:158 | |
77 | msgid "Stop" | |
78 | msgstr "" | |
79 | ||
80 | #: pippy_app.py:153 | |
81 | msgid "<alt>s" | |
82 | msgstr "" | |
83 | ||
84 | #: pippy_app.py:167 pippy_app.py:173 | |
85 | msgid "Clear" | |
86 | msgstr "" | |
87 | ||
88 | #: pippy_app.py:168 | |
89 | msgid "<alt>c" | |
90 | msgstr "" | |
91 | ||
92 | #: pippy_app.py:197 | |
93 | msgid "Examples" | |
94 | msgstr "" | |
95 | ||
96 | #: pippy_app.py:229 | |
97 | msgid "My examples" | |
98 | msgstr "" | |
99 | ||
100 | #: pippy_app.py:358 | |
101 | #, python-format | |
102 | msgid "%s Activity" | |
103 | msgstr "" | |
104 | ||
105 | #: pippy_app.py:438 | |
106 | msgid "Save as Activity Error" | |
107 | msgstr "" | |
108 | ||
109 | #: pippy_app.py:439 | |
110 | msgid "" | |
111 | "Please give your activity a meaningful name before attempting to save it as " | |
112 | "an activity." | |
113 | msgstr "" | |
114 | ||
115 | #: pippy_app.py:442 pippy_app.py:486 | |
116 | msgid "Ok" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:448 | |
120 | msgid "Creating activity bundle..." | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:479 | |
124 | msgid "Pippy Activity" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:483 | |
128 | msgid "Save as Example Error" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:484 | |
132 | msgid "" | |
133 | "Please give your activity a meaningful name before attempting to save it as " | |
134 | "an example." | |
135 | msgstr "" | |
136 | ||
137 | #: pippy_app.py:492 | |
138 | msgid "Creating example..." | |
139 | msgstr "" | |
140 | ||
141 | #: pippy_app.py:499 | |
142 | msgid "Save as Example Warning" | |
143 | msgstr "" | |
144 | ||
145 | #: pippy_app.py:500 | |
146 | msgid "This example already exists. Do you want to overwrite it?" | |
147 | msgstr "" | |
148 | ||
149 | #: pippy_app.py:506 pippy_app.py:562 | |
150 | msgid "Saved as example." | |
151 | msgstr "" | |
152 | ||
153 | #: pippy_app.py:546 | |
154 | msgid "Activity saved to journal." | |
155 | msgstr "" |
302 | 302 | #: library/pippy/game.py:36 |
303 | 303 | msgid "PAUSED" |
304 | 304 | msgstr "PRISTABDYTA" |
305 | ||
306 | #: notebook.py:428 | |
307 | msgid "Erase" | |
308 | msgstr "Ištrinti" | |
309 | ||
310 | ||
311 | #: notebook.py:429 | |
312 | #, python-format | |
313 | msgid "Do you want to permanently erase \"%s\"?" | |
314 | msgstr "Ar norite negrįžtamai ištrinti \"%s\"?" | |
315 |
299 | 299 | #: library/pippy/game.py:36 |
300 | 300 | msgid "PAUSED" |
301 | 301 | msgstr "Mijanona" |
302 | ||
303 | #: notebook.py:428 | |
304 | msgid "Erase" | |
305 | msgstr "Soloy" | |
306 |
298 | 298 | #: library/pippy/game.py:36 |
299 | 299 | msgid "PAUSED" |
300 | 300 | msgstr "KUA TĀRIA" |
301 | ||
302 | #: notebook.py:428 | |
303 | msgid "Erase" | |
304 | msgstr "Muku" | |
305 | ||
306 | ||
307 | #: notebook.py:429 | |
308 | #, python-format | |
309 | msgid "Do you want to permanently erase \"%s\"?" | |
310 | msgstr "E hiahia ana koe kia muku i \"%s\" mō ake tonu atu?" | |
311 |
300 | 300 | #: library/pippy/game.py:36 |
301 | 301 | msgid "PAUSED" |
302 | 302 | msgstr "ПАУЗИРАНО" |
303 | ||
304 | #: notebook.py:428 | |
305 | msgid "Erase" | |
306 | msgstr "Избриши" | |
307 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: ml\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.0.1\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
297 | 297 | #: library/pippy/game.py:36 |
298 | 298 | msgid "PAUSED" |
299 | 299 | msgstr "ТҮР ЗОГССОН" |
300 | ||
301 | #: notebook.py:428 | |
302 | msgid "Erase" | |
303 | msgstr "Арилгах" | |
304 |
295 | 295 | #: library/pippy/game.py:36 |
296 | 296 | msgid "PAUSED" |
297 | 297 | msgstr "थोडा वेळ थांबा" |
298 | ||
299 | #: notebook.py:428 | |
300 | msgid "Erase" | |
301 | msgstr "खोडा" | |
302 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: ms\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.1.1rc4\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: mvo\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.1.1rc4\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
172 | 172 | |
173 | 173 | #~ msgid "Please install TamTamEdit's sound library." |
174 | 174 | #~ msgstr "Vennligst installer TamTamEdit sitt lydbibliotek." |
175 | ||
176 | #: notebook.py:428 | |
177 | msgid "Erase" | |
178 | msgstr "Slett" | |
179 |
298 | 298 | #: library/pippy/game.py:36 |
299 | 299 | msgid "PAUSED" |
300 | 300 | msgstr "रोकिएको छ" |
301 | ||
302 | #: notebook.py:428 | |
303 | msgid "Erase" | |
304 | msgstr "मेट" | |
305 | ||
306 | ||
307 | #: notebook.py:429 | |
308 | #, python-format | |
309 | msgid "Do you want to permanently erase \"%s\"?" | |
310 | msgstr "के तिमीलाई \"%s\" स्थायी रुपमा मेटाउन मन छ?" | |
311 |
307 | 307 | #: library/pippy/game.py:36 |
308 | 308 | msgid "PAUSED" |
309 | 309 | msgstr "GEPAUZEERD" |
310 | ||
311 | #: notebook.py:428 | |
312 | msgid "Erase" | |
313 | msgstr "Wissen" | |
314 | ||
315 | ||
316 | #: notebook.py:429 | |
317 | #, python-format | |
318 | msgid "Do you want to permanently erase \"%s\"?" | |
319 | msgstr "Wil je permanent verwijderen \"%s\"?" | |
320 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: pa\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.0.1\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
299 | 299 | #: library/pippy/game.py:36 |
300 | 300 | msgid "PAUSED" |
301 | 301 | msgstr "Den pausa" |
302 | ||
303 | #: notebook.py:428 | |
304 | msgid "Erase" | |
305 | msgstr "Paga" | |
306 | ||
307 | ||
308 | #: notebook.py:429 | |
309 | #, python-format | |
310 | msgid "Do you want to permanently erase \"%s\"?" | |
311 | msgstr "Bo ke paga \"%s\" permanentemente?" | |
312 |
303 | 303 | #: library/pippy/game.py:36 |
304 | 304 | msgid "PAUSED" |
305 | 305 | msgstr "PAUZA" |
306 | ||
307 | #: notebook.py:428 | |
308 | msgid "Erase" | |
309 | msgstr "Usuń" | |
310 | ||
311 | ||
312 | #: notebook.py:429 | |
313 | #, python-format | |
314 | msgid "Do you want to permanently erase \"%s\"?" | |
315 | msgstr "Czy chcesz trwale wykasować \"%s\"?" | |
316 |
299 | 299 | #: library/pippy/game.py:36 |
300 | 300 | msgid "PAUSED" |
301 | 301 | msgstr "ځنډول شوی" |
302 | ||
303 | #: notebook.py:428 | |
304 | msgid "Erase" | |
305 | msgstr "لرې کول" | |
306 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | #, fuzzy | |
5 | msgid "" | |
6 | msgstr "" | |
7 | "Project-Id-Version: PACKAGE VERSION\n" | |
8 | "Report-Msgid-Bugs-To: \n" | |
9 | "POT-Creation-Date: 2008-05-27 00:30-0400\n" | |
10 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
11 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
12 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.0.1\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity.py:26 | |
23 | #, python-format | |
24 | msgid "%s Source" | |
25 | msgstr "" | |
26 | ||
27 | #: activity.py:62 | |
28 | msgid "Copy selected text to clipboard" | |
29 | msgstr "" | |
30 | ||
31 | #: activity.py:67 | |
32 | msgid "Edit" | |
33 | msgstr "" | |
34 | ||
35 | #: library/pippy/game.py:19 | |
36 | msgid "PAUSED" | |
37 | msgstr "" | |
38 | ||
39 | #: library/pippy/sound.py:179 | |
40 | msgid "Please install TamTamEdit's sound library." | |
41 | msgstr "" | |
42 | ||
43 | #: pippy_app.py:61 | |
44 | msgid "As Pippy Document" | |
45 | msgstr "" | |
46 | ||
47 | #: pippy_app.py:66 | |
48 | msgid "As Activity Bundle" | |
49 | msgstr "" | |
50 | ||
51 | #: pippy_app.py:83 | |
52 | msgid "Examples" | |
53 | msgstr "" | |
54 | ||
55 | #: pippy_app.py:152 | |
56 | msgid "_Run!" | |
57 | msgstr "" | |
58 | ||
59 | #: pippy_app.py:252 | |
60 | #, python-format | |
61 | msgid "%s Activity" | |
62 | msgstr "" | |
63 | ||
64 | #: pippy_app.py:308 | |
65 | msgid "Save as Activity Error" | |
66 | msgstr "" | |
67 | ||
68 | #: pippy_app.py:309 | |
69 | msgid "" | |
70 | "Please give your activity a meaningful name before attempting to save it as " | |
71 | "an activity." | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:311 | |
75 | msgid "Ok" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:317 | |
79 | msgid "Creating activity bundle..." | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:376 | |
83 | msgid "Activity saved to journal." | |
84 | msgstr "" |
300 | 300 | #: library/pippy/game.py:36 |
301 | 301 | msgid "PAUSED" |
302 | 302 | msgstr "EM PAUSA" |
303 | ||
304 | #: notebook.py:428 | |
305 | msgid "Erase" | |
306 | msgstr "Apagar" | |
307 | ||
308 | ||
309 | #: notebook.py:429 | |
310 | #, python-format | |
311 | msgid "Do you want to permanently erase \"%s\"?" | |
312 | msgstr "Tem a certeza que pretende eliminar permanentemente \"%s\"?" | |
313 |
6 | 6 | "Project-Id-Version: PACKAGE VERSION\n" |
7 | 7 | "Report-Msgid-Bugs-To: \n" |
8 | 8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" |
9 | "PO-Revision-Date: 2018-08-20 20:25+0000\n" | |
9 | "PO-Revision-Date: 2019-03-09 00:55+0000\n" | |
10 | 10 | "Last-Translator: Paulo Francisco <slomp@ufrgs.br>\n" |
11 | 11 | "Language-Team: LANGUAGE <LL@li.org>\n" |
12 | 12 | "Language: pt_BR\n" |
15 | 15 | "Content-Transfer-Encoding: 8bit\n" |
16 | 16 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" |
17 | 17 | "X-Generator: Pootle 2.5.1.1\n" |
18 | "X-POOTLE-MTIME: 1534796735.000000\n" | |
18 | "X-POOTLE-MTIME: 1552092953.000000\n" | |
19 | 19 | |
20 | 20 | #: activity/activity.info:2 |
21 | 21 | msgid "Pippy" |
57 | 57 | #: activity.py:65 |
58 | 58 | #, python-format |
59 | 59 | msgid "%s Source" |
60 | msgstr "Fonte de %s" | |
60 | msgstr "%s Fonte" | |
61 | 61 | |
62 | 62 | #: icondialog.py:116 |
63 | 63 | msgid "Select an icon" |
279 | 279 | |
280 | 280 | #: pippy_app.py:935 pippy_app.py:993 |
281 | 281 | msgid "Saved as example." |
282 | msgstr "Salvo como exemplo" | |
282 | msgstr "Salvo como exemplo." | |
283 | 283 | |
284 | 284 | #: pippy_app.py:957 |
285 | 285 | msgid "Error saving activity to journal." |
308 | 308 | #: library/pippy/game.py:36 |
309 | 309 | msgid "PAUSED" |
310 | 310 | msgstr "PAUSADO" |
311 | ||
312 | #: notebook.py:428 | |
313 | msgid "Erase" | |
314 | msgstr "Apagar" | |
315 | ||
316 | ||
317 | #: notebook.py:429 | |
318 | #, python-format | |
319 | msgid "Do you want to permanently erase \"%s\"?" | |
320 | msgstr "Você deseja apagar permanentemente \"%s\"?" | |
321 |
317 | 317 | #: library/pippy/game.py:36 |
318 | 318 | msgid "PAUSED" |
319 | 319 | msgstr "SAYARICHISQA" |
320 | ||
321 | #: notebook.py:428 | |
322 | msgid "Erase" | |
323 | msgstr "Pichay" | |
324 | ||
325 | ||
326 | #: notebook.py:429 | |
327 | #, python-format | |
328 | msgid "Do you want to permanently erase \"%s\"?" | |
329 | msgstr "¿Sapa kutichu pichayta munanki kay kaq \"%s\" nisqataqa?" | |
330 |
300 | 300 | #: library/pippy/game.py:36 |
301 | 301 | msgid "PAUSED" |
302 | 302 | msgstr "PAUZĂ" |
303 | ||
304 | #: notebook.py:428 | |
305 | msgid "Erase" | |
306 | msgstr "Șterge" | |
307 |
302 | 302 | #: library/pippy/game.py:36 |
303 | 303 | msgid "PAUSED" |
304 | 304 | msgstr "ПАУЗА" |
305 | ||
306 | #: notebook.py:428 | |
307 | msgid "Erase" | |
308 | msgstr "Удалить" | |
309 | ||
310 | ||
311 | #: notebook.py:429 | |
312 | #, python-format | |
313 | msgid "Do you want to permanently erase \"%s\"?" | |
314 | msgstr "Вы действительно хотите навсегда удалить \"%s\"?" | |
315 |
302 | 302 | #: library/pippy/game.py:36 |
303 | 303 | msgid "PAUSED" |
304 | 304 | msgstr "Bihagaritswe by'akanya gato" |
305 | ||
306 | #: notebook.py:428 | |
307 | msgid "Erase" | |
308 | msgstr "Gusiba" | |
309 | ||
310 | ||
311 | #: notebook.py:429 | |
312 | #, python-format | |
313 | msgid "Do you want to permanently erase \"%s\"?" | |
314 | msgstr "Ushaka gusiba burundu \"%s\"?" | |
315 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: sd\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.1.1rc4\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
297 | 297 | #: library/pippy/game.py:36 |
298 | 298 | msgid "PAUSED" |
299 | 299 | msgstr "විරාමයක් ගෙන ඇත" |
300 | ||
301 | #: notebook.py:428 | |
302 | msgid "Erase" | |
303 | msgstr "මකන්න" | |
304 | ||
305 | ||
306 | #: notebook.py:429 | |
307 | #, python-format | |
308 | msgid "Do you want to permanently erase \"%s\"?" | |
309 | msgstr "ඔබට \"%s\" ස්ථිරවම මැකීමට අවශ්යද?" | |
310 |
299 | 299 | #: library/pippy/game.py:36 |
300 | 300 | msgid "PAUSED" |
301 | 301 | msgstr "USTAVLJENO" |
302 | ||
303 | #: notebook.py:428 | |
304 | msgid "Erase" | |
305 | msgstr "Izbriši" | |
306 |
306 | 306 | #: library/pippy/game.py:36 |
307 | 307 | msgid "PAUSED" |
308 | 308 | msgstr "E PUSHUAR" |
309 | ||
310 | #: notebook.py:428 | |
311 | msgid "Erase" | |
312 | msgstr "Fshije" | |
313 | ||
314 | ||
315 | #: notebook.py:429 | |
316 | #, python-format | |
317 | msgid "Do you want to permanently erase \"%s\"?" | |
318 | msgstr "Doni të fshihet \"%s\" përgjithmonë?" | |
319 |
305 | 305 | #: library/pippy/game.py:36 |
306 | 306 | msgid "PAUSED" |
307 | 307 | msgstr "PAUSAD" |
308 | ||
309 | #: notebook.py:428 | |
310 | msgid "Erase" | |
311 | msgstr "Ta bort" | |
312 | ||
313 | ||
314 | #: notebook.py:429 | |
315 | #, python-format | |
316 | msgid "Do you want to permanently erase \"%s\"?" | |
317 | msgstr "Vill du permanent ta bort \"%s\"?" | |
318 |
294 | 294 | #: library/pippy/game.py:36 |
295 | 295 | msgid "PAUSED" |
296 | 296 | msgstr "" |
297 | ||
298 | #: notebook.py:428 | |
299 | msgid "Erase" | |
300 | msgstr "Futa" | |
301 |
298 | 298 | #: library/pippy/game.py:36 |
299 | 299 | msgid "PAUSED" |
300 | 300 | msgstr "இடைநிறுத்து" |
301 | ||
302 | #: notebook.py:428 | |
303 | msgid "Erase" | |
304 | msgstr "அழி" | |
305 | ||
306 | ||
307 | #: notebook.py:429 | |
308 | #, python-format | |
309 | msgid "Do you want to permanently erase \"%s\"?" | |
310 | msgstr "உங்களுக்கு நிரந்திரமாக அழிக்க விருப்பமா \"%s\"?" | |
311 |
295 | 295 | #: library/pippy/game.py:36 |
296 | 296 | msgid "PAUSED" |
297 | 297 | msgstr "ఆగినది" |
298 | ||
299 | #: notebook.py:428 | |
300 | msgid "Erase" | |
301 | msgstr "చెరిపివేయి" | |
302 |
294 | 294 | #: library/pippy/game.py:36 |
295 | 295 | msgid "PAUSED" |
296 | 296 | msgstr "หยุดการทำงาน" |
297 | ||
298 | #: notebook.py:428 | |
299 | msgid "Erase" | |
300 | msgstr "ลบ" | |
301 |
298 | 298 | #: library/pippy/game.py:36 |
299 | 299 | msgid "PAUSED" |
300 | 300 | msgstr "Ara" |
301 | ||
302 | #: notebook.py:428 | |
303 | msgid "Erase" | |
304 | msgstr "Silme" | |
305 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # SOME DESCRIPTIVE TITLE. | |
5 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
6 | # This file is distributed under the same license as the PACKAGE package. | |
7 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
8 | # SOME DESCRIPTIVE TITLE. | |
9 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
10 | # This file is distributed under the same license as the PACKAGE package. | |
11 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
12 | #, fuzzy | |
13 | msgid "" | |
14 | msgstr "" | |
15 | "Project-Id-Version: PACKAGE VERSION\n" | |
16 | "Report-Msgid-Bugs-To: \n" | |
17 | "POT-Creation-Date: 2012-06-19 00:34-0400\n" | |
18 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
19 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
20 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
21 | "Language: \n" | |
22 | "MIME-Version: 1.0\n" | |
23 | "Content-Type: text/plain; charset=UTF-8\n" | |
24 | "Content-Transfer-Encoding: 8bit\n" | |
25 | "X-Generator: Translate Toolkit 1.3.0\n" | |
26 | ||
27 | #: activity/activity.info:2 | |
28 | msgid "Pippy" | |
29 | msgstr "" | |
30 | ||
31 | #: activity.py:49 | |
32 | #, python-format | |
33 | msgid "%s Source" | |
34 | msgstr "" | |
35 | ||
36 | #: activity.py:91 | |
37 | msgid "Copy selected text to clipboard" | |
38 | msgstr "" | |
39 | ||
40 | #: activity.py:96 pippy_app.py:113 pippy_app.py:118 | |
41 | msgid "Edit" | |
42 | msgstr "" | |
43 | ||
44 | #: library/pippy/game.py:36 | |
45 | msgid "PAUSED" | |
46 | msgstr "" | |
47 | ||
48 | #: library/pippy/sound.py:54 | |
49 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
50 | msgstr "" | |
51 | ||
52 | #: pippy_app.py:90 | |
53 | msgid "Export as Pippy Document" | |
54 | msgstr "" | |
55 | ||
56 | #: pippy_app.py:96 | |
57 | msgid "Export as Pippy Example" | |
58 | msgstr "" | |
59 | ||
60 | #: pippy_app.py:102 | |
61 | msgid "Create Activity Bundle" | |
62 | msgstr "" | |
63 | ||
64 | #: pippy_app.py:111 | |
65 | msgid "Actions" | |
66 | msgstr "" | |
67 | ||
68 | #: pippy_app.py:138 pippy_app.py:141 | |
69 | msgid "Run!" | |
70 | msgstr "" | |
71 | ||
72 | #: pippy_app.py:139 | |
73 | msgid "<alt>r" | |
74 | msgstr "" | |
75 | ||
76 | #: pippy_app.py:152 pippy_app.py:158 | |
77 | msgid "Stop" | |
78 | msgstr "" | |
79 | ||
80 | #: pippy_app.py:153 | |
81 | msgid "<alt>s" | |
82 | msgstr "" | |
83 | ||
84 | #: pippy_app.py:167 pippy_app.py:173 | |
85 | msgid "Clear" | |
86 | msgstr "" | |
87 | ||
88 | #: pippy_app.py:168 | |
89 | msgid "<alt>c" | |
90 | msgstr "" | |
91 | ||
92 | #: pippy_app.py:197 | |
93 | msgid "Examples" | |
94 | msgstr "" | |
95 | ||
96 | #: pippy_app.py:229 | |
97 | msgid "My examples" | |
98 | msgstr "" | |
99 | ||
100 | #: pippy_app.py:358 | |
101 | #, python-format | |
102 | msgid "%s Activity" | |
103 | msgstr "" | |
104 | ||
105 | #: pippy_app.py:438 | |
106 | msgid "Save as Activity Error" | |
107 | msgstr "" | |
108 | ||
109 | #: pippy_app.py:439 | |
110 | msgid "" | |
111 | "Please give your activity a meaningful name before attempting to save it as " | |
112 | "an activity." | |
113 | msgstr "" | |
114 | ||
115 | #: pippy_app.py:442 pippy_app.py:486 | |
116 | msgid "Ok" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:448 | |
120 | msgid "Creating activity bundle..." | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:479 | |
124 | msgid "Pippy Activity" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:483 | |
128 | msgid "Save as Example Error" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:484 | |
132 | msgid "" | |
133 | "Please give your activity a meaningful name before attempting to save it as " | |
134 | "an example." | |
135 | msgstr "" | |
136 | ||
137 | #: pippy_app.py:492 | |
138 | msgid "Creating example..." | |
139 | msgstr "" | |
140 | ||
141 | #: pippy_app.py:499 | |
142 | msgid "Save as Example Warning" | |
143 | msgstr "" | |
144 | ||
145 | #: pippy_app.py:500 | |
146 | msgid "This example already exists. Do you want to overwrite it?" | |
147 | msgstr "" | |
148 | ||
149 | #: pippy_app.py:506 pippy_app.py:562 | |
150 | msgid "Saved as example." | |
151 | msgstr "" | |
152 | ||
153 | #: pippy_app.py:546 | |
154 | msgid "Activity saved to journal." | |
155 | msgstr "" |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | msgid "" | |
5 | msgstr "" | |
6 | "Project-Id-Version: PACKAGE VERSION\n" | |
7 | "Report-Msgid-Bugs-To: \n" | |
8 | "POT-Creation-Date: 2017-03-24 17:39+1100\n" | |
9 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
10 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
11 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
12 | "Language: tzo\n" | |
13 | "MIME-Version: 1.0\n" | |
14 | "Content-Type: text/plain; charset=UTF-8\n" | |
15 | "Content-Transfer-Encoding: 8bit\n" | |
16 | "X-Generator: Translate Toolkit 1.7.0\n" | |
17 | ||
18 | #: activity/activity.info:2 | |
19 | msgid "Pippy" | |
20 | msgstr "" | |
21 | ||
22 | #: activity/activity.info:3 | |
23 | msgid "" | |
24 | "Searching for programmers! Here you can use examples to begin learning the " | |
25 | "language your computer understands called \"Python.\"" | |
26 | msgstr "" | |
27 | ||
28 | #: filedialog.py:79 | |
29 | msgid "Choose an example to open" | |
30 | msgstr "" | |
31 | ||
32 | #: collabwrapper.py:178 | |
33 | msgid "Joining activity..." | |
34 | msgstr "" | |
35 | ||
36 | #: collabwrapper.py:179 collabwrapper.py:191 | |
37 | msgid "Please wait for the connection..." | |
38 | msgstr "" | |
39 | ||
40 | #: collabwrapper.py:190 | |
41 | msgid "Resuming shared activity..." | |
42 | msgstr "" | |
43 | ||
44 | #: toolbars.py:42 | |
45 | msgid "Zoom in" | |
46 | msgstr "" | |
47 | ||
48 | #: toolbars.py:48 | |
49 | msgid "Zoom out" | |
50 | msgstr "" | |
51 | ||
52 | #: activity.py:65 | |
53 | #, python-format | |
54 | msgid "%s Source" | |
55 | msgstr "" | |
56 | ||
57 | #: icondialog.py:116 | |
58 | msgid "Select an icon" | |
59 | msgstr "" | |
60 | ||
61 | #: notebook.py:219 | |
62 | #, python-format | |
63 | msgid "New Source File %d" | |
64 | msgstr "" | |
65 | ||
66 | #: sound_check.py:27 library/pippy/sound.py:41 | |
67 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
68 | msgstr "" | |
69 | ||
70 | #: pippy_app.py:97 | |
71 | msgid "graphics" | |
72 | msgstr "" | |
73 | ||
74 | #: pippy_app.py:97 | |
75 | msgid "math" | |
76 | msgstr "" | |
77 | ||
78 | #: pippy_app.py:97 | |
79 | msgid "python" | |
80 | msgstr "" | |
81 | ||
82 | #: pippy_app.py:97 | |
83 | msgid "sound" | |
84 | msgstr "" | |
85 | ||
86 | #: pippy_app.py:98 | |
87 | msgid "string" | |
88 | msgstr "" | |
89 | ||
90 | #: pippy_app.py:98 | |
91 | msgid "tutorials" | |
92 | msgstr "" | |
93 | ||
94 | #: pippy_app.py:185 | |
95 | msgid "Import Python file to new tab" | |
96 | msgstr "" | |
97 | ||
98 | #: pippy_app.py:191 | |
99 | msgid "Export as Pippy document" | |
100 | msgstr "" | |
101 | ||
102 | #: pippy_app.py:197 | |
103 | msgid "Save this file to the Pippy library" | |
104 | msgstr "" | |
105 | ||
106 | #: pippy_app.py:205 | |
107 | msgid "Export as new Pippy example" | |
108 | msgstr "" | |
109 | ||
110 | #: pippy_app.py:211 | |
111 | msgid "Create a Sugar activity bundle" | |
112 | msgstr "" | |
113 | ||
114 | #. TRANS: A distutils package is used to distribute Python modules | |
115 | #: pippy_app.py:218 | |
116 | msgid "Export as a distutils package" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:228 | |
120 | msgid "Edit" | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:242 | |
124 | msgid "View" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:252 pippy_app.py:500 | |
128 | msgid "Show output panel" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:265 pippy_app.py:268 | |
132 | msgid "Run!" | |
133 | msgstr "" | |
134 | ||
135 | #: pippy_app.py:266 | |
136 | msgid "<alt>r" | |
137 | msgstr "" | |
138 | ||
139 | #: pippy_app.py:281 pippy_app.py:287 | |
140 | msgid "Stop" | |
141 | msgstr "" | |
142 | ||
143 | #: pippy_app.py:282 | |
144 | msgid "<alt>s" | |
145 | msgstr "" | |
146 | ||
147 | #: pippy_app.py:297 pippy_app.py:303 | |
148 | msgid "Clear" | |
149 | msgstr "" | |
150 | ||
151 | #: pippy_app.py:298 | |
152 | msgid "<alt>c" | |
153 | msgstr "" | |
154 | ||
155 | #: pippy_app.py:314 | |
156 | msgid "Open an example" | |
157 | msgstr "" | |
158 | ||
159 | #: pippy_app.py:389 | |
160 | msgid "My examples" | |
161 | msgstr "" | |
162 | ||
163 | #: pippy_app.py:496 | |
164 | msgid "Hide output panel" | |
165 | msgstr "" | |
166 | ||
167 | #: pippy_app.py:598 | |
168 | #, python-format | |
169 | msgid "%s Activity" | |
170 | msgstr "" | |
171 | ||
172 | #: pippy_app.py:708 | |
173 | msgid "Python File added to Library" | |
174 | msgstr "" | |
175 | ||
176 | #: pippy_app.py:709 | |
177 | #, python-brace-format | |
178 | msgid "" | |
179 | "The file you selected has been added to the library. Use \"import " | |
180 | "{importname}\" to import the library for using." | |
181 | msgstr "" | |
182 | ||
183 | #: pippy_app.py:719 | |
184 | msgid "Saved" | |
185 | msgstr "" | |
186 | ||
187 | #: pippy_app.py:720 | |
188 | msgid "The document has been saved to journal." | |
189 | msgstr "" | |
190 | ||
191 | #: pippy_app.py:734 pippy_app.py:741 | |
192 | msgid "Error importing Python file" | |
193 | msgstr "" | |
194 | ||
195 | #: pippy_app.py:735 | |
196 | msgid "The file you selected is not a Python file." | |
197 | msgstr "" | |
198 | ||
199 | #: pippy_app.py:742 | |
200 | msgid "The file you selected is already open" | |
201 | msgstr "" | |
202 | ||
203 | #: pippy_app.py:767 pippy_app.py:826 | |
204 | msgid "Save as Activity Error" | |
205 | msgstr "" | |
206 | ||
207 | #: pippy_app.py:768 | |
208 | msgid "" | |
209 | "Please give your activity a meaningful name before attempting to save it as " | |
210 | "an activity." | |
211 | msgstr "" | |
212 | ||
213 | #: pippy_app.py:771 pippy_app.py:778 pippy_app.py:873 pippy_app.py:915 | |
214 | msgid "Ok" | |
215 | msgstr "" | |
216 | ||
217 | #: pippy_app.py:779 | |
218 | msgid "Activity icon" | |
219 | msgstr "" | |
220 | ||
221 | #: pippy_app.py:780 | |
222 | msgid "Please select an activity icon." | |
223 | msgstr "" | |
224 | ||
225 | #: pippy_app.py:785 pippy_app.py:800 | |
226 | msgid "Creating activity bundle..." | |
227 | msgstr "" | |
228 | ||
229 | #: pippy_app.py:866 pippy_app.py:908 | |
230 | msgid "Pippy Activity" | |
231 | msgstr "" | |
232 | ||
233 | #: pippy_app.py:868 | |
234 | msgid "Save as distutils package error" | |
235 | msgstr "" | |
236 | ||
237 | #: pippy_app.py:869 | |
238 | msgid "" | |
239 | "Please give your activity a meaningful name before attempting to save it as " | |
240 | "an distutils package." | |
241 | msgstr "" | |
242 | ||
243 | #: pippy_app.py:910 | |
244 | msgid "Save as Example Error" | |
245 | msgstr "" | |
246 | ||
247 | #: pippy_app.py:912 | |
248 | msgid "" | |
249 | "Please give your activity a meaningful name before attempting to save it as " | |
250 | "an example." | |
251 | msgstr "" | |
252 | ||
253 | #: pippy_app.py:921 | |
254 | msgid "Creating example..." | |
255 | msgstr "" | |
256 | ||
257 | #: pippy_app.py:927 | |
258 | msgid "Save as Example Warning" | |
259 | msgstr "" | |
260 | ||
261 | #: pippy_app.py:928 | |
262 | msgid "This example already exists. Do you want to overwrite it?" | |
263 | msgstr "" | |
264 | ||
265 | #: pippy_app.py:935 pippy_app.py:993 | |
266 | msgid "Saved as example." | |
267 | msgstr "" | |
268 | ||
269 | #: pippy_app.py:957 | |
270 | msgid "Error saving activity to journal." | |
271 | msgstr "" | |
272 | ||
273 | #: pippy_app.py:977 | |
274 | msgid "Activity saved to journal." | |
275 | msgstr "" | |
276 | ||
277 | #: pippy_app.py:1119 | |
278 | msgid "Error" | |
279 | msgstr "" | |
280 | ||
281 | #: pippy_app.py:1120 | |
282 | msgid "Error reading data." | |
283 | msgstr "" | |
284 | ||
285 | #: pippy_app.py:1448 | |
286 | msgid "Working..." | |
287 | msgstr "" | |
288 | ||
289 | #: pippy_app.py:1451 | |
290 | msgid "done!" | |
291 | msgstr "" | |
292 | ||
293 | #: library/pippy/game.py:36 | |
294 | msgid "PAUSED" | |
295 | msgstr "" |
308 | 308 | #: library/pippy/game.py:36 |
309 | 309 | msgid "PAUSED" |
310 | 310 | msgstr "ПРИЗУПИНЕНО" |
311 | ||
312 | #: notebook.py:428 | |
313 | msgid "Erase" | |
314 | msgstr "Стерти" | |
315 | ||
316 | ||
317 | #: notebook.py:429 | |
318 | #, python-format | |
319 | msgid "Do you want to permanently erase \"%s\"?" | |
320 | msgstr "Бажаєте повністю стерти \"%s\"?" | |
321 |
297 | 297 | #: library/pippy/game.py:36 |
298 | 298 | msgid "PAUSED" |
299 | 299 | msgstr "رکا ہوا" |
300 | ||
301 | #: notebook.py:428 | |
302 | msgid "Erase" | |
303 | msgstr "مٹائيں" | |
304 | ||
305 | ||
306 | #: notebook.py:429 | |
307 | #, python-format | |
308 | msgid "Do you want to permanently erase \"%s\"?" | |
309 | msgstr "کیا آپ \"%s\" ہمیشہ کے لیے ختم کرنا چاہتے ہیں؟" | |
310 |
298 | 298 | #: library/pippy/game.py:36 |
299 | 299 | msgid "PAUSED" |
300 | 300 | msgstr "BỊ TẠM DỪNG" |
301 | ||
302 | #: notebook.py:428 | |
303 | msgid "Erase" | |
304 | msgstr "Xoá" | |
305 | ||
306 | ||
307 | #: notebook.py:429 | |
308 | #, python-format | |
309 | msgid "Do you want to permanently erase \"%s\"?" | |
310 | msgstr "Xác nhận việc xoá: bạn có muốn xoá hẳn \"%s\" không?" | |
311 |
0 | # SOME DESCRIPTIVE TITLE. | |
1 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
2 | # This file is distributed under the same license as the PACKAGE package. | |
3 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
4 | # SOME DESCRIPTIVE TITLE. | |
5 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
6 | # This file is distributed under the same license as the PACKAGE package. | |
7 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
8 | # SOME DESCRIPTIVE TITLE. | |
9 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER | |
10 | # This file is distributed under the same license as the PACKAGE package. | |
11 | # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. | |
12 | #, fuzzy | |
13 | msgid "" | |
14 | msgstr "" | |
15 | "Project-Id-Version: PACKAGE VERSION\n" | |
16 | "Report-Msgid-Bugs-To: \n" | |
17 | "POT-Creation-Date: 2012-06-19 00:34-0400\n" | |
18 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" | |
19 | "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" | |
20 | "Language-Team: LANGUAGE <LL@li.org>\n" | |
21 | "Language: \n" | |
22 | "MIME-Version: 1.0\n" | |
23 | "Content-Type: text/plain; charset=UTF-8\n" | |
24 | "Content-Transfer-Encoding: 8bit\n" | |
25 | "X-Generator: Translate Toolkit 1.1.1rc4\n" | |
26 | ||
27 | #: activity/activity.info:2 | |
28 | msgid "Pippy" | |
29 | msgstr "" | |
30 | ||
31 | #: activity.py:49 | |
32 | #, python-format | |
33 | msgid "%s Source" | |
34 | msgstr "" | |
35 | ||
36 | #: activity.py:91 | |
37 | msgid "Copy selected text to clipboard" | |
38 | msgstr "" | |
39 | ||
40 | #: activity.py:96 pippy_app.py:113 pippy_app.py:118 | |
41 | msgid "Edit" | |
42 | msgstr "" | |
43 | ||
44 | #: library/pippy/game.py:36 | |
45 | msgid "PAUSED" | |
46 | msgstr "" | |
47 | ||
48 | #: library/pippy/sound.py:54 | |
49 | msgid "Cannot find TamTamEdit sound library. Did you install TamTamEdit?" | |
50 | msgstr "" | |
51 | ||
52 | #: pippy_app.py:90 | |
53 | msgid "Export as Pippy Document" | |
54 | msgstr "" | |
55 | ||
56 | #: pippy_app.py:96 | |
57 | msgid "Export as Pippy Example" | |
58 | msgstr "" | |
59 | ||
60 | #: pippy_app.py:102 | |
61 | msgid "Create Activity Bundle" | |
62 | msgstr "" | |
63 | ||
64 | #: pippy_app.py:111 | |
65 | msgid "Actions" | |
66 | msgstr "" | |
67 | ||
68 | #: pippy_app.py:138 pippy_app.py:141 | |
69 | msgid "Run!" | |
70 | msgstr "" | |
71 | ||
72 | #: pippy_app.py:139 | |
73 | msgid "<alt>r" | |
74 | msgstr "" | |
75 | ||
76 | #: pippy_app.py:152 pippy_app.py:158 | |
77 | msgid "Stop" | |
78 | msgstr "" | |
79 | ||
80 | #: pippy_app.py:153 | |
81 | msgid "<alt>s" | |
82 | msgstr "" | |
83 | ||
84 | #: pippy_app.py:167 pippy_app.py:173 | |
85 | msgid "Clear" | |
86 | msgstr "" | |
87 | ||
88 | #: pippy_app.py:168 | |
89 | msgid "<alt>c" | |
90 | msgstr "" | |
91 | ||
92 | #: pippy_app.py:197 | |
93 | msgid "Examples" | |
94 | msgstr "" | |
95 | ||
96 | #: pippy_app.py:229 | |
97 | msgid "My examples" | |
98 | msgstr "" | |
99 | ||
100 | #: pippy_app.py:358 | |
101 | #, python-format | |
102 | msgid "%s Activity" | |
103 | msgstr "" | |
104 | ||
105 | #: pippy_app.py:438 | |
106 | msgid "Save as Activity Error" | |
107 | msgstr "" | |
108 | ||
109 | #: pippy_app.py:439 | |
110 | msgid "" | |
111 | "Please give your activity a meaningful name before attempting to save it as " | |
112 | "an activity." | |
113 | msgstr "" | |
114 | ||
115 | #: pippy_app.py:442 pippy_app.py:486 | |
116 | msgid "Ok" | |
117 | msgstr "" | |
118 | ||
119 | #: pippy_app.py:448 | |
120 | msgid "Creating activity bundle..." | |
121 | msgstr "" | |
122 | ||
123 | #: pippy_app.py:479 | |
124 | msgid "Pippy Activity" | |
125 | msgstr "" | |
126 | ||
127 | #: pippy_app.py:483 | |
128 | msgid "Save as Example Error" | |
129 | msgstr "" | |
130 | ||
131 | #: pippy_app.py:484 | |
132 | msgid "" | |
133 | "Please give your activity a meaningful name before attempting to save it as " | |
134 | "an example." | |
135 | msgstr "" | |
136 | ||
137 | #: pippy_app.py:492 | |
138 | msgid "Creating example..." | |
139 | msgstr "" | |
140 | ||
141 | #: pippy_app.py:499 | |
142 | msgid "Save as Example Warning" | |
143 | msgstr "" | |
144 | ||
145 | #: pippy_app.py:500 | |
146 | msgid "This example already exists. Do you want to overwrite it?" | |
147 | msgstr "" | |
148 | ||
149 | #: pippy_app.py:506 pippy_app.py:562 | |
150 | msgid "Saved as example." | |
151 | msgstr "" | |
152 | ||
153 | #: pippy_app.py:546 | |
154 | msgid "Activity saved to journal." | |
155 | msgstr "" |
299 | 299 | #: library/pippy/game.py:36 |
300 | 300 | msgid "PAUSED" |
301 | 301 | msgstr "Bii" |
302 | ||
303 | #: notebook.py:428 | |
304 | msgid "Erase" | |
305 | msgstr "nu" | |
306 | ||
307 | ||
308 | #: notebook.py:429 | |
309 | #, python-format | |
310 | msgid "Do you want to permanently erase \"%s\"?" | |
311 | msgstr "Ṣe o fẹ lati patapata nu \"%s\"?" | |
312 |
302 | 302 | #, fuzzy |
303 | 303 | msgid "PAUSED" |
304 | 304 | msgstr "暂停" |
305 | ||
306 | #: notebook.py:428 | |
307 | msgid "Erase" | |
308 | msgstr "删除" | |
309 | ||
310 | ||
311 | #: notebook.py:429 | |
312 | #, python-format | |
313 | msgid "Do you want to permanently erase \"%s\"?" | |
314 | msgstr "你想永久删除“%s”?" | |
315 |
294 | 294 | #: library/pippy/game.py:36 |
295 | 295 | msgid "PAUSED" |
296 | 296 | msgstr "暫停" |
297 | ||
298 | #: notebook.py:428 | |
299 | msgid "Erase" | |
300 | msgstr "刪除" | |
301 | ||
302 | ||
303 | #: notebook.py:429 | |
304 | #, python-format | |
305 | msgid "Do you want to permanently erase \"%s\"?" | |
306 | msgstr "你想永久删除“%s”嗎?" | |
307 |