Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJonas Smedegaard <dr@jones.dk>2008-05-26 12:46:21 (GMT)
committer Jonas Smedegaard <dr@jones.dk>2008-05-26 12:46:21 (GMT)
commitcf628090f28be9a4315a64afda633d3b272da7f8 (patch)
treea089a0f80c497d6d4aaf7131b2998f898e26060d
parentefa23ee8d5286c308e56969e7af287b5678650ea (diff)
Imported Upstream version 19upstream/19
-rw-r--r--po/Calculate.pot526
-rw-r--r--po/bg.po722
-rw-r--r--po/bn.po658
-rw-r--r--po/bn_IN.po658
-rw-r--r--po/ca.po555
-rw-r--r--po/de.po666
-rw-r--r--po/dz.po658
-rw-r--r--po/el.po641
-rw-r--r--po/fa.po658
-rw-r--r--po/fa_AF.po688
-rw-r--r--po/ff.po526
-rw-r--r--po/gu.po526
-rw-r--r--po/ht.po529
-rw-r--r--po/it.po533
-rw-r--r--po/ja.po753
-rw-r--r--po/km.po530
-rw-r--r--po/ko.po526
-rw-r--r--po/mk.po666
-rw-r--r--po/ml.po658
-rw-r--r--po/mn.po526
-rw-r--r--po/mr.po526
-rw-r--r--po/pa.po658
-rw-r--r--po/ps.po532
-rw-r--r--po/pt_BR.po674
-rw-r--r--po/si.po526
-rw-r--r--po/te.po511
-rw-r--r--po/th.po530
-rw-r--r--po/tr.po529
-rw-r--r--po/vi.po526
-rw-r--r--po/zh_CN.po526
-rw-r--r--po/zh_TW.po526
l---------sharedstate1
-rw-r--r--sharedstate.git/MANIFEST1
-rw-r--r--sharedstate.git/SharingTest.py113
-rw-r--r--sharedstate.git/activity/activity-shtest.svg8
-rw-r--r--sharedstate.git/activity/activity.info7
-rw-r--r--sharedstate.git/setup.py3
-rw-r--r--sharedstate.git/sharedstate/README10
-rw-r--r--sharedstate.git/sharedstate/__init__.py1
-rw-r--r--sharedstate.git/sharedstate/shareddict.py107
-rw-r--r--sharedstate.git/sharedstate/sharedobject.py436
-rw-r--r--sharedstate.git/sharedstate/sharedobjects.py25
-rw-r--r--sharedstate.git/sharedstate/sharedpython.py234
-rw-r--r--sharedstate.git/sharedstate/sharedstate.py532
-rw-r--r--sharedstate.git/sharedstate/sharedtext.py181
-rw-r--r--sharedstate.git/sharedstate/tubeconn.py107
46 files changed, 20033 insertions, 0 deletions
diff --git a/po/Calculate.pot b/po/Calculate.pot
new file mode 100644
index 0000000..ac76c35
--- /dev/null
+++ b/po/Calculate.pot
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
diff --git a/po/bg.po b/po/bg.po
new file mode 100644
index 0000000..0c92a02
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,722 @@
+# Bulgarian translation of PACKAGE.
+# Copyright (C) 2008 THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# Alexander Todorov <atodorov@redhat.com>, 2008.
+# , fuzzy
+#
+#
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-02-13 04:39-0500\n"
+"Last-Translator: Alexander Todorov <atodorov@redhat.com>\n"
+"Language-Team: Bulgarian <dict@fsa-bg.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Калкулатор"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "Невалиден низ (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "Налични функции:"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "Записване в дневника (%s)"
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr "Четене от дневника (%s)"
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr "Версията не може да бъде определена"
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr "Прочитане елемент от дневника (версия %s)"
+
+#: calculate.py:538
+#, python-format
+msgid "State line invalid (%s)"
+msgstr "Невалиден статус на ред (%s)"
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr "Грешка при прочитане елемент от дневника, непозната версия (%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "button_pressed(): невалиден тип"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "ниво: %d от %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "Грешка в %d"
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr "var(), връща списък с променливите които текущо са дефинирани"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "Функцията '%s' не е дефинирана"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "Невалиден брой параметри (%d вместо %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "функцията приема %d аргумента"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "Аргумент %d ('%s') неможе да бъде обработен"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "Функционална грешка: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "Променливата '%s' не е дефинирана"
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "Грешка при обработка на текста (дясна скоба)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "Не се очаква дясна скоба"
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "Грешка при обработка (дясна скоба без променлива в ляво)"
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr "Не се очаква число"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "Оператор не се очаква"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "Невалиден оператор"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "Очаква се оператор"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr "_parse(): връща None"
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr ""
+"acos(X), връща аркус косинус от X. Това е ъгълът, чийто косинус е равен на "
+"X. Дефиниционен интервал: -1 <= X < 1"
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr ""
+"and(X, Y), логическо и. Връща Истина ако X и Y са Истина. В противен случай "
+"връща Лъжа."
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr ""
+"asin(X), връща аркус синуса от X. Това е ъгълът, чийто синус е "
+"X.Дефиниционен интервал:-1 <= X <= 1"
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr ""
+"atan(X), връща аркус тангенса от X. Това е ъгълът, чийто тангенс е "
+"X.Дефиниционно множество: за всяко X"
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr ""
+"cos(X), връща косинуса на X. Това е координатата по абцисната ос в точката "
+"на пресичане на единичната окръжност и ъгъла X."
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr ""
+"cosh(X), връща хиперболичен косинус от X.Дефиниран с израза: (exp(X) + "
+"exp(-X)) / 2"
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr "exp(X), връща e на степен X. Дефиниран с израза: е^X"
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr ""
+"fac(X), връща факториел от X.Дефиниран с израза: X * (X - 1) * (X - 2) * ..."
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr "functions(), връща списък с всички дефинирани функции"
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr ""
+"ln(X) - връща натурален логаритъм от X. Това е стойността, за която "
+"експонентата exp() е равна на X. Дефиниционнен интервал: X >= 0"
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr "operators(), връща списък с дефинираните оператори"
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr ""
+"or(X, Y), логическо или. Връща Истина ако X и/или Y е Истина. В противен "
+"случай връща Лъжа."
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr ""
+"plot(f(X), X=a..b), изчертава графиката на функцията f(X) в интервала от a "
+"до b."
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr ""
+"sin(X), връща синус от X. Това е координатата по ординатната ос в точката на "
+"пресичане на единичната окръжност и ъгъла X."
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr ""
+"sinh(X), връща хиперболичен синус от X.Дефиниран с израза (exp(X) - exp(-X)) "
+"/ 2"
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr ""
+"sqrt(X), връща квадратен корен от X. Това е стойността, която повдигнатана "
+"втора степен е равна на X. Дефиниционен интервал: X >= 0"
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr "square(X), връща втората степен на X. Дефиниран с израза: X * X"
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr "tan(X), връща тангенс от X. Дефиниран с израза: sin(X) / cos (X)"
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr ""
+"tanh(X), връща хиперболичен тангенс от X.Дефиниран с израза: sinh(X) / "
+"cosh(X)"
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr "ТЕСТ"
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr "variables(), връща списък с променливите които текущо са дефинирани"
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr ""
+"xor(X, Y), логическо изключващо или. Връща Истина ако X е Истина (Y - Лъжа) "
+"или Y е Истина (X - Лъжа). В противен случай връща Лъжа."
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr "Теми"
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr "Не е намерена помощ относно '%s', използвайте help(index) за index"
+
+#: layout.py:60
+msgid "Edit"
+msgstr "Редактиране"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "Алгебра"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "Тригонометрия"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "Логически функции"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "Константи"
+
+#: layout.py:65
+msgid "Format"
+msgstr "Формат"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "Етикет:"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "Всички уравнения"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "Моите уравнения"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "История"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "Променливи"
+
+# разделител за хиляди - space
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr " "
+
+# разделител за десетици (при дроби)?
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr "."
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr "*"
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr "/"
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "Недефиниран"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "Грешка: непознат тип"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "Помощ"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "Копиране"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "Поставяне"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "Изрязване"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "Повдигане на втора степен"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "Квадратен корен"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr "e на степен X"
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr "Натурален логаритъм"
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr "Факториел"
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "Синус"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "Косинус"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "Тангенс"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr "Аркус синус"
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr "Аркус косинус"
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr "Аркус тангенс"
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr "Хиперболичен синус"
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr "Хиперболичен косинус"
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr "Хиперболичен тангенс"
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr "Логическо и"
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr "Логическо или"
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr "Логическо изкл. или"
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "равно"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "различно"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "пи"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "е"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "градуси"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "радиани"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr "Грешка при обработка на текста"
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr "Използвайте help(test) за помощ относно 'test' илиhelp(index) за index"
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr "Не се очаква лява скоба"
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr "Грешка при обработка (дясна скоба без съответна лява скоба)"
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr "Грешка при обработка: очаква се число или променлива"
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr "Очаква се число или променлива"
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr "acos"
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+"acos(X), връща аркус косинус от X. Това е ъгълът, чийто косинус е равен на "
+"X.Дефиниционен интервал: -1 <= X < 1"
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "and"
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+"and(X, Y), логическо и. Връща Истина ако X и Y са Истина.В противен случай "
+"връща Лъжа."
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr "asin"
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+"asin(X), връща аркус синуса от X. Това е ъгълът, чийто синус е "
+"X.Дефиниционен интервал:-1 <= X <= 1"
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr "atan"
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+"atan(X), връща аркус тангенса от X. Това е ъгълът, чийто тангенс е "
+"X.Дефиниционно множество: за всяко X"
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr "cos"
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+"cos(X), връща косинуса на X. Това е координатата по абцисната осв точката на "
+"пресичане на единичната окръжност и ъгъла X."
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr "cosh"
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+"cosh(X), връща хиперболичен косинус от X.Дефиниран с израза: (exp(X) + "
+"exp(-X)) / 2"
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr "exp"
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr "exp(X), връща логаритъм от X при основа натуралното число"
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr "fac"
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr "fac(X), връща факториел от X"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr "functions"
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr "functions(), връща списък с всички дефинирани функции"
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr "ln"
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+"ln(X) - връща натурален логаритъм от X. Това е стойността,за която "
+"експонентата exp() е равна на X.Дефиниционнен интервал: X >= 0"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr "operators"
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr "operators(), връща списък с дефинираните оператори"
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr "or"
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+"or(X, Y), логическо или. Връща Истина ако X и/или Y е Истина.В противен "
+"случай връща Лъжа."
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr "plot"
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+"plot(EQN, VAR=-a..b), изчертава графиката на функцията EQN в интервала от a "
+"до b."
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr "sin"
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+"sin(X), връща синус от X. Това е координатата по ординатната осв точката на "
+"пресичане на единичната окръжност и ъгъла X."
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr "sinh"
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+"sinh(X), връща хиперболичен синус от X.Дефиниран с израза "
+"(exp(X)·-·exp(-X))·/·2"
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr "sqrt"
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+"sqrt(X), връща квадратен корен от X. Това е стойността, която повдигнатана "
+"втора степен е равна на X. Дефиниционен интервал: X >= 0"
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr "square"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr "square(X), връща втората степен на X.Дефиниран с израза: X * X"
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr "tan"
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+"tan(X), връща тангенс от X. *ДЕФИНИЦИЯ*Дефиниран с израза: sin(X) / cos (X)"
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr "tanh"
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+"tanh(X), връща хиперболичен тангенс от X.Дефиниран с израза: sinh(X) / "
+"cosh(X)"
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr "test"
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+"Това е пробен текст, използвайте help(ключ), за да получите информация за "
+"ключа."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr "variables"
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr "variables(), връща списък с променливите които текущо са дефинирани"
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr "xor"
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+"xor(X, Y), логическо изключващо или. Връща Истина ако X е Истина (Y - Лъжа) "
+"илиY е Истина (X - Лъжа). В противен случай връща Лъжа."
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr "index"
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr "x на степен y"
diff --git a/po/bn.po b/po/bn.po
new file mode 100644
index 0000000..0adc548
--- /dev/null
+++ b/po/bn.po
@@ -0,0 +1,658 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: xo-bundled\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2007-12-23 17:07+0600\n"
+"Last-Translator: Khandakar Mujahidul Islam <suzan229@gmail.com>\n"
+"Language-Team: Bengali <core@bengalinux.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "গণনা"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr ""
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr ""
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr ""
+
+#: calculate.py:538
+#, python-format
+msgid "State line invalid (%s)"
+msgstr ""
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "%d তে ত্রুটি"
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr ""
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr ""
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr ""
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr ""
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr ""
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr ""
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr ""
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr ""
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr ""
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr ""
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr "সম্পাদন"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr "সব প্রশ্ন"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "আমার প্রশ্ন"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "ইতিহাস দেখাও"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr ""
+
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "সহায়িকা"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "কপি"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "সাঁটো"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "কাটো"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "বর্গ"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "বর্গমূল"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "সাইন"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "কস"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "ট্যান"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "সমান"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "সমান নয়"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "পাই"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "e"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "ডিগ্রী"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "রেডিয়ান"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+#, fuzzy
+msgid "square"
+msgstr "বর্গ"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/bn_IN.po b/po/bn_IN.po
new file mode 100644
index 0000000..0adc548
--- /dev/null
+++ b/po/bn_IN.po
@@ -0,0 +1,658 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: xo-bundled\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2007-12-23 17:07+0600\n"
+"Last-Translator: Khandakar Mujahidul Islam <suzan229@gmail.com>\n"
+"Language-Team: Bengali <core@bengalinux.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "গণনা"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr ""
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr ""
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr ""
+
+#: calculate.py:538
+#, python-format
+msgid "State line invalid (%s)"
+msgstr ""
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "%d তে ত্রুটি"
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr ""
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr ""
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr ""
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr ""
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr ""
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr ""
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr ""
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr ""
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr ""
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr ""
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr "সম্পাদন"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr "সব প্রশ্ন"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "আমার প্রশ্ন"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "ইতিহাস দেখাও"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr ""
+
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "সহায়িকা"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "কপি"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "সাঁটো"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "কাটো"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "বর্গ"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "বর্গমূল"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "সাইন"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "কস"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "ট্যান"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "সমান"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "সমান নয়"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "পাই"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "e"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "ডিগ্রী"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "রেডিয়ান"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+#, fuzzy
+msgid "square"
+msgstr "বর্গ"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/ca.po b/po/ca.po
new file mode 100644
index 0000000..229eec0
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,555 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-01-14 21:12+0000\n"
+"Last-Translator: Jaume <jaume@nualart.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Calcula"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "Equation.parse() cadena invàlida (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "Funcions disponibles:"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "Escribint al Diari (%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "button_pressed(): caràcter invàlid"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "nivell: %d, de %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "Error a %d"
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr "Usa help(test) per ajuda sobre 'test', o help(index) per l'índex"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "La funció '%s' no està definida"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "Número d'arguments invàlid (%d en comptes de %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "la funció pren %d arguments"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "No es pot analitzar l'argument %d: '%s'"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "Funció error: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "Variable '%s' no definida"
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "Error analitzant (parèntesi dret)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "Parèntesi dret inesperat"
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "Error analitzant (parèntesi dret, no hi ha valor a l'esquerra)"
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr "Número inesperat"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "Operador inesperat"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "Operador invàlid"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "Operador esperat"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr "_parse(): no torna res"
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr "acos"
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+"acos(x), torna l'arc cosinus de x. Això és l'angle, el cosinus del qual és "
+"x. Està definit per -1 <= x < 1"
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "i"
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+"i(x, y), \"i\" lògic. Torna True (Veritable) si x i y són veritables, "
+"altrament torna False (Falç)"
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr "asin"
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+"asin(x), torna l'arc sinus de x. Aquest és l'angle, el sinus del qual és x. "
+"Definit per -1 <= x <= 1"
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr "atan"
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+"atan(x), torna l'arc tangent de x. Aquest és l'angle, la tangent del qual és "
+"x. Definit per tota x"
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr "cos"
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+"cos(x), torna el cosinus de x. Aquesta és la coordenada x en el cercle "
+"d'unitats per l'angle x."
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr "cosh"
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+"cosh(x), torna el cosinus hiperbòlic de x. Donat per (exp(x) + exp(-x)) / 2"
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr "exp"
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr "exp(x), torna l'exponent natural de x. Donat per e^x"
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr "fac"
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr "fac(x), torna el factorial de x. Donat per x * (x - 1) * (x - 2) * ..."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr "funcions"
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr "functions(), torna el llistat de totes les funcions definides"
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr "ln"
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+"ln(x), torna el logaritme natural de x. L'exponent d'aquest valor és x. "
+"Definit per x >= 0."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr "operadors"
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr "operators(), torna la llista dels operadors definits"
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr "o"
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+"or(x, y), \"o\" lògic. Torna True (Veritable) si x i/o y són True, altrament "
+"torna False (Falç)"
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr "plot"
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+"plot(eqn, var=-a..b), traça l'equació 'eqn' amb la variable 'var' en el rang "
+"de a a b"
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr "sin"
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+"sin(x), Torna el sinus de x. Aquest és la coordenada y de les unitats del "
+"cercle per a l'angle x"
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr "sinh"
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+"sinh(x), torna el sinus hiperbòlic de x. Donat per (exp(x) - exp(-x)) / 2"
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr "sqrt"
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+"sqrt(x), torna l'arrel quadrada de x. Aquest és el valor, el quadrat del "
+"qual és x. Definit per x >= 0."
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr "quadrat"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr "square(x), torna el quadrat de x. Donat per x * x"
+
+#: eqnparserhelp.py:101
+#, fuzzy
+msgid "tan"
+msgstr "atan"
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+#, fuzzy
+msgid "Square"
+msgstr "quadrat"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:504
+#, fuzzy
+msgid "Left parenthesis unexpected"
+msgstr "Parèntesi dret inesperat"
+
+#: eqnparser.py:534
+#, fuzzy
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr "Error analitzant (parèntesi dret, no hi ha valor a l'esquerra)"
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/de.po b/po/de.po
new file mode 100644
index 0000000..52429df
--- /dev/null
+++ b/po/de.po
@@ -0,0 +1,666 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-01-30 02:42-0500\n"
+"Last-Translator: Gerhard Steiner <gerhard.steiner@duichwir.at>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Rechnen"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "Equation.parse() Zeichenkette ungültig (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "Verfügbare Funktionen:"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "Schreibe ins Journal (%s)"
+
+#: calculate.py:506
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr "Lese vom Journal (%s)"
+
+#: calculate.py:512
+msgid "Unable to determine version"
+msgstr "Version nicht feststellbar"
+
+#: calculate.py:517
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr "Lese Journaleintrag (version %s)"
+
+#: calculate.py:522
+#, python-format
+msgid "State line invalid (%s)"
+msgstr "Grenzbereich ungültig (%s)"
+
+#: calculate.py:539
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr "Journaleintrag kann nicht gelesen werden, unbekannte Version (%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "button_pressed(): ungültiger Typ"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "Ebene: %d, von %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "Fehler bei %d"
+
+#: eqnparser.py:234
+#, fuzzy
+msgid "help_var"
+msgstr "help_var"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "Funktion '%s' nicht definiert"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "Ungültige Anzahl von Argumenten (%d anstatt von %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "Funktion nimmt %d Argumente"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "Nicht bestimmbares Argument %d: '%s'"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "Funktionsfehler: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "Variable '%s' nicht definiert"
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "Bestimmungsfehler (Rechte Klammer)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "Rechte Klammer unerwartet"
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "Bestimmungsfehler (Rechte Klammer, kein linker Wert)"
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr "Unerwartete Zahl"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "Unerwarteter Operator"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "Ungültiger Operator"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "Operator erwartet"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr "_parse(): kein Rückgabewert"
+
+#. These are the help topics and should explain how things work
+#: eqnparserhelp.py:37
+#, fuzzy
+msgid "help_acos"
+msgstr "help_acos"
+
+#: eqnparserhelp.py:38
+#, fuzzy
+msgid "help_asin"
+msgstr "help_asin"
+
+#: eqnparserhelp.py:39
+#, fuzzy
+msgid "help_cos"
+msgstr "help_cos"
+
+#: eqnparserhelp.py:40
+#, fuzzy
+msgid "help_exp"
+msgstr "help_exp"
+
+#: eqnparserhelp.py:41
+#, fuzzy
+msgid "help_functions"
+msgstr "help_functions"
+
+#: eqnparserhelp.py:42
+#, fuzzy
+msgid "help_operators"
+msgstr "help_operators"
+
+#: eqnparserhelp.py:43
+#, fuzzy
+msgid "help_plot"
+msgstr "help_plot"
+
+#: eqnparserhelp.py:44
+#, fuzzy
+msgid "help_sin"
+msgstr "help_sin"
+
+#: eqnparserhelp.py:45
+#, fuzzy
+msgid "help_sqrt"
+msgstr "help_sqrt"
+
+#: eqnparserhelp.py:46
+#, fuzzy
+msgid "help_test"
+msgstr "help_test"
+
+#: eqnparserhelp.py:47
+#, fuzzy
+msgid "help_variables"
+msgstr "help_variables"
+
+#: eqnparserhelp.py:58
+#, fuzzy
+msgid "help_usage"
+msgstr "help_usage"
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr "Themen"
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+"Keine Hilfe bezüglich '%s' verfügbar, verwende help(index) um Übersicht "
+"anzuzeigen"
+
+#: layout.py:60
+msgid "Edit"
+msgstr "Bearbeiten"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "Algebra"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "Trigonometrie"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "Boole'sche Algebra"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "Konstanten"
+
+#: layout.py:65
+msgid "Format"
+msgstr "Format"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "Bezeichnung:"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "Alle Berechnungen"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "Meine Berechnungen"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "Verlauf anzeigen"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "Variablen anzeigen"
+
+#. The separator to mark thousands (default: ',')
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr ". ist das Trennzeichen für Tausender."
+
+#. The separator to mark fractions (default: '.')
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr "/ ist das Bruchzeichen."
+
+#. The multiplication symbol (default: '*')
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr "* ist das Zeichen für multiplizieren."
+
+#. The division symbol (default: '/')
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr "/ ist das Zeichen für die Division."
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr "Verarbeitungsfehler"
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+"Verwende Hilfe(Test) für Hilfe über 'Test' oder Hilfe(Index) für den Index"
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr "Linke Klammer unerwartet"
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr "Verarbeitungsfehler (Rechte Klammer, kein Möglichkeit zum schließen)"
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr "Verarbeitungsfehler: Zahl oder Variable erwartet"
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr "Zahl oder Variable erwartet"
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr "acos"
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+"acos(x) gibt den Arcuscosinus von x zurück. Das ist der Winkel für den der "
+"Cosinus x ist. Definiert for -1 <= x < 1"
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "and"
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+"and(x,y), logisches und. Gibt Wahr zurück von x und y Wahr sind. Andernfalls "
+"wird Falsch zurückgegeben."
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr "asin"
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+"asin(x) gibt den Arcussinus von x zurück. Das ist der Winkel für den der "
+"Sinus x ist. Definiert für -1 <= x <= 1"
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr "atan"
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+"atan(x) gibt den Arcustangens von x zurück. Das ist der Winkel für den der "
+"Tangens x ist. Definiert für alle x."
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr "cos"
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+"cos(x), gibt den Cosinus von x zurück. Das ist die x-Koordinate am "
+"Einheitskreis beim Winkel x."
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr "cosh"
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+"cosh(x), gibt den Cosinus hyperbolicus von x zurück. Entspricht (exp(x) + "
+"exp(-x)) / 2"
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr "exp"
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr "exp(x), gibt den naürlichen Exponent von x zurück. Entspricht e^x"
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr "fac"
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+"fac(x), gibt die Fakultät von x zurück. Entspricht x * (x - 1) * (x - 2) * "
+"..."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr "Funktionen"
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr "Funktionen() gibt eine Liste der definierten Funktionen zurück"
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr "ln"
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+"ln(x), gibt den natürlichen Logarithmus von x zurück. Dies ist der Wert für "
+"den der Exponent exp() gleich x ist. Werte für x >=0."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr "Operatoren"
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr "Operatoren() gibt eine Liste der definierten Operatoren zurück"
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr "or"
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+"or(x,y), logisches oder. Gibt Wahr zurück von x und/oder y Wahr sind. "
+"Andernfalls wird Falsch zurückgegeben."
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr "plot"
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+"plot(eqn, var=-a..b) plottet die Gleichung 'eqn' mit den Variablen 'var' im "
+"Bereich von a bis b"
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr "sin"
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+"sin(x), gibt den Sinus von x zurück. Das ist die y-Koordinate am "
+"Einheitskreis beim Winkel x."
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr "sinh"
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+"sinh(x), gibt den Sinus hyperbolicus von x zurück. Entspricht (exp(x) - "
+"exp(-x)) / 2"
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr "sqrt"
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+"sqrt(x), gibt die Quadratwurzel von x zurück. Das ist der Wert für den das "
+"Quadrat gleich x ist. Definiert für x >= 0."
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr "square"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr "square(x), gibt das Quadrat von x zurück. Entspricht x * x"
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr "tan"
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+"tan(x), gibt den Tangens von x zurück. Das ist die Steilheit der Linie vom "
+"Ursprung des Einheitskreises zum Punkt am Einheitskreis beim Winkel x. "
+"Entspricht sin(x) / cos(x)"
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr "tanh"
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+"tanh(x), gibt den Tangens hyperbolicus von x zurück. Entspricht sinh(x) / "
+"cosh(x)"
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr "Test"
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+"Das ist nur ein Testthema, verwende Hilfe(Index) um zum Index zu gelangen"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr "Variablen"
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr "Variablen(), gibt eine Liste der derzeit verwendeten Variablen zurück"
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr "xor"
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+"xor(x, y), logisches xor. Gibt 'Wahr' zurück wenn x 'Wahr' ist (und y "
+"'Falsch' ist) oder wenn y 'Wahr' ist (und x 'Falsch' ist ). Andernfalls wird "
+"'Falsch' zurückgegeben."
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr "Index"
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "Nicht definiert"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "Fehler: Typ nicht unterstützt"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "Hilfe"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "Kopieren"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "Einfügen"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "Ausschneiden"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "Quadrieren"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "Quadratwurzel"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr "e hoch x"
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr "Natürlicher Logarithmus"
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr "Fakturiell"
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "Sinus"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "Cosinus"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "Tangens"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr "Arcussinus"
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr "Arcuscosinus"
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr "Arcustangens"
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr "Sinus hyperbolicus"
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr "Cosinus hyperbolicus"
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr "Tangens hyperbolicus"
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr "Logisches und"
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr "Logisches oder"
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "Gleich"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "Ungleich"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "Pi"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "e"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "Grad"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "Radiant"
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr "x hoch y"
diff --git a/po/dz.po b/po/dz.po
new file mode 100644
index 0000000..95a2cfc
--- /dev/null
+++ b/po/dz.po
@@ -0,0 +1,658 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr ""
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr ""
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr ""
+
+#: calculate.py:538
+#, python-format
+msgid "State line invalid (%s)"
+msgstr ""
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr ""
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr ""
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr ""
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr ""
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr ""
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr ""
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr ""
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr ""
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr ""
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr ""
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr ""
+
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/el.po b/po/el.po
new file mode 100644
index 0000000..aaf6939
--- /dev/null
+++ b/po/el.po
@@ -0,0 +1,641 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-02-09 11:47-0500\n"
+"Last-Translator: John Sarlis <sarlis@sch.gr>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=2; plural=(n != 1);\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Υπολόγισε"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "Equation.parse() λάθος συμβολοσειρά (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "Διαθέσιμες συναρτήσεις"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "Εγγραφή στο ημερολόγιο (%s)"
+
+#: calculate.py:506
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr "Ανάγνωση από το ημερολόγιο (%s)"
+
+# Αδυναμία να καθοριστεί έκδοση
+#: calculate.py:512
+msgid "Unable to determine version"
+msgstr "Αδυναμία καθορισμού της έκδοσης"
+
+#: calculate.py:517
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr "Ανάγνωση καταχώρησης ημερολογίου (έκδοση %s)"
+
+#: calculate.py:522
+#, python-format
+#, fuzzy
+msgid "State line invalid (%s)"
+msgstr "Μή αποδεκτή γραμμή οριοθέτησης"
+
+#: calculate.py:539
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr "Αδυναμία ανάγνωσης καταχώρησης ημερολογίου, άγνωστη έκδοση (%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "button_pressed(): μη αποδεκτός τύπος"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "επίπεδο: %d, μετ. %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "Σφάλμα στο %d"
+
+#: eqnparser.py:234
+msgid "help_var"
+msgstr "βοηθ_μεταβλητή"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "Η συνάρτηση '%s' δεν είναι καθορισμένη"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "Εσφαλμένος αριθμός παραμέτρων (%d αντί %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "η συνάρτηση δέχεται %d παραμέτρους"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "Αδυναμία ανάλυσης παραμέτρου %d: '%s'"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "Σφάλμα συνάρτησης: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "Η μεταβλητή '%s' δεν εχει καθοριστεί"
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "Σφάλμα ανάλυσης (δεξιά παρένθεση)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "Μη αναμενόμενη δεξιά παρένθεση"
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "Σφάλμα ανάλυσης (δεξιά παρένθεση, δεν υπάρχει αριστερή_τιμή)"
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr "Μη αναμενόμενος αριθμός"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "Μη αναμενόμενος τελεστής"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "Μη αποδεκτός τελεστής"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "Αναμενόταν τελεστής"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr "_parse(): επιστρέφει Κενό"
+
+#. These are the help topics and should explain how things work
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr "βοηθ_τοξσυν"
+
+#: eqnparserhelp.py:38
+msgid "help_asin"
+msgstr "βοηθ_τοξημ"
+
+#: eqnparserhelp.py:39
+msgid "help_cos"
+msgstr "βοηθ_συν"
+
+#: eqnparserhelp.py:40
+msgid "help_exp"
+msgstr "βοηθ_εκθ"
+
+#: eqnparserhelp.py:41
+msgid "help_functions"
+msgstr "βοηθ_συναρτήσεις"
+
+#: eqnparserhelp.py:42
+msgid "help_operators"
+msgstr "βοηθ_τελεστές"
+
+#: eqnparserhelp.py:43
+msgid "help_plot"
+msgstr "βοηθ_σχέδιο"
+
+#: eqnparserhelp.py:44
+msgid "help_sin"
+msgstr "βοηθ_ημ"
+
+#: eqnparserhelp.py:45
+msgid "help_sqrt"
+msgstr "βοηθ_ρίζα"
+
+#: eqnparserhelp.py:46
+msgid "help_test"
+msgstr "βοηθ_δοκιμή"
+
+#: eqnparserhelp.py:47
+msgid "help_variables"
+msgstr "βοηθ_μεταβλητές"
+
+#: eqnparserhelp.py:58
+msgid "help_usage"
+msgstr "βοηθ_χρήση"
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr "Θέματα"
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+"Δεν υπάρχει βοήθεια για το(ν) / τη(ν) '%s', χρησιμοποίησε "
+"βοήθεια(περιεχόμενα) για τα περιεχόμενα"
+
+#: layout.py:60
+msgid "Edit"
+msgstr "Επεξεργασία"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "Άλγεβρα"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "Τριγωνομετρία"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "Δυαδικό"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "Σταθερές"
+
+#: layout.py:65
+msgid "Format"
+msgstr "Μορφή"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "Ετικέτα:"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "Όλες οι εξισώσεις"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "Οι εξισώσεις μου"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "Εμφάνιση ιστορικού"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "Εμφάνιση μεταβλητών"
+
+#. The separator to mark thousands (default: ',')
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr "διαχ_χιλιάδων"
+
+#. The separator to mark fractions (default: '.')
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr "υποδιαστολή"
+
+#. The multiplication symbol (default: '*')
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr "συμβ_πολλ/σμού"
+
+# Σύμβολο διαίρεσης (προκαθορισμένο: '/')
+#. The division symbol (default: '/')
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr "συμβ_διαίρεσης"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr "Λάθος ανάλυσης"
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+"Δοκίμασε βοήθεια(δοκιμή) για βοήθεια σχετικά με το 'δοκιμή', ή "
+"βοήθεια(περιεχόμενα) για τα περιεχόμενα."
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr "Μη αναμενόμενη αριστερή παρένθεση"
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr "Σφάλμα ανάλυσης (δεξιά παρένθεση, δεν υπάρχει επίπεδο για να κλείσει)"
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr "Σφάλμα ανάλυσης: περίμενα αριθμό ή μεταβλητή"
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr "Περίμενα αριθμό ή μεταβλητή"
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr "τοξσυν"
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+"τοξσυν(x), επιστρέφει το τόξο του συνημιτόνου του x. Αυτή είναι η γωνία για "
+"την οποία το συνημίτονο είναι x. Ορίζεται στο -1 <= x < 1"
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "και"
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+"και(x, y), λογικό και. Επιστρέφει Αληθής αν x και y είναι Αληθή, διαφορετικά "
+"επιστρέφει Ψευδής"
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr "τοξημ"
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+"τοξημ(x), επιστρέφει το τόξο του ημιτόνου του x. Αυτή είναι η γωνία για την "
+"οποία το ημίτονο είναι x. Ορίζεται στο -1 <= x < 1"
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr "τοξεφ"
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+"τοξεφ(x), επιστρέφει το τόξο της εφαπτόμενης του x. Αυτή είναι η γωνία για "
+"την οποία η εφαπτόμενη είναι x. Ορίζεται για κάθε x"
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr "συν"
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+"συν(x), επιστρέφει το συνημίτονο του x. Αυτή είναι η οριζόντια συντεταγμένη "
+"του τριγωνομετρικού κύκλου της γωνίας x"
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr "συνυ"
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+"συνυ(x), επιστρέφει το υπερβολικό συνημίτονο του x. Δίνεται από τον τύπο "
+"(εκθ(x) + εκθ(-x)) / 2"
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr "εκθ"
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+"εκθ(x), επιστρέφει τη δύναμη x του νεπέριου αριθμού e. Δίνεται από τον τύπο "
+"e^x"
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr "παρ"
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+"παρ(x), επιστρέφει το παραγοντικού του x. Δίνεται από τον τύπο x * (x - 1) "
+"* (x - 2) * ... * 1"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr "συναρτήσεις"
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+"συναρτήσεις(), επιστρέφει τη λίστα όλων των συναρτήσεων που έχουν οριστεί"
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr "λογ"
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+"λογ(x), επιστρέφει το φυσικό λογάριθμο του x. Αυτή είναι η τιμή όπου η "
+"δύναμη exp() είναι ίση με x. Ορίζεται για x >= 0"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr "τελεστές"
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr "τελεστές(), επιστρέφει μια λίστα από τους τελεστές που έχουν οριστεί"
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr "μεταβλητές"
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr "μεταβλητές(), επιστροφή λίστας μεταβλητών που είναι ήδη καθορισμένες"
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr "ευρετήριο"
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "Ακαθόριστο"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "Σφάλμα: μη υποστηριζόμενος τύπος"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "Βοήθεια"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "Αντιγραφή"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "Επικόλληση"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "Αποκοπή"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/fa.po b/po/fa.po
new file mode 100644
index 0000000..95a2cfc
--- /dev/null
+++ b/po/fa.po
@@ -0,0 +1,658 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr ""
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr ""
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr ""
+
+#: calculate.py:538
+#, python-format
+msgid "State line invalid (%s)"
+msgstr ""
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr ""
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr ""
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr ""
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr ""
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr ""
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr ""
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr ""
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr ""
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr ""
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr ""
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr ""
+
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/fa_AF.po b/po/fa_AF.po
new file mode 100644
index 0000000..cea675a
--- /dev/null
+++ b/po/fa_AF.po
@@ -0,0 +1,688 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-02-06 05:49-0500\n"
+"Last-Translator: Sohaib Obaidi <ebtihaj_obaidi@yahoo.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "محاسبه"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "معادله. تجزيه() رشته نادرست (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "عملیات در دسترس:"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "نوشتن به یادداشت (%s)"
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr "خواندن از یادداشت (%s)"
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr "در تعین نمودن نگارش ناتوان هست"
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr "در حال خواندن ثبت روزنامه (نگارش %s)"
+
+#: calculate.py:538
+#, python-format
+msgid "State line invalid (%s)"
+msgstr "خط وضعیت نامعتبر (%s)"
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr "در خواندن ثبت روزنامه ناتوان هست، نگارش نامعلوم (%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "دکمه_فشارداده شده(): نوعیت نامعتبر"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "مرحله: %d از %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "خطا در %d"
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr "کمک_متغیر"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "عملکرد '%s' نامعین"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "شماره نامعتبر استدلال ها (%d در عوض %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "عملکرد %d استدلال میگیرد"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "برای تجزیه استدلال %d ناتوان هست: '%s'"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "خطای عملکرد: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "متغیر '%s' نامعين"
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "خطای تجزیه (قوسهای راست)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "قوسهای راست غیر منتظره"
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "خطای تجزیه (قوسهای راست، هیچ مقدار چپ نه)"
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr "شماره غیر منتظره"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "عملگرغیر منتظره"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "عملگر نامعتبر"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "عملگر مورد انتظار"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr "_تجزئیه(): بازگشت هیچ"
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr "کمک_کوساین قوسی"
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr "کمک_و"
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr "کمک_ساین قوسی"
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr "کمک_تانجانت قوسی"
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr "کمک_کوساین"
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr "کمک_کوساین هایپربولی"
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr "کمک_توان"
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr "کمک_فکتوریل"
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr "کمک_عملیات"
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr "کمک_لوگاریتم طبیعی"
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr "کمک_عملگرها"
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr "کمک_یا"
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr "کمک_نقشه"
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr "کمک_ساین"
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr "کمک_ساین هایپربولی"
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr "کمک_جذرالمربع"
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr "کمک_توان مربع"
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr "کمک_تانجانت"
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr "کمک_تانجانت هایپربولی"
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr "کمک_امتحان"
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr "کمک_متغیرات"
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr "کمک_xor"
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr "کمک_استعمال"
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr "عناوین"
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+"در مورد متغیر '%s' هیچ کمکی وجود ندارد، از شاخص برای رهنمایی(شاخص) استفاده "
+"کنید"
+
+#: layout.py:60
+msgid "Edit"
+msgstr "ویرایش"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "الجبر"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "مثلثات"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "حساب بولی"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "مستقل ها"
+
+#: layout.py:65
+msgid "Format"
+msgstr "قالب"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "مطلب:"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "همه معادله ها"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "معادله های من"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "تاریخچه را نشان بده"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "متغیرات را نشان بده"
+
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr "هزار_sep"
+
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr "کسر_sep"
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr "نماد ضرب"
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr "نماد تقسیم"
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "نامعین"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "خطا: نوعیت ناپشتیبانی شده"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "کمک"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "نقل بگیر"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "بچسپان"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "برش کن"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "مربع"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "جذرالمربع"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr "e به توان x"
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr "لوگاریتم طبیعی"
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr "فکتوریل"
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "ساین"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "کوساین"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "تانجانت"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr "ساین قوسی"
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr "کوساین قوسی"
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr "تانجانت قوسی"
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr "ساین هایپربولی"
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr "کوساین هایپربولی"
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr "تانجانت هایپربولی"
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr "منطقی و"
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr "منطقی یا"
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr "منطقی xor"
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "مساوی است"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "مساوی نیست"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "پای"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "e"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "درجه"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "رادیان"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr "خطای تجزئیه"
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+"برای کمک درمورد 'امتحان' از کمک(امتحان) استفاده کنید، یا از کمک(شاخص) برای "
+"شاخص"
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr "قوس چپ غیر منتظره"
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr "خطای تجزئیه (قوس راست، هیچ سطحی برای بندش وجود ندارد)"
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr "خطای تجزئیه: شماره یا متغیر غیر منتظره"
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr "شماره یا متغیر مورد انتظار"
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr "کوساین قوسی"
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+"کوساین قوسی (x)، کوساین قوسی x را برگردان. این زاویه ایست که کوساین آن x "
+"است. تعریف شده برای x خورد باشد از -1 <= x < 1"
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "و"
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr "و(x,y)، منطقی و. درست میشود اگر x و y درست باشند، علاوه ازین غلط میشود"
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr "ساین قوسی"
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+"ساین قوسی(x)، ساین قوسی x را برگردان. این زاویه ایست که ساین برای آن x است. "
+"تعریف شده طوریکه -1 <= x <= 1"
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr "تانجانت قوسی"
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+"تانجانت قوسی(x)، تانجانت قوسی x را برگردان. این زاویه ایست که تانجانت برای "
+"آن x است. تعریف شده برای همه xها"
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr "کوساین"
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+"کوساین(x)، کوساین قوسی x را برگردان. این کواردانت x بر روی دایره واحد در "
+"زاویه x است"
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr "کوساین هایپربولی"
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+"کوساین هایپربولی(x)، کوساین هایپربولی x را برگردان. داده برای exp(x) + "
+"exp(-x)) / 2)"
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr "توان"
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr "توان (x)، توان طبیعی x را برگردان. داده شده به e به توان x"
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr "فکتوریل"
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+"فکتوریل(x)، فکتوریل x را برگردان. داده شده برای x * (x - 1) * (x - 2) * ..."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr "توابع"
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr "توابع()، یک لستی از همه توابع تعریف شده را بازگردان"
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr "لوگاریتم طبیعی"
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+"لوگاریتم طبیعی(x)، لوگاریتم طبیعی x را برگردان. این مقداریست که برای آن توان "
+"exp() مساویست به x. تعریف شده برای x >= 0."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr "عملگرها"
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr "عملگرها()، یک لستی از همه عملگرهای تعریف شده را بازگردان"
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr "یا"
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+"یا(x, y)، منطقی ی. بازمیگرداند اگر x و/یا درست باشند، علاوه ازین غلط میباشد"
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr "طرح"
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+"طرح(eqn, var=-a..b)، معادله 'eqn' را طرح کن با متغیر 'var' در ميدان حدود "
+"تغييرات a تا b"
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr "ساین"
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr "ساین(x)، ساین x را برگردان. این کواردانت y در دایره واحد بر زاویه x است"
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr "ساین هایپربولی"
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+"sinh(x)، ساین هایپربولی x را برگردان. داده شده برای (exp(x) - exp(-x)) / 2"
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr "جذرالمربع"
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+"جذرالمربع(x)، جذرالمربع x را برگردان. این مقداریست که مربع آن مساویت به x. "
+"تعریف شده برای x >= 0."
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr "مربع"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr "مربع(x)، مربع x را برگردان. دادا شده برای x * x"
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr "تانجانت"
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+"تانجانت(x)، تانجانت x را برگردان. این میل یک خط از مبداء واحد دایره تا نقطه "
+"بر واحد دایره تعریف شده برای زاویه x است. داده شده ساین(x) / کوساین(x)"
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr "تانجانت هایپربولی"
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+"tanh(x)، تانجانت هایپربولی x را برگردان. داده شده برای داده شده sinh(x) / "
+"cosh(x)"
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr "امتحان"
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr "این صرف یک عنوان امتحان است، برای شاخص از کمک(شاخص) استفاده کنید"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr "متغییرات"
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+"متغییرات()، یک لستی از متغییراتی که در همین حال تعریف شده اند را برگردان"
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr "ياى ضمنى"
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+"xor(x, y)، منطقی xor. درست میگردد اگر x درست باشد (وy غلط) ویا هم y درست "
+"باشد(و x غلط)، علاو براین غلط میگردد"
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr "شاخص"
+
+#: toolbars.py:113
+#, fuzzy
+msgid "x to the power y"
+msgstr "x به توان y"
diff --git a/po/ff.po b/po/ff.po
new file mode 100644
index 0000000..de80cee
--- /dev/null
+++ b/po/ff.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/gu.po b/po/gu.po
new file mode 100644
index 0000000..8e4c710
--- /dev/null
+++ b/po/gu.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
diff --git a/po/ht.po b/po/ht.po
new file mode 100644
index 0000000..a6e2bb8
--- /dev/null
+++ b/po/ht.po
@@ -0,0 +1,529 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-12 00:30-0500\n"
+"PO-Revision-Date: 2008-03-10 10:04-0400\n"
+"Last-Translator: masterches <chesmaster@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Kalkile"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "Equation.parse() cèn sa pa bon ditou (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "Fonksyon ki disponib, ou kapab itilize :"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "Ekri li nan jounal an (%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "button_pressed(): tip bouton, fonksyon sa a pa bon"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:107
+msgid "Inverse"
+msgstr ""
+
+#: toolbars.py:113
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:121
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:127
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:143
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:157
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:171
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:183
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:193
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:196
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:203
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:206
+msgid "e"
+msgstr ""
+
+#: toolbars.py:213
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:214
+msgid "Radians"
+msgstr ""
diff --git a/po/it.po b/po/it.po
new file mode 100644
index 0000000..db3d18e
--- /dev/null
+++ b/po/it.po
@@ -0,0 +1,533 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-02-18 11:15-0500\n"
+"Last-Translator: Carlo Falciola <cfalciola@yahoo.it>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Calcola"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "Equation.parse() stringa non valida (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "Funzioni disponibili:"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "Scrittura nel diario (%s) "
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "button_pressed(): tipo non valido"
+
+#: eqnparser.py:33
+#, fuzzy
+msgid "Parse error"
+msgstr "Errore di compilazione"
+
+#: eqnparser.py:58
+#, python-format
+#, fuzzy
+msgid "level: %d, ofs %d"
+msgstr "livello: %d, ofs %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "Errore a %d"
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr "Usa help(test) per aiuto su 'test', oppure help(index) per l'indice"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "Funzione '%s' non definita"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "Errato numero di parametri (%d invece di %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "la funzione vuole %d parametri"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "Impossibile interpretare il %d parametro: '%s'"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "Errore della funzione: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "La variabile '%s' indefinita"
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr "Parentesi aperta inattesa"
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "Errore di interpretazione (parentesi destra)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "Parentesi chiusa inattesa"
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "Errore di interpretazione (parentesi chiusa, left_val assente)"
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr "acos"
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+"acos(x), ritorna l'arcoseno di x. Che è l'angolo per cui il coseno vale x. "
+"Definito per -1 <= x < 1"
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "and"
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr "asin"
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr "atan"
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr "cos"
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr "cosh"
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr "exp"
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+#, fuzzy
+msgid "fac"
+msgstr "fac"
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr "funzioni"
+
+#: eqnparserhelp.py:69
+#, fuzzy
+msgid "functions(), return a list of all the functions that are defined"
+msgstr "funzioni(), ritorna una lista di tutte le funzioni che sono definite"
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr "ln"
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr "or"
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr "plot"
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr "sin"
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr "sinh"
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr "sqrt"
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr "tan"
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr "tanh"
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr "test"
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr "Questo è solo un valore di test, utilizzare help(index) per l'indice"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr "xor"
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "Algebra"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "Trigonometria"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "Booleano"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "Costanti"
+
+#: layout.py:65
+msgid "Format"
+msgstr "Formato"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "Etichetta:"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "Tutte le equazioni"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "Le mie equazioni"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "Mostra storico"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "Mostra variabili"
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+#, fuzzy
+msgid "mul_sym"
+msgstr "mul_sym"
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "Indefinito"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "Errore: tipo non supportato"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "Aiuto"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "Copia"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "Incolla"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "Taglia"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "Quadrato"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "Radice quadrata"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr "e elevato alla x potenza"
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr "x elevato alla y potenza"
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr "Logaritmo naturale"
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr "Fattoriale"
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "Seno"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "Coseno"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "Tangente"
+
+#: toolbars.py:145
+#, fuzzy
+msgid "Arc sine"
+msgstr "Arcoseno"
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr "Arcotangente"
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr "Seno iperbolico "
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr "Coseno iperbolico"
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr "Tangente iperbolica"
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr "and logico"
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr "or logico"
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "Uguale"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "Diverso"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "Pi"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "e"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "Gradi"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "Radianti"
diff --git a/po/ja.po b/po/ja.po
new file mode 100644
index 0000000..510f9da
--- /dev/null
+++ b/po/ja.po
@@ -0,0 +1,753 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-01-04 19:04+0000\n"
+"Last-Translator: Taizo Shiozaki <taizo@shiozaki.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+#, fuzzy
+msgid "Calculate"
+msgstr "電卓"
+
+#: calculate.py:80
+#, python-format
+#, fuzzy
+msgid "Equation.parse() string invalid (%s)"
+msgstr "Equation.parse() の文字列が無効です(%s)"
+
+#: calculate.py:210
+#, fuzzy
+msgid "Available functions:"
+msgstr "利用可能な関数:"
+
+#: calculate.py:504
+#, python-format
+#, fuzzy
+msgid "Writing to journal (%s)"
+msgstr "ジャーナルへ保存中(%s)"
+
+#: calculate.py:522
+#, python-format
+#, fuzzy
+msgid "Reading from journal (%s)"
+msgstr "ジャーナルから読み込み中(%s)"
+
+#: calculate.py:528
+#, fuzzy
+msgid "Unable to determine version"
+msgstr "バージョンが識別できません"
+
+#: calculate.py:533
+#, python-format
+#, fuzzy
+msgid "Reading journal entry (version %s)"
+msgstr "ジャーナルのエントリを読み込み中(version %s)"
+
+#: calculate.py:538
+#, python-format
+#, fuzzy
+msgid "State line invalid (%s)"
+msgstr "入力行の内容が不適切です(%s)"
+
+#: calculate.py:555
+#, python-format
+#, fuzzy
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr "ジャーナル上のエントリが読み込めません。不明のバージョンです(%s)"
+
+#: calculate.py:788
+#, fuzzy
+msgid "button_pressed(): invalid type"
+msgstr "button_pressed(): 無効のタイプです"
+
+#: eqnparser.py:58
+#, python-format
+#, fuzzy
+msgid "level: %d, ofs %d"
+msgstr "レベル: %d、 ofs %d"
+
+#: eqnparser.py:117
+#, python-format
+#, fuzzy
+msgid "Error at %d"
+msgstr "%dでエラーがあります"
+
+#: eqnparser.py:235
+#, fuzzy
+msgid "help_var"
+msgstr "help_var"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+#, fuzzy
+msgid "Function '%s' not defined"
+msgstr "関数'%s'が未定義です"
+
+#: eqnparser.py:359
+#, python-format
+#, fuzzy
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "引数の数が違います(正解は%dで間違いは%d)"
+
+#: eqnparser.py:360
+#, python-format
+#, fuzzy
+msgid "function takes %d args"
+msgstr "この関数は%d個の引数まで対応します"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+#, fuzzy
+msgid "Unable to parse argument %d: '%s'"
+msgstr "%d引数がパースできません: '%s'"
+
+#: eqnparser.py:380
+#, python-format
+#, fuzzy
+msgid "Function error: %s"
+msgstr "関数エラー: %s"
+
+#: eqnparser.py:481
+#, python-format
+#, fuzzy
+msgid "Variable '%s' not defined"
+msgstr "変数 '%s' が未定義です"
+
+#: eqnparser.py:516
+#, fuzzy
+msgid "Parse error (right parenthesis)"
+msgstr "パースエラー(右の丸括弧)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+#, fuzzy
+msgid "Right parenthesis unexpected"
+msgstr "右の丸括弧に対応できません"
+
+#: eqnparser.py:527
+#, fuzzy
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "パースエラー(右の丸括弧、left_valなし)"
+
+#: eqnparser.py:541 eqnparser.py:542
+#, fuzzy
+msgid "Number not expected"
+msgstr "数値に対応できません"
+
+#: eqnparser.py:550
+#, fuzzy
+msgid "Operator not expected"
+msgstr "演算子に対応できません"
+
+#: eqnparser.py:596
+#, fuzzy
+msgid "Invalid operator"
+msgstr "無効な演算子です"
+
+#: eqnparser.py:603
+#, fuzzy
+msgid "Operator expected"
+msgstr "演算子が必要です"
+
+#: eqnparser.py:616
+#, fuzzy
+msgid "_parse(): returning None"
+msgstr "_parse(): 返す値がありません"
+
+#: eqnparserhelp.py:37
+#, fuzzy
+msgid "help_acos"
+msgstr "help_acos"
+
+#: eqnparserhelp.py:38
+#, fuzzy
+msgid "help_and"
+msgstr "help_and"
+
+#: eqnparserhelp.py:39
+#, fuzzy
+msgid "help_asin"
+msgstr "help_asin"
+
+#: eqnparserhelp.py:40
+#, fuzzy
+msgid "help_atan"
+msgstr "help_atan"
+
+#: eqnparserhelp.py:41
+#, fuzzy
+msgid "help_cos"
+msgstr "help_cos"
+
+#: eqnparserhelp.py:42
+#, fuzzy
+msgid "help_cosh"
+msgstr "help_cosh"
+
+#: eqnparserhelp.py:43
+#, fuzzy
+msgid "help_exp"
+msgstr "help_exp"
+
+#: eqnparserhelp.py:44
+#, fuzzy
+msgid "help_fac"
+msgstr "help_fac"
+
+#: eqnparserhelp.py:45
+#, fuzzy
+msgid "help_functions"
+msgstr "help_functions"
+
+#: eqnparserhelp.py:46
+#, fuzzy
+msgid "help_ln"
+msgstr "help_ln"
+
+#: eqnparserhelp.py:47
+#, fuzzy
+msgid "help_operators"
+msgstr "help_operators"
+
+#: eqnparserhelp.py:48
+#, fuzzy
+msgid "help_or"
+msgstr "help_or"
+
+#: eqnparserhelp.py:49
+#, fuzzy
+msgid "help_plot"
+msgstr "help_plot"
+
+#: eqnparserhelp.py:50
+#, fuzzy
+msgid "help_sin"
+msgstr "help_sin"
+
+#: eqnparserhelp.py:51
+#, fuzzy
+msgid "help_sinh"
+msgstr "help_sinh"
+
+#: eqnparserhelp.py:52
+#, fuzzy
+msgid "help_sqrt"
+msgstr "help_sqrt"
+
+#: eqnparserhelp.py:53
+#, fuzzy
+msgid "help_square"
+msgstr "help_square"
+
+#: eqnparserhelp.py:54
+#, fuzzy
+msgid "help_tan"
+msgstr "help_tan"
+
+#: eqnparserhelp.py:55
+#, fuzzy
+msgid "help_tanh"
+msgstr "help_tanh"
+
+#: eqnparserhelp.py:56
+#, fuzzy
+msgid "help_test"
+msgstr "help_test"
+
+#: eqnparserhelp.py:57
+#, fuzzy
+msgid "help_variables"
+msgstr "help_variables"
+
+#: eqnparserhelp.py:58
+#, fuzzy
+msgid "help_xor"
+msgstr "help_xor"
+
+#: eqnparserhelp.py:69
+#, fuzzy
+msgid "help_usage"
+msgstr "help_usage"
+
+#: eqnparserhelp.py:132
+#, fuzzy
+msgid "Topics"
+msgstr "トピック"
+
+#: eqnparserhelp.py:143
+#, python-format
+#, fuzzy
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr "'%s' に関するヘルプ情報はありません。ヘルプ(索引)を確認してください"
+
+#: layout.py:60
+#, fuzzy
+msgid "Edit"
+msgstr "編集"
+
+#: layout.py:61
+#, fuzzy
+msgid "Algebra"
+msgstr "代数学"
+
+#: layout.py:62
+#, fuzzy
+msgid "Trigonometry"
+msgstr "三角法"
+
+#: layout.py:63
+#, fuzzy
+msgid "Boolean"
+msgstr "ブーリアン"
+
+#: layout.py:64
+#, fuzzy
+msgid "Constants"
+msgstr "定数"
+
+#: layout.py:65
+#, fuzzy
+msgid "Format"
+msgstr "書式"
+
+#: layout.py:86
+#, fuzzy
+msgid "Label:"
+msgstr "ラベル:"
+
+#: layout.py:118
+#, fuzzy
+msgid "All equations"
+msgstr "すべての式"
+
+#: layout.py:118
+#, fuzzy
+msgid "My equations"
+msgstr "私の式"
+
+#: layout.py:120
+#, fuzzy
+msgid "Show history"
+msgstr "履歴の表示"
+
+#: layout.py:120
+#, fuzzy
+msgid "Show variables"
+msgstr "変数の表示"
+
+#: mathlib.py:58
+#, fuzzy
+msgid "thousand_sep"
+msgstr "thousand_sep"
+
+#: mathlib.py:63
+#, fuzzy
+msgid "fraction_sep"
+msgstr "fraction_sep"
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+#, fuzzy
+msgid "mul_sym"
+msgstr "mul_sym"
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+#, fuzzy
+msgid "div_sym"
+msgstr "div_sym"
+
+#: mathlib.py:132
+#, fuzzy
+msgid "Undefined"
+msgstr "未定義"
+
+#: mathlib.py:142
+#, fuzzy
+msgid "Error: unsupported type"
+msgstr "エラー: 不明なタイプです"
+
+#: toolbars.py:36
+#, fuzzy
+msgid "Help"
+msgstr "ヘルプ"
+
+#: toolbars.py:86
+#, fuzzy
+msgid "Copy"
+msgstr "コピー"
+
+#: toolbars.py:89
+#, fuzzy
+msgid "Paste"
+msgstr "ペースト"
+
+#: toolbars.py:92
+#, fuzzy
+msgid "Cut"
+msgstr "カット"
+
+#: toolbars.py:99
+#, fuzzy
+msgid "Square"
+msgstr "二乗"
+
+#: toolbars.py:103
+#, fuzzy
+msgid "Square root"
+msgstr "平方根"
+
+#: toolbars.py:109
+#, fuzzy
+msgid "e to the power x"
+msgstr "eのx乗"
+
+#: toolbars.py:117
+#, fuzzy
+msgid "Natural logarithm"
+msgstr "自然対数"
+
+#: toolbars.py:123
+#, fuzzy
+msgid "Factorial"
+msgstr "階乗"
+
+#: toolbars.py:131
+#, fuzzy
+msgid "Sine"
+msgstr "正弦(sin)"
+
+#: toolbars.py:135
+#, fuzzy
+msgid "Cosine"
+msgstr "余弦(cos)"
+
+#: toolbars.py:139
+#, fuzzy
+msgid "Tangent"
+msgstr "正接(tan)"
+
+#: toolbars.py:145
+#, fuzzy
+msgid "Arc sine"
+msgstr "逆正弦(arcsin)"
+
+#: toolbars.py:149
+#, fuzzy
+msgid "Arc cosine"
+msgstr "逆余弦(arccos)"
+
+#: toolbars.py:153
+#, fuzzy
+msgid "Arc tangent"
+msgstr "逆正接(arctan)"
+
+#: toolbars.py:159
+#, fuzzy
+msgid "Hyperbolic sine"
+msgstr "双曲正弦(sinh)"
+
+#: toolbars.py:163
+#, fuzzy
+msgid "Hyperbolic cosine"
+msgstr "双曲余弦(cosh)"
+
+#: toolbars.py:167
+#, fuzzy
+msgid "Hyperbolic tangent"
+msgstr "双曲正接(tanh)"
+
+#: toolbars.py:175
+#, fuzzy
+msgid "Logical and"
+msgstr "論理積(AND)"
+
+#: toolbars.py:179
+#, fuzzy
+msgid "Logical or"
+msgstr "論理和(OR)"
+
+#: toolbars.py:174
+#, fuzzy
+msgid "Logical xor"
+msgstr "排他的論理和(XOR)"
+
+#: toolbars.py:189
+#, fuzzy
+msgid "Equals"
+msgstr "等号"
+
+#: toolbars.py:192
+#, fuzzy
+msgid "Not equals"
+msgstr "不等号"
+
+#: toolbars.py:199
+#, fuzzy
+msgid "Pi"
+msgstr "π(円周率)"
+
+#: toolbars.py:202
+#, fuzzy
+msgid "e"
+msgstr "e(オイラー数)"
+
+#: toolbars.py:209
+#, fuzzy
+msgid "Degrees"
+msgstr "角度"
+
+#: toolbars.py:210
+#, fuzzy
+msgid "Radians"
+msgstr "ラジアン"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/km.po b/po/km.po
new file mode 100644
index 0000000..1e48fc3
--- /dev/null
+++ b/po/km.po
@@ -0,0 +1,530 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-12 00:30-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:107
+msgid "Inverse"
+msgstr ""
+
+#: toolbars.py:113
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:121
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:127
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:143
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:157
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:171
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:183
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:193
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:196
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:203
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:206
+msgid "e"
+msgstr ""
+
+#: toolbars.py:213
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:214
+msgid "Radians"
+msgstr ""
diff --git a/po/ko.po b/po/ko.po
new file mode 100644
index 0000000..de80cee
--- /dev/null
+++ b/po/ko.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/mk.po b/po/mk.po
new file mode 100644
index 0000000..7343f2c
--- /dev/null
+++ b/po/mk.po
@@ -0,0 +1,666 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2007-12-17 19:28+0000\n"
+"Last-Translator: Misa Popovik <popmisa@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"Plural-Forms: nplurals=3; plural=n==1 || n%10==1 ? 0 : 1;\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Пресметај"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "Достапни функции:"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "Запишувам во дневник (%s)"
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr "Читање од дневник (%s)"
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr "Невозможно да се одреди верзијата"
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr "Читање запис од дневникот (верзија %s)"
+
+#: calculate.py:538
+#, python-format
+#, fuzzy
+msgid "State line invalid (%s)"
+msgstr "Статусната линија е невалидна (%s)"
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr "Не е возможно да се прочита запис од дневникот, непозната верзија (%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "button_pressed(): невалиден тип"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "ниво: %d, ofs %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "Грешка на %d"
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr "help_var"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "Функцијата '%s' не е дефинирана"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "Невалиден број на аргументи (%d наместо %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "Функцијата прима %d аргументи"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "Неуспешно парсирање на аргументот %d: '%s'"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "Грешка во функцијата: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "Променливата '%s' не е дефинирана"
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "Грешка при анализирање (десна заграда)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "Десната заграда е неочекувана"
+
+# left_val е аргументот веројатно
+#: eqnparser.py:527
+#, fuzzy
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "Грешка при анализирање (десна заграда, нема left_val)"
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr "Неочекуван број"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "Неочекуван оператор"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "Невалиден оператор"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "Недостасува оператор"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr "_parse(): враќа None"
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr "help_acos"
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr "help_and"
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr "help_asin"
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr "help_atan"
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr "help_cos"
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr "help_cosh"
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr "help_exp"
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr "help_fac"
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr "help_functions"
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr "help_ln"
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr "help_operators"
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr "help_or"
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr "help_plot"
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr "help_sin"
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr "help_sinh"
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr "help_sqrt"
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr "help_square"
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr "help_tan"
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr "help_tanh"
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr "help_test"
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr "help_variables"
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr "help_xor"
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr "help_usage"
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr "Наслови"
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr "Нема достапна помош за '%s', користи help(index) за индексот"
+
+#: layout.py:60
+msgid "Edit"
+msgstr "Уреди"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "Алгебра"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "Тригонометрија"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "Логичка променлива"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "Константи"
+
+#: layout.py:65
+msgid "Format"
+msgstr "Формат"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "Натпис"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "Сите равенки"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "Моите равенки"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "Прикажи историја"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "Прикажи променливи"
+
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr "thousand_sep"
+
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr "fraction_sep"
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr "mul_sym"
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr "div_sym"
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "Недефинирано"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "Грешка: типот не е поддржан"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "Помош"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "Копирај"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "Вметни"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "Сечи"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "Квадрат"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "Квадратен корен"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr "е на степен x"
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr "Природен логаритам"
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr "Факториел"
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "Синус"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "Косинус"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "Тангента"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr "Хиперболичен синус"
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr "Хиперболичен косинус"
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr "Хиперболична тангента"
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr "Логичко И"
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr "Логичко ИЛИ"
+
+# Ова му доаѓа од логичко иксор што значи екслузивно или.
+# http://en.wikipedia.org/wiki/Exclusive_or
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr "Логичко ХИЛИ"
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "Еднакво"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "Не е еднакво"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "Pi"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "e"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "Степени"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "Радиани"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:504
+#, fuzzy
+msgid "Left parenthesis unexpected"
+msgstr "Десната заграда е неочекувана"
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+#, fuzzy
+msgid "square"
+msgstr "Квадрат"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: toolbars.py:113
+#, fuzzy
+msgid "x to the power y"
+msgstr "е на степен x"
diff --git a/po/ml.po b/po/ml.po
new file mode 100644
index 0000000..95a2cfc
--- /dev/null
+++ b/po/ml.po
@@ -0,0 +1,658 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr ""
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr ""
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr ""
+
+#: calculate.py:538
+#, python-format
+msgid "State line invalid (%s)"
+msgstr ""
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr ""
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr ""
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr ""
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr ""
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr ""
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr ""
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr ""
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr ""
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr ""
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr ""
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr ""
+
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/mn.po b/po/mn.po
new file mode 100644
index 0000000..de80cee
--- /dev/null
+++ b/po/mn.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/mr.po b/po/mr.po
new file mode 100644
index 0000000..8e4c710
--- /dev/null
+++ b/po/mr.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
diff --git a/po/pa.po b/po/pa.po
new file mode 100644
index 0000000..95a2cfc
--- /dev/null
+++ b/po/pa.po
@@ -0,0 +1,658 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:522
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr ""
+
+#: calculate.py:528
+msgid "Unable to determine version"
+msgstr ""
+
+#: calculate.py:533
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr ""
+
+#: calculate.py:538
+#, python-format
+msgid "State line invalid (%s)"
+msgstr ""
+
+#: calculate.py:555
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:235
+msgid "help_var"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr ""
+
+#: eqnparserhelp.py:38
+msgid "help_and"
+msgstr ""
+
+#: eqnparserhelp.py:39
+msgid "help_asin"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid "help_atan"
+msgstr ""
+
+#: eqnparserhelp.py:41
+msgid "help_cos"
+msgstr ""
+
+#: eqnparserhelp.py:42
+msgid "help_cosh"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "help_exp"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid "help_fac"
+msgstr ""
+
+#: eqnparserhelp.py:45
+msgid "help_functions"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "help_ln"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid "help_operators"
+msgstr ""
+
+#: eqnparserhelp.py:48
+msgid "help_or"
+msgstr ""
+
+#: eqnparserhelp.py:49
+msgid "help_plot"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "help_sin"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid "help_sinh"
+msgstr ""
+
+#: eqnparserhelp.py:52
+msgid "help_sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:53
+msgid "help_square"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "help_tan"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid "help_tanh"
+msgstr ""
+
+#: eqnparserhelp.py:56
+msgid "help_test"
+msgstr ""
+
+#: eqnparserhelp.py:57
+msgid "help_variables"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "help_xor"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "help_usage"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#: mathlib.py:58
+msgid "thousand_sep"
+msgstr ""
+
+#: mathlib.py:63
+msgid "fraction_sep"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:174
+msgid "Logical xor"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/ps.po b/po/ps.po
new file mode 100644
index 0000000..551fbab
--- /dev/null
+++ b/po/ps.po
@@ -0,0 +1,532 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-01-23 06:25-0500\n"
+"Last-Translator: usman mansoor ansari <jalalkut@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "شمېرل"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "برابرښت، شننه() ناباوري مزی (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "شته کړنې: "
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr " (%s) ورځپاڼه کې لیکل"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "تڼۍ_ زورشوې(): ناسم ډول"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr "د شننې تېروتنل"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "کچه: %d، د %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "تېروتنه په %d کې"
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+"د مرسته په اړه (ازمویل) لپاره وکاروﺉ مرسته(ازمویل)، یا لړیال لپاره "
+"مرسته(لړیال)"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "کړنې '%s' ونه پېژندل شوې"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "د ارزښتمنیو ناسمه شمېره (%d د %d پرځای)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "کړنې %d args اخلي"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "'%d' :%s د وېش ارزښتوړى ناوړتيا"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "ناسمه کړنې: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "بدلېدونکې '%s' ونه پېژندل شوې"
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr "غېرمترقبه کیڼې غبرګلیندۍ "
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "وېشي تېروتنې (ښي غبرګلیندۍ)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+#, fuzzy
+msgid "Right parenthesis unexpected"
+msgstr "غېرمترقبه کیڼې غبرګلیندۍ "
+
+#: eqnparser.py:527
+#, fuzzy
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "وېشي تېروتنې (ښي غبرګلیندۍ، )"
+
+#: eqnparser.py:534
+#, fuzzy
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr "وېشي تېروتنې (ښي غبرګلیندۍ، )"
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr "غېر مترقبه شمېره"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "غېر مترقبه چلوونى"
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr "وېشي تېروتنې: د شمېرې يا مترقبه بدلېدونى"
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr "شمېرې يا مترقبه بدلېدونى"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "ناباوري چلوونى"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "مترقبه چلوونى"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "او"
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr "او"
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+#, fuzzy
+msgid "square"
+msgstr "څلور ګوټى"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr "لړيال"
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr "سرليكونه"
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr "اېډېټ"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "الجبر"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "مثلثات"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "بولۍ"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "ټاکلي"
+
+#: layout.py:65
+msgid "Format"
+msgstr "بڼه"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "نښکه"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "ټول برابرښتونه"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "زما برابرښتونه"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "مخینه ښکاره کول"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "بدلېدنې ښکاره کول"
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr "ضرب_اېس وای اېم"
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr "وېشل_اېس وای اې"
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "ناپېژندلې"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "تېروتنه: ناپېژندلې ډول"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "مرسته"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "لمېسل"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "سرېښل"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "سکڼل"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "څلور ګوټى"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "څلور ګوټه ریښه"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr "ساده لوګارېتم"
+
+#: toolbars.py:123
+#, fuzzy
+msgid "Factorial"
+msgstr "فکټوریل"
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "ساین"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "کوساین"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "ټانجان"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr "اې ار سي ساین"
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr "اې ار سي کوساین"
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr "اې ار سي ټانجان"
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr "هایپربولیک ساین"
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr "هایپربولیک کوساین"
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr "هایپربولیک ټانجان"
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr "منطقي او"
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr "منطقي یا"
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "برابر"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "برابر ندي"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "Pi"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "e"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "درجې"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "راډیانونه"
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100644
index 0000000..50c06ec
--- /dev/null
+++ b/po/pt_BR.po
@@ -0,0 +1,674 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-01-20 19:59+0000\n"
+"Last-Translator: Juliano Bittencourt <juliano@laptop.org>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Calcular"
+
+# Samblagem:"seqüência ordenada de caracteres (símbolos) do alfabeto de uma linguagem formal."
+# http://pt.wiktionary.org/wiki/samblagem
+# se bem que nunca ouvi ou li o termo
+#: calculate.py:80
+#, python-format
+#, fuzzy
+msgid "Equation.parse() string invalid (%s)"
+msgstr "Equação.avaliação() samblagem inválida (%)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "Funções disponíveis:"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "Escrevendo no diário (%s)"
+
+#: calculate.py:506
+#, python-format
+msgid "Reading from journal (%s)"
+msgstr "Lendo do diário (%s)"
+
+#: calculate.py:512
+msgid "Unable to determine version"
+msgstr "Incapaz de determinar versão"
+
+#: calculate.py:517
+#, python-format
+msgid "Reading journal entry (version %s)"
+msgstr "Lendo entrada do diário (versão %s)"
+
+#: calculate.py:522
+#, python-format
+msgid "State line invalid (%s)"
+msgstr "Linha de estado inválida (%s)"
+
+#: calculate.py:539
+#, python-format
+msgid "Unable to read journal entry, unknown version (%s)"
+msgstr "Incapaz de ler entrada do diário, versão desconhecida (%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "botão_pressionado(): tipo inválido"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "nível: %d, ofs %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "Erro em %d"
+
+#: eqnparser.py:234
+msgid "help_var"
+msgstr "var_ajuda"
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "Função '%s' não definida"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "Número inválido de argumentos (%d em vez de %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "função leva %d args"
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+#, fuzzy
+msgid "Unable to parse argument %d: '%s'"
+msgstr "Incapaz de avaliar argumento %d: '%s'"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "Erro de função: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "Variável '%s' não definida"
+
+#: eqnparser.py:516
+#, fuzzy
+msgid "Parse error (right parenthesis)"
+msgstr "Erro de avaliação (parêntesis direito)"
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "Parêntesis direito inesperado"
+
+#: eqnparser.py:527
+#, fuzzy
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "Erro de avaliação (parêntesis direito, nenhum val_esq)"
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr "Número não esperado"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "Operador não esperado"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "Operador inválido"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "Operador esperado"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr "_avaliar(): devolvendo Nenhum"
+
+#. These are the help topics and should explain how things work
+#: eqnparserhelp.py:37
+msgid "help_acos"
+msgstr "ajuda_acos"
+
+#: eqnparserhelp.py:38
+msgid "help_asin"
+msgstr "ajuda_asin"
+
+#: eqnparserhelp.py:39
+msgid "help_cos"
+msgstr "ajuda_cos"
+
+#: eqnparserhelp.py:40
+msgid "help_exp"
+msgstr "ajuda_exp"
+
+#: eqnparserhelp.py:41
+msgid "help_functions"
+msgstr "ajuda_funções"
+
+#: eqnparserhelp.py:42
+msgid "help_operators"
+msgstr "ajuda_operadores"
+
+#: eqnparserhelp.py:43
+msgid "help_plot"
+msgstr "ajuda_plot"
+
+#: eqnparserhelp.py:44
+msgid "help_sin"
+msgstr "ajuda_sin"
+
+#: eqnparserhelp.py:45
+msgid "help_sqrt"
+msgstr "ajuda_sqrt"
+
+#: eqnparserhelp.py:46
+msgid "help_test"
+msgstr "ajuda_teste"
+
+#: eqnparserhelp.py:47
+msgid "help_variables"
+msgstr "ajuda_variáveis"
+
+#: eqnparserhelp.py:58
+msgid "help_usage"
+msgstr "ajuda_uso"
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr "Tópicos"
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr "Não existe ajuda sobre '%s', use ajuda(índice) para ver o índice"
+
+#: layout.py:60
+msgid "Edit"
+msgstr "Editar"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "Álgebra"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "Trigonometria"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "Booleano"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "Constantes"
+
+#: layout.py:65
+msgid "Format"
+msgstr "Formato"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "Etiqueta:"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "Todas equações"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "Minhas equações"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "Mostrar histórico"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "Mostrar variáveis"
+
+#. The separator to mark thousands (default: ',')
+#: mathlib.py:58
+#, fuzzy
+msgid "thousand_sep"
+msgstr "sep_milhares"
+
+#. The separator to mark fractions (default: '.')
+#: mathlib.py:63
+#, fuzzy
+msgid "fraction_sep"
+msgstr "sep_frações"
+
+#. The multiplication symbol (default: '*')
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+#, fuzzy
+msgid "mul_sym"
+msgstr "sím_mult"
+
+#. The division symbol (default: '/')
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+#, fuzzy
+msgid "div_sym"
+msgstr "sím_div"
+
+#: eqnparser.py:33
+#, fuzzy
+msgid "Parse error"
+msgstr "Erro na avaliação"
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+"Use ajuda(teste) para obter ajuda sobre 'teste', ou ajuda(índice) para o "
+"índice"
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr "Parêntesis esquerdo inesperado"
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr "Erro de avaliação (parêntesis direito, sem nível que feche)"
+
+#: eqnparser.py:566
+#, fuzzy
+msgid "Parse error: number or variable expected"
+msgstr "Erro de avaliação: número ou variável esperados"
+
+#: eqnparser.py:567
+#, fuzzy
+msgid "Number or variable expected"
+msgstr "Número ou variável esperados"
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr "acos"
+
+# em portugal escreve-se arco co-seno. mas http://pt.wikipedia.org/wiki/Fun%C3%A7%C3%B5es_trigonom%C3%A9tricas_inversas tem deste modo.
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+"acos(x), devolve o arcocosseno de x. Este é o ângulo cujo co-seno é x. "
+"Definido para -1 <= x < 1"
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "and"
+
+# acho que fui esperto em solucionar esta :)
+#: eqnparserhelp.py:44
+#, fuzzy
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+"and(x,y), Conjunção lógica E (\"and\"). Devolve Verdadeiro (\"True\") se x e y "
+"forem verdadeiros, caso contrário devolve Falso (\"False\")"
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr "asin"
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+"asin(x), devolve o arcosseno de x. Este é o ângulo cujo seno é x. Definido "
+"para -1 <= x <= 1"
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr "atan"
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+"atan(x), devolve o arcotangente de x. Este é o ângulo cuja tangente é x. "
+"Definido para todo x"
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr "cos"
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+"cos(x), devolve o co-seno de x. Esta é a coordenada-x no círculo unitário no "
+"ângulo x"
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr "cosh"
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+"cosh(x), devolve o cosseno hiperbólico de x. Obtido por (exp(x) + exp(-x)) / "
+"2"
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr "exp"
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr "exp(x), devolve o expoente natural de x. Obtido por e^x"
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr "fac"
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr "fac(x), devolve o fatorial de x. Obtido por x * (x - 1) * (x - 2) * ..."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr "funções"
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr "funções(), devolve a lista de todas as funções que estão definidas"
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr "ln"
+
+#: eqnparserhelp.py:72
+#, fuzzy
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+"ln(x), devolve o logaritmo natural de x. Este é o valor cujo expoente exp() "
+"é igual a x. Definido para x >= 0."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr "operadores"
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr "operadores(), devolve uma lista dos operadores que estão definidos"
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr "or"
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+"or(x, y), disjunção lógica OU (\"or\"). Devolve Verdadeiro (\"True\") se x e/ou "
+"y forem verdadeiros, caso contrário devolve Falso (\"False\")"
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr "plot"
+
+#: eqnparserhelp.py:83
+#, fuzzy
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+"plot(eqn, var=-a..b), cria gráfico da equação 'eqn' com variável 'var' no "
+"intervalo entre a e b"
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr "sin"
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+"sin(x), devolve o seno de x. Esta é a coordenada-y no círculo unitário no "
+"ângulo x"
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr "sinh"
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+"sinh(x), devolve o seno hiperbólico de x. Obtido por (exp(x) - exp(-x)) / 2"
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr "sqrt"
+
+#: eqnparserhelp.py:94
+#, fuzzy
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+"sqrt(x), devolve a raiz quadrada de x. Este é o valor cujo quadrado (elevado "
+"a 2) é igual a x. Definido para x >= 0."
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr "square"
+
+#: eqnparserhelp.py:98
+#, fuzzy
+msgid "square(x), return the square of x. Given by x * x"
+msgstr "square(x), devolve o quadrado (elevado a 2) de x. Obtido por x * x"
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr "tan"
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+"tan(x), devolve a tangente de x. Esta é a inclinação da linha desde a origem "
+"do círculo unitário até ao pelo ponto no círculo unitário definido pelo "
+"ângulo x. Obtido por sin(x) / cos(x)"
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr "tanh"
+
+# erro no original, sinh(x)->tanh(x)
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+"tanh(x), devolve a tangente hiperbólica de x. Obtido por sinh(x) / cosh(x)"
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr "teste"
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+"Este é apenas um tópico de teste, utilize ajuda(índice) para obter o índice"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr "variáveis"
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+"variáveis(), devolve uma lista das variáveis que estão de momento definidas"
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr "xor"
+
+#: eqnparserhelp.py:117
+#, fuzzy
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+"xor(x, y), disjunção exclusiva XOR. Devolve Verdadeiro (\"True\") caso x for "
+"Verdadeiro e y for Falso, ou y for Verdadeiro e x for Falso. Caso contrário "
+"devolve Falso (\"False\")"
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr "índice"
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "Indefinido"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "Erro: tipo não suportado"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "Ajuda"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "Copiar"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "Colar"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "Cortar"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "Quadrado"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "Raiz Quadrada"
+
+#: toolbars.py:109
+#, fuzzy
+msgid "e to the power x"
+msgstr "e elevado a x"
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr "Logaritmo natural"
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr "Fatorial"
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "Seno"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "Cosseno"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "Tangente"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr "Arco-seno"
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr "Arco-cosseno"
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr "Arco-tangente"
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr "Seno hiperbólico"
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr "Cosseno hiperbólico"
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr "Tangente hiperbólica"
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr "Conjunção lógica E"
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr "Disjunção lógica OU"
+
+#: toolbars.py:189
+#, fuzzy
+msgid "Equals"
+msgstr "É igual a"
+
+#: toolbars.py:192
+#, fuzzy
+msgid "Not equals"
+msgstr "Não é igual a"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "Pi"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "e"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "Graus"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "Radianos"
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
diff --git a/po/si.po b/po/si.po
new file mode 100644
index 0000000..8e4c710
--- /dev/null
+++ b/po/si.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
diff --git a/po/te.po b/po/te.po
new file mode 100644
index 0000000..12b7420
--- /dev/null
+++ b/po/te.po
@@ -0,0 +1,511 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: 2008-02-11 08:15+0100\n"
+"Last-Translator: Satyanarayana Murthy Saladi <saladism@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "లెక్కపెట్టు"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr "సమీకరణ విశ్లేషణ() స్ట్రింగ్ సరైనది కాదు (%s)"
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr "లభ్యమయ్యే ధర్మములు:"
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr "పద్దులో నిక్షిప్తంచేస్తున్నా(%s)"
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr "నొక్కబడిన మీట(): సరైనది కాదు"
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr "గణన దోషం"
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr "స్థాయి: %d యొక్క %d"
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr "%d వద్ద దోషం"
+
+#: eqnparser.py:249
+#: eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr "'పరిక్ష ' గురించి సహాయానికై సహయము(పరిక్ష)ను వాడండి, లేదా 'విషయసూచిక' కై సహయము(విషయసూచిక)ను వాడండి "
+
+#: eqnparser.py:353
+#: eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr "'%s' ధర్మము నిర్దేశింపబడలేదు"
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr "అస్ఫష్ట ఆదేశాలు (%d బదులుగా %d)"
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr "%d args ను గణన లోకి తీసుకోబడింది"
+
+#: eqnparser.py:370
+#: eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr "%d: '%s ఆజ్నగుణింపబడలేదు"
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr "దోషం: %s"
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr "'%s' స్ఫష్టంగా నిర్వచింపబడలేదు"
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr "అనూహ్య ఆజ్ణలు"
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr "విశ్లేషణదోషం (కుడి బ్రాకెట్)"
+
+#: eqnparser.py:517
+#: eqnparser.py:528
+#: eqnparser.py:535
+#: eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr "కుడి బ్రాకెట్ కై ఎదురుచూడడం లేదు"
+
+# needs improving
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr "విశ్లేషణదోషం"
+
+# needs improving
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr "విశ్లేషణదోషం"
+
+#: eqnparser.py:541
+#: eqnparser.py:542
+msgid "Number not expected"
+msgstr "అంకె కై యెదురుచూడడములేదు"
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr "ఆపరేటరుకై యెదురుచూడడములేదు"
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr "విశ్లేషణదోషం: అంకె గాని లేదా వేరియబులు కై ఎదురుచూస్తున్నా"
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr "అంకె గాని లేదా వేరియబులు కై ఎదురుచూస్తున్నా"
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr "ఆపెరేటర్ సరైనది కాదు"
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr "ఆపరేటర్ కై యెదురుచూస్తున్నా"
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr "_గణన (): నిష్ఫలము"
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr "ఆకోస్"
+
+#: eqnparserhelp.py:40
+msgid "acos(x), return the arc cosine of x. This is the angle for which the cosine is x. Defined for -1 <= x < 1"
+msgstr "ఆకోస్ (x), x యొక్క ఆర్క్ కొసైన్ ను తెలుపుము. ఇది x ను కొసైను గా కలిగిఉన్న కోణము. నిర్వచనం -1 <= x < 1"
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr "మరియు"
+
+#: eqnparserhelp.py:44
+msgid "and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr "మరియు(x, y), లాజికల్ మరియు. x మరియు y లు నిజమైతే నిజమని చూపుతుంది, లేనిచో తప్పు అని చూపుతుంది"
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr "ఆసైను"
+
+#: eqnparserhelp.py:47
+msgid "asin(x), return the arc sine of x. This is the angle for which the sine is x. Defined for -1 <= x <= 1"
+msgstr "ఆసైను (x), x యొక్క ఆర్క్ సైన్ ను తెలుపుము. ఇది x ను సైను గా కలిగిఉన్న కోణము. నిర్వచనం -1 <= x <= 1"
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr "ఆటేన్"
+
+#: eqnparserhelp.py:51
+msgid "atan(x), return the arc tangent of x. This is the angle for which the tangent is x. Defined for all x"
+msgstr "ఆటేన్ (x), x యొక్క ఆర్క్ టాంజెంట్ ను తెలుపును. ఇది x ను టాంజెంట్ గా కలిగిఉన్న కోణము.నిర్వచనం అన్ని x లకూ వర్తించును"
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr "కోస్"
+
+#: eqnparserhelp.py:55
+msgid "cos(x), return the cosine of x. This is the x-coordinate on the unit circle at the angle x"
+msgstr "కోస్ (x), x యొక్క కొసైన్ ను తెలుపుము. ఇది x కోణము వద్ద ప్రమాణ వృత్తముపై ఉండే x కోఆర్డినేట్"
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr "కాస్ హెచ్"
+
+#: eqnparserhelp.py:59
+msgid "cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr "కాస్ హెచ్ (x), x యొక్క అతిపరావలయ కొసైను ను చూపుము. ఈవిధంగా (exp(x) + exp(-x)) / 2"
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr "ఎక్స్ పొ"
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr "ఎక్స్ పొ(x), x యొక్క సహజ ఎక్స్ పొనెంట్ ను చూపుము. ఈ విధంగా e^x"
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr "ఫాక్ట్"
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr "ఫాక్ట్ (x), x యొక్క ఫాక్టొరియల్ ను చూపుము. ఈ విధంగా x * (x - 1) * (x - 2) * ..."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr "ధర్మములు"
+
+# why not ధర్మములు
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr "ప్రమేయాలు (), నిర్వచింపబడిన అన్నిప్రమేయాలను చూపుము"
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr "ఇన్"
+
+#: eqnparserhelp.py:72
+msgid "ln(x), return the natural logarithm of x. This is the value for which the exponent exp() equals x. Defined for x >= 0."
+msgstr "(x) లో x సహజ సంవర్గమానమును చూపుము. ఇది x తో సమాన ఎక్స్ పొనెంట్ exp() కలిగి ఉన్న విలువ. ఈ విధంగ x >= 0."
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr "ఆపెరేటర్లు"
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr "ఆపెరేటర్లు (), నిర్వచింపబడిన ఆపరేటర్ల లిస్ట్ ను ఇమ్ము"
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr "లేదా"
+
+#: eqnparserhelp.py:80
+msgid "or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr "లేక (x, y),లాజికల్ లేక. x and/or yనిజమైతే నిజమని తెలుపు లేక పోతే తప్పని తెలుపు"
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr "ప్లాట్"
+
+#: eqnparserhelp.py:83
+msgid "plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the range from a to b"
+msgstr "ప్లాట్(eqn, var=-a..b), a to b పరిధి లో 'var' ను వేరియబుల్ గాకలిగిన 'eqn' సమీకరణాన్ని ప్లాట్ చేయుము."
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr "సైన్"
+
+#: eqnparserhelp.py:87
+msgid "sin(x), return the sine of x. This is the y-coordinate on the unit circle at the angle x"
+msgstr "సైన్(x), x యొక్క సైను ను చూపుము. ఇది ప్రమాణ వృత్తముపై, x కోణము వద్ద y కోఆర్డినేట్."
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr "సైన్ హెచ్"
+
+#: eqnparserhelp.py:91
+msgid "sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr "సైన్ హెచ్ (x), x యొక్క అతిపరావలయ సైను ను చూపుము. ఈవిధంగా(exp(x) - exp(-x)) / 2"
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr "వర్గమూలం"
+
+#: eqnparserhelp.py:94
+msgid "sqrt(x), return the square root of x. This is the value for which the square equals x. Defined for x >= 0."
+msgstr "స్క్వేర్ రూట్ (x), x యొక్క వర్గమూలమును చూపుము. ఇది వర్గము x కు సమానం గా ఉండే విలువ. ఈ విధంగా x >= 0."
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr "నలుచదరము"
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr "వర్గం (x), x యొక్క వర్గమును చూపుము. ఈ విధం గా x * x"
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr "టేన్"
+
+#: eqnparserhelp.py:102
+msgid "tan(x), return the tangent of x. This is the slope of the line from the origin of the unit circle to the point on the unit circle defined by the angle x. Given by sin(x) / cos(x)"
+msgstr "టేన్(x), x యొక్క టాంజెంట్ ను చూపుము. ఇది ఒక ప్రమాణ వృత్త కేంద్రము నకు , వృత్తం పై x కోణం వద్ద నున్న బిందువు కు మధ్య గీయబడిన రేఖ యొక్క వాలు/స్లోపు. ఈ విధంగా sin(x) / cos(x)"
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr "టాన్ హెచ్"
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr "సైన్ (x), x యొక్క అతిపరావలయ టాంజెంట్ ను చూపుము. ఈ విధంగా sinh(x) / cosh(x)"
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr "పరిక్షించు"
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr "ఇది పరీక్ష విషయము మాత్రమే, సూచికకై సహాయము(సూచిక) ను వాడండి"
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr "వేరియబుల్స్"
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr "వేరియబుల్స్ (), నిర్వచింపబడిన వేరియబుల్స్ లిస్ట్ ను చూపుము"
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr "ఎక్స్ ఆర్"
+
+#: eqnparserhelp.py:117
+msgid "xor(x, y), logical xor. Returns True if either x is True (and y is False) or y is True (and x is False), else returns False"
+msgstr "ఎక్స్ ఆర్ (x, y), లాజికల్ ఎక్స్ ఆర్. x సరైనది (మరియు y తప్పు) లేక y సరైనది (మరియు x తప్పు) అయితే నిజమని చూపు, కానిచో తప్పు అని చూపు"
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr "సూచిక"
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr "విషయాలు"
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr "'%s' గురించి సహాయము అందుబాటులో లేదు, సహాయము(సూచిక) నువాడండి"
+
+#: layout.py:60
+msgid "Edit"
+msgstr "కూర్చు"
+
+#: layout.py:61
+msgid "Algebra"
+msgstr "ఆల్జీబ్రా"
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr "త్రికోణమితి"
+
+#: layout.py:63
+msgid "Boolean"
+msgstr "బూలియాన్"
+
+#: layout.py:64
+msgid "Constants"
+msgstr "స్థిర విలువలు"
+
+#: layout.py:65
+msgid "Format"
+msgstr "ఫార్మెట్"
+
+#: layout.py:86
+msgid "Label:"
+msgstr "లేబుల్:"
+
+#: layout.py:118
+msgid "All equations"
+msgstr "అన్ని సమీకరణాలు"
+
+#: layout.py:118
+msgid "My equations"
+msgstr "నా సమీకరణాలు"
+
+#: layout.py:120
+msgid "Show history"
+msgstr "గతచరిత్ర చూపు"
+
+#: layout.py:120
+msgid "Show variables"
+msgstr "వేరియబుల్స్ ని చూపుము"
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr "ముల్_సిమ్"
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr "డివ్_సిమ్"
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr "నిర్వచింపబడలేదు"
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr "దోషం: సప్పోర్టు లేని రకము"
+
+#: toolbars.py:36
+msgid "Help"
+msgstr "సహాయము"
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr "నకలు"
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr "అతికించు"
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr "కత్తిరించు"
+
+#: toolbars.py:99
+msgid "Square"
+msgstr "నలుచదరము"
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr "వర్గమూలం"
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr "ఇ(e) టు ది పవర్ ఆఫ్ ఎక్స్(x)"
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr "సహజ లాగరిథం"
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr "ఫాక్టోరియల్"
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr "సైన్"
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr "కొసైన్"
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr "టాంజెంట్"
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr "ఆర్క్ సైన్"
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr "ఆర్క్ కొసైన్"
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr "ఆర్క్ టాంజెంట్"
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr "హైపర్ బోలిక్ సైన్"
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr "హైపర్ బోలిక్ కొసైన్"
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr "హైపర్ బోలికం టాంజెట్"
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr "లాజికల్ మరియు"
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr "లాజికల్ లేదా"
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr "సమానము"
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr "అసమానము"
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr "పై (Pi)"
+
+#: toolbars.py:202
+msgid "e"
+msgstr "ఇ (e)"
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr "డిగ్రీలు"
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr "రేడియనులు"
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr "ఎక్స్(x) టు ది పవర్ ఆఫ్ వై(y)"
+
diff --git a/po/th.po b/po/th.po
new file mode 100644
index 0000000..657d501
--- /dev/null
+++ b/po/th.po
@@ -0,0 +1,530 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-12 00:30-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:113
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:121
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:127
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:143
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:157
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:171
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:183
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:193
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:196
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:203
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:206
+msgid "e"
+msgstr ""
+
+#: toolbars.py:213
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:214
+msgid "Radians"
+msgstr ""
+
+#: toolbars.py:117
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:107
+msgid "Inverse"
+msgstr ""
diff --git a/po/tr.po b/po/tr.po
new file mode 100644
index 0000000..2c613d8
--- /dev/null
+++ b/po/tr.po
@@ -0,0 +1,529 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-02-12 00:30-0500\n"
+"PO-Revision-Date: 2008-02-18 23:04-0500\n"
+"Last-Translator: Serkan Cabi <serkancabi@gmail.com>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Pootle 1.0.2\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr "Hesapla"
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:107
+msgid "Inverse"
+msgstr ""
+
+#: toolbars.py:113
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:117
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:121
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:127
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:143
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:157
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:171
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:183
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:193
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:196
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:203
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:206
+msgid "e"
+msgstr ""
+
+#: toolbars.py:213
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:214
+msgid "Radians"
+msgstr ""
diff --git a/po/vi.po b/po/vi.po
new file mode 100644
index 0000000..8e4c710
--- /dev/null
+++ b/po/vi.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100644
index 0000000..8e4c710
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100644
index 0000000..8e4c710
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,526 @@
+# SOME DESCRIPTIVE TITLE.
+# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
+# This file is distributed under the same license as the PACKAGE package.
+# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
+#, fuzzy
+msgid ""
+msgstr ""
+"Project-Id-Version: PACKAGE VERSION\n"
+"Report-Msgid-Bugs-To: \n"
+"POT-Creation-Date: 2008-01-26 11:55-0500\n"
+"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
+"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=UTF-8\n"
+"Content-Transfer-Encoding: 8bit\n"
+"X-Generator: Translate Toolkit 1.0.1\n"
+
+#: activity/activity.info:2
+msgid "Calculate"
+msgstr ""
+
+#: calculate.py:80
+#, python-format
+msgid "Equation.parse() string invalid (%s)"
+msgstr ""
+
+#: calculate.py:210
+msgid "Available functions:"
+msgstr ""
+
+#: calculate.py:504
+#, python-format
+msgid "Writing to journal (%s)"
+msgstr ""
+
+#: calculate.py:788
+msgid "button_pressed(): invalid type"
+msgstr ""
+
+#: eqnparser.py:33
+msgid "Parse error"
+msgstr ""
+
+#: eqnparser.py:58
+#, python-format
+msgid "level: %d, ofs %d"
+msgstr ""
+
+#: eqnparser.py:117
+#, python-format
+msgid "Error at %d"
+msgstr ""
+
+#: eqnparser.py:249 eqnparserhelp.py:128
+msgid "Use help(test) for help about 'test', or help(index) for the index"
+msgstr ""
+
+#: eqnparser.py:353 eqnparser.py:354
+#, python-format
+msgid "Function '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:359
+#, python-format
+msgid "Invalid number of arguments (%d instead of %d)"
+msgstr ""
+
+#: eqnparser.py:360
+#, python-format
+msgid "function takes %d args"
+msgstr ""
+
+#: eqnparser.py:370 eqnparser.py:371
+#, python-format
+msgid "Unable to parse argument %d: '%s'"
+msgstr ""
+
+#: eqnparser.py:380
+#, python-format
+msgid "Function error: %s"
+msgstr ""
+
+#: eqnparser.py:481
+#, python-format
+msgid "Variable '%s' not defined"
+msgstr ""
+
+#: eqnparser.py:504
+msgid "Left parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:516
+msgid "Parse error (right parenthesis)"
+msgstr ""
+
+#: eqnparser.py:517 eqnparser.py:528 eqnparser.py:535 eqnparser.py:610
+msgid "Right parenthesis unexpected"
+msgstr ""
+
+#: eqnparser.py:527
+msgid "Parse error (right parenthesis, no left_val)"
+msgstr ""
+
+#: eqnparser.py:534
+msgid "Parse error (right parenthesis, no level to close)"
+msgstr ""
+
+#: eqnparser.py:541 eqnparser.py:542
+msgid "Number not expected"
+msgstr ""
+
+#: eqnparser.py:550
+msgid "Operator not expected"
+msgstr ""
+
+#: eqnparser.py:566
+msgid "Parse error: number or variable expected"
+msgstr ""
+
+#: eqnparser.py:567
+msgid "Number or variable expected"
+msgstr ""
+
+#: eqnparser.py:596
+msgid "Invalid operator"
+msgstr ""
+
+#: eqnparser.py:603
+msgid "Operator expected"
+msgstr ""
+
+#: eqnparser.py:616
+msgid "_parse(): returning None"
+msgstr ""
+
+#. TRANS: It is possible to translate commands. However, I would highly
+#. recommend NOT doing so for mathematical functions like cos(). help(),
+#. functions() etc should be translated.
+#: eqnparserhelp.py:39
+msgid "acos"
+msgstr ""
+
+#: eqnparserhelp.py:40
+msgid ""
+"acos(x), return the arc cosine of x. This is the angle for which the cosine "
+"is x. Defined for -1 <= x < 1"
+msgstr ""
+
+#: eqnparserhelp.py:43
+msgid "and"
+msgstr ""
+
+#: eqnparserhelp.py:44
+msgid ""
+"and(x, y), logical and. Returns True if x and y are True, else returns False"
+msgstr ""
+
+#: eqnparserhelp.py:46
+msgid "asin"
+msgstr ""
+
+#: eqnparserhelp.py:47
+msgid ""
+"asin(x), return the arc sine of x. This is the angle for which the sine is "
+"x. Defined for -1 <= x <= 1"
+msgstr ""
+
+#: eqnparserhelp.py:50
+msgid "atan"
+msgstr ""
+
+#: eqnparserhelp.py:51
+msgid ""
+"atan(x), return the arc tangent of x. This is the angle for which the "
+"tangent is x. Defined for all x"
+msgstr ""
+
+#: eqnparserhelp.py:54
+msgid "cos"
+msgstr ""
+
+#: eqnparserhelp.py:55
+msgid ""
+"cos(x), return the cosine of x. This is the x-coordinate on the unit circle "
+"at the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:58
+msgid "cosh"
+msgstr ""
+
+#: eqnparserhelp.py:59
+msgid ""
+"cosh(x), return the hyperbolic cosine of x. Given by (exp(x) + exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:61
+msgid "exp"
+msgstr ""
+
+#: eqnparserhelp.py:62
+msgid "exp(x), return the natural exponent of x. Given by e^x"
+msgstr ""
+
+#: eqnparserhelp.py:64
+msgid "fac"
+msgstr ""
+
+#: eqnparserhelp.py:65
+msgid "fac(x), return the factorial of x. Given by x * (x - 1) * (x - 2) * ..."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:68
+msgid "functions"
+msgstr ""
+
+#: eqnparserhelp.py:69
+msgid "functions(), return a list of all the functions that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:71
+msgid "ln"
+msgstr ""
+
+#: eqnparserhelp.py:72
+msgid ""
+"ln(x), return the natural logarithm of x. This is the value for which the "
+"exponent exp() equals x. Defined for x >= 0."
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:76
+msgid "operators"
+msgstr ""
+
+#: eqnparserhelp.py:77
+msgid "operators(), return a list of the operators that are defined"
+msgstr ""
+
+#: eqnparserhelp.py:79
+msgid "or"
+msgstr ""
+
+#: eqnparserhelp.py:80
+msgid ""
+"or(x, y), logical or. Returns True if x and/or y are True, else return False"
+msgstr ""
+
+#: eqnparserhelp.py:82
+msgid "plot"
+msgstr ""
+
+#: eqnparserhelp.py:83
+msgid ""
+"plot(eqn, var=-a..b), plot the equation 'eqn' with the variable 'var' in the "
+"range from a to b"
+msgstr ""
+
+#: eqnparserhelp.py:86
+msgid "sin"
+msgstr ""
+
+#: eqnparserhelp.py:87
+msgid ""
+"sin(x), return the sine of x. This is the y-coordinate on the unit circle at "
+"the angle x"
+msgstr ""
+
+#: eqnparserhelp.py:90
+msgid "sinh"
+msgstr ""
+
+#: eqnparserhelp.py:91
+msgid ""
+"sinh(x), return the hyperbolic sine of x. Given by (exp(x) - exp(-x)) / 2"
+msgstr ""
+
+#: eqnparserhelp.py:93
+msgid "sqrt"
+msgstr ""
+
+#: eqnparserhelp.py:94
+msgid ""
+"sqrt(x), return the square root of x. This is the value for which the square "
+"equals x. Defined for x >= 0."
+msgstr ""
+
+#: eqnparserhelp.py:97
+msgid "square"
+msgstr ""
+
+#: eqnparserhelp.py:98
+msgid "square(x), return the square of x. Given by x * x"
+msgstr ""
+
+#: eqnparserhelp.py:101
+msgid "tan"
+msgstr ""
+
+#: eqnparserhelp.py:102
+msgid ""
+"tan(x), return the tangent of x. This is the slope of the line from the "
+"origin of the unit circle to the point on the unit circle defined by the "
+"angle x. Given by sin(x) / cos(x)"
+msgstr ""
+
+#: eqnparserhelp.py:106
+msgid "tanh"
+msgstr ""
+
+#: eqnparserhelp.py:107
+msgid "sinh(x), return the hyperbolic tangent of x. Given by sinh(x) / cosh(x)"
+msgstr ""
+
+#: eqnparserhelp.py:109
+msgid "test"
+msgstr ""
+
+#: eqnparserhelp.py:110
+msgid "This is just a test topic, use help(index) for the index"
+msgstr ""
+
+#. TRANS: This command is descriptive, so can be translated
+#: eqnparserhelp.py:113
+msgid "variables"
+msgstr ""
+
+#: eqnparserhelp.py:114
+msgid "variables(), return a list of the variables that are currently defined"
+msgstr ""
+
+#: eqnparserhelp.py:116
+msgid "xor"
+msgstr ""
+
+#: eqnparserhelp.py:117
+msgid ""
+"xor(x, y), logical xor. Returns True if either x is True (and y is False) or "
+"y is True (and x is False), else returns False"
+msgstr ""
+
+#. TRANS: help(index), both 'index' and the translation will work
+#: eqnparserhelp.py:131
+msgid "index"
+msgstr ""
+
+#: eqnparserhelp.py:132
+msgid "Topics"
+msgstr ""
+
+#: eqnparserhelp.py:143
+#, python-format
+msgid "No help about '%s' available, use help(index) for the index"
+msgstr ""
+
+#: layout.py:60
+msgid "Edit"
+msgstr ""
+
+#: layout.py:61
+msgid "Algebra"
+msgstr ""
+
+#: layout.py:62
+msgid "Trigonometry"
+msgstr ""
+
+#: layout.py:63
+msgid "Boolean"
+msgstr ""
+
+#: layout.py:64
+msgid "Constants"
+msgstr ""
+
+#: layout.py:65
+msgid "Format"
+msgstr ""
+
+#: layout.py:86
+msgid "Label:"
+msgstr ""
+
+#: layout.py:118
+msgid "All equations"
+msgstr ""
+
+#: layout.py:118
+msgid "My equations"
+msgstr ""
+
+#: layout.py:120
+msgid "Show history"
+msgstr ""
+
+#: layout.py:120
+msgid "Show variables"
+msgstr ""
+
+#. TRANS: multiplication symbol (default: '*')
+#: mathlib.py:74
+msgid "mul_sym"
+msgstr ""
+
+#. TRANS: division symbol (default: '/')
+#: mathlib.py:79
+msgid "div_sym"
+msgstr ""
+
+#: mathlib.py:132
+msgid "Undefined"
+msgstr ""
+
+#: mathlib.py:142
+msgid "Error: unsupported type"
+msgstr ""
+
+#: toolbars.py:36
+msgid "Help"
+msgstr ""
+
+#: toolbars.py:86
+msgid "Copy"
+msgstr ""
+
+#: toolbars.py:89
+msgid "Paste"
+msgstr ""
+
+#: toolbars.py:92
+msgid "Cut"
+msgstr ""
+
+#: toolbars.py:99
+msgid "Square"
+msgstr ""
+
+#: toolbars.py:103
+msgid "Square root"
+msgstr ""
+
+#: toolbars.py:109
+msgid "e to the power x"
+msgstr ""
+
+#: toolbars.py:113
+msgid "x to the power y"
+msgstr ""
+
+#: toolbars.py:117
+msgid "Natural logarithm"
+msgstr ""
+
+#: toolbars.py:123
+msgid "Factorial"
+msgstr ""
+
+#: toolbars.py:131
+msgid "Sine"
+msgstr ""
+
+#: toolbars.py:135
+msgid "Cosine"
+msgstr ""
+
+#: toolbars.py:139
+msgid "Tangent"
+msgstr ""
+
+#: toolbars.py:145
+msgid "Arc sine"
+msgstr ""
+
+#: toolbars.py:149
+msgid "Arc cosine"
+msgstr ""
+
+#: toolbars.py:153
+msgid "Arc tangent"
+msgstr ""
+
+#: toolbars.py:159
+msgid "Hyperbolic sine"
+msgstr ""
+
+#: toolbars.py:163
+msgid "Hyperbolic cosine"
+msgstr ""
+
+#: toolbars.py:167
+msgid "Hyperbolic tangent"
+msgstr ""
+
+#: toolbars.py:175
+msgid "Logical and"
+msgstr ""
+
+#: toolbars.py:179
+msgid "Logical or"
+msgstr ""
+
+#: toolbars.py:189
+msgid "Equals"
+msgstr ""
+
+#: toolbars.py:192
+msgid "Not equals"
+msgstr ""
+
+#: toolbars.py:199
+msgid "Pi"
+msgstr ""
+
+#: toolbars.py:202
+msgid "e"
+msgstr ""
+
+#: toolbars.py:209
+msgid "Degrees"
+msgstr ""
+
+#: toolbars.py:210
+msgid "Radians"
+msgstr ""
diff --git a/sharedstate b/sharedstate
new file mode 120000
index 0000000..96d099c
--- /dev/null
+++ b/sharedstate
@@ -0,0 +1 @@
+sharedstate.git/sharedstate \ No newline at end of file
diff --git a/sharedstate.git/MANIFEST b/sharedstate.git/MANIFEST
new file mode 100644
index 0000000..a81177f
--- /dev/null
+++ b/sharedstate.git/MANIFEST
@@ -0,0 +1 @@
+SharingTest.py
diff --git a/sharedstate.git/SharingTest.py b/sharedstate.git/SharingTest.py
new file mode 100644
index 0000000..c8e0a0c
--- /dev/null
+++ b/sharedstate.git/SharingTest.py
@@ -0,0 +1,113 @@
+from sugar.activity.activity import Activity, ActivityToolbox
+
+import logging
+_logger = logging.getLogger('shtest-activity')
+
+from sharedstate.sharedstate import SharingHelper
+
+from gettext import gettext as _
+
+import pygtk
+pygtk.require('2.0')
+import gtk
+
+class SharingTest(Activity):
+ def __init__(self, handle):
+ Activity.__init__(self, handle)
+
+ _logger.info('Starting SharingHelper test...')
+
+ toolbox = ActivityToolbox(self)
+ self.set_toolbox(toolbox)
+ toolbox.show()
+
+ self.set_title('SharingTest')
+
+ hc = gtk.HBox(spacing=20)
+ hc.set_border_width(20)
+ vc1 = gtk.VBox()
+ self.dict_box = gtk.TextView() # where the current dict is shown
+ self.dict_box.set_editable(False)
+ vc1.add(self.dict_box)
+ hc2 = gtk.HBox(spacing=20)
+ hc2.set_border_width(20)
+
+ self.dict_key_box = gtk.Entry() # new key => val boxes
+ self.dict_key_box.set_size_request(100, 40)
+ hc2.add(self.dict_key_box)
+ self.dict_val_box = gtk.Entry()
+ self.dict_val_box.set_size_request(100, 40)
+ hc2.add(self.dict_val_box)
+ vc1.add(hc2)
+ b2 = gtk.Button('add to dict') # add button
+ b2.connect('clicked', self.add_button_clicked_cb)
+ vc1.add(b2)
+ hc.add(vc1)
+
+ vc2 = gtk.VBox()
+ b1 = gtk.Button('Counter++') # counter button
+ b1.connect('clicked', self.counter_button_clicked_cb)
+ vc2.add(b1)
+ self.CounterLabel = gtk.Label('0') # counter label
+ vc2.add(self.CounterLabel)
+
+ self.edit_box = gtk.TextView() # shared editable text
+ self.edit_box.set_editable(True)
+ self.changed_signal = self.edit_box.get_buffer().connect('changed', self.edit_box_changed_cb)
+ vc2.add(self.edit_box)
+
+ hc.add(vc2)
+ self.get_child().add(hc)
+
+# Setup the shared objects
+ self.helper = SharingHelper(self)
+ self.helper.create_shared_object('counter', {
+ 'changed': self.update_counter_cb
+ }, iv=0)
+
+ self.helper.create_shared_object('sdict', {
+ 'changed': self.update_dict_cb
+ }, iv={'key1': 'first key/val'})
+
+ self.helper.create_shared_object('stext', {
+ 'changed': self.update_text_cb,
+ 'type': 'python' # or nothing to autotype to SharedText
+ }, iv='start of shared text')
+
+# And show everything
+ self.show_all()
+
+ def counter_button_clicked_cb(self, info):
+ _logger.debug('Counter clicked')
+ self.helper['counter'] = self.helper['counter'] + 1
+
+ def update_counter_cb(self, val):
+ _logger.debug('update_counter_cb(): %r', val)
+ self.CounterLabel.set_text('%d' % (val))
+
+ def add_button_clicked_cb(self, info):
+ _logger.debug('Add clicked')
+ self.helper['sdict'][self.dict_key_box.get_text()] = self.dict_val_box.get_text()
+ self.dict_key_box.set_text('')
+ self.dict_val_box.set_text('')
+
+ def update_dict_cb(self, val):
+ _logger.debug('update_dict_cb(): %r', val)
+ str = ''
+ for k, v in val.iteritems():
+ str += "%s => %s\n" % (k, v)
+ self.dict_box.get_buffer().set_text(str)
+
+ def edit_box_changed_cb(self, tbuf):
+ _logger.debug('text_changed_cb(): changed')
+ self.helper['stext'] = tbuf.get_text(tbuf.get_start_iter(), tbuf.get_end_iter())
+
+ def update_text_cb(self, val):
+ _logger.debug('update_text_cb(): %s', val)
+ buf = self.edit_box.get_buffer()
+# pos = buf.get_iter_at_offset(buf.get_property('cursor_position'))
+ buf.handler_block(self.changed_signal)
+ buf.set_text(val)
+ buf.handler_unblock(self.changed_signal)
+# buf.place_cursor(pos)
+
diff --git a/sharedstate.git/activity/activity-shtest.svg b/sharedstate.git/activity/activity-shtest.svg
new file mode 100644
index 0000000..8c79234
--- /dev/null
+++ b/sharedstate.git/activity/activity-shtest.svg
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd" [
+ <!ENTITY fill_color "#FFFFFF">
+ <!ENTITY stroke_color "#000000">
+]>
+<svg xmlns="http://www.w3.org/2000/svg" width="50" height="50">
+ <rect x="11" y="11" width="26" height="26" style="fill:&fill_color;;stroke:&stroke_color;;stroke-width:2"/>
+</svg>
diff --git a/sharedstate.git/activity/activity.info b/sharedstate.git/activity/activity.info
new file mode 100644
index 0000000..1c37f71
--- /dev/null
+++ b/sharedstate.git/activity/activity.info
@@ -0,0 +1,7 @@
+[Activity]
+name = SharingTest
+service_name = org.laptop.SharingTest
+class = SharingTest.SharingTest
+icon = activity-shtest
+activity_version = 1
+show_launcher = yes
diff --git a/sharedstate.git/setup.py b/sharedstate.git/setup.py
new file mode 100644
index 0000000..ec0f64e
--- /dev/null
+++ b/sharedstate.git/setup.py
@@ -0,0 +1,3 @@
+#!/usr/bin/env python
+from sugar.activity import bundlebuilder
+bundlebuilder.start()
diff --git a/sharedstate.git/sharedstate/README b/sharedstate.git/sharedstate/README
new file mode 100644
index 0000000..229cefd
--- /dev/null
+++ b/sharedstate.git/sharedstate/README
@@ -0,0 +1,10 @@
+class SharedObject
+
+options:
+ -incremental (boolean):
+ default encoding style
+ -contiguous (boolean): [NOT YET IMPLEMENTED]
+ whether only contiguous updates are allowed
+ -dynamic (boolean): [PARTIALLY IMPLEMENTED]
+ whether this is a dynamically created object
+
diff --git a/sharedstate.git/sharedstate/__init__.py b/sharedstate.git/sharedstate/__init__.py
new file mode 100644
index 0000000..8b13789
--- /dev/null
+++ b/sharedstate.git/sharedstate/__init__.py
@@ -0,0 +1 @@
+
diff --git a/sharedstate.git/sharedstate/shareddict.py b/sharedstate.git/sharedstate/shareddict.py
new file mode 100644
index 0000000..1a51a12
--- /dev/null
+++ b/sharedstate.git/sharedstate/shareddict.py
@@ -0,0 +1,107 @@
+# shareddict.py, classes to aid activities in sharing a state
+# Reinier Heeres, reinier@heeres.eu
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Change log:
+# 2007-06-21: rwh, first version
+
+import logging
+_logger = logging.getLogger('sharinghelper')
+
+from sharedobject import SharedObject
+
+class SharedDict(SharedObject):
+ """Shared dictionary object, generates key-based difference objects"""
+
+ def __init__(self, name, helper, opt={}):
+ SharedObject.__init__(self, name, helper, opt=opt)
+ self._value = {}
+
+ def __getitem__(self, key):
+# _logger.debug('SharedDict.__getitem__(%s)', key)
+ return self.get_key(key)
+
+ def __setitem__(self, key, val):
+# _logger.debug('SharedDict.__setitem__(%s, %s)', key, val)
+ return self.set_key(key, val)
+
+ def __delitem__(self, key):
+ self.delete_key(key)
+
+ def get_key(self, key, val):
+ return self._value[key]
+
+ def set_key(self, key, val):
+ if key in self._value:
+ d = {'change': {key: val}}
+ else:
+ d = {'add': {key: val}}
+ self._value[key] = val
+ self.changed(d, True)
+
+ def delete_key(self, key):
+ if key in self._value:
+ del self._value[key]
+ d = {'remove': key}
+ self.changed(d, True)
+
+ def _compatible_diffs(self, diffa, diffb):
+ for key in diffa:
+ if key in diffb:
+ return False
+ return True
+
+ def diff(self, cur, old):
+ ret = {'remove': [], 'add': {}, 'change': {}}
+ if old is None:
+ return ret
+
+ for key in set(old.keys()).difference(cur.keys()):
+ ret['remove'].append(key)
+
+ for key in set(cur.keys()).difference(old.keys()):
+ ret['add'][key] = cur[key]
+
+ for key in set(cur.keys()).intersection(old.keys()):
+ if cur[key] is not old[key]:
+ ret['change'][key] = cur[key]
+
+ return ret
+
+ def _apply_diff_to(self, obj, diffobj):
+ """Apply a diff and return an object that describes the inverse diff"""
+
+ if diffobj is None:
+ return (None, None)
+
+ ret = {'add':{}, 'remove':[], 'change':{}}
+
+ if 'remove' in diffobj:
+ for key in diffobj['remove']:
+ ret['add'][key] = obj[key]
+ del self._value[key]
+
+ if 'add' in diffobj:
+ for key, val in diffobj['add'].iteritems():
+ ret['remove'].append(key)
+ obj[key] = val
+
+ if 'change' in diffobj:
+ for key, val in diffobj['change'].iteritems():
+ ret[key] = self._value[key]
+ obj[key] = val
+
+ return (obj, ret)
diff --git a/sharedstate.git/sharedstate/sharedobject.py b/sharedstate.git/sharedstate/sharedobject.py
new file mode 100644
index 0000000..97472fc
--- /dev/null
+++ b/sharedstate.git/sharedstate/sharedobject.py
@@ -0,0 +1,436 @@
+# sharedobject.py, classes to aid activities in sharing a state
+# Reinier Heeres, reinier@heeres.eu
+# Miguel Alvarez, miguel@laptop.org
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Change log:
+# 2007-07-14: rwh, the big merge. Old function are kept with _nc
+# (non-contiguous) appended
+# 2007-07-07: miguel, conflict resolution added
+# 2007-06-21: rwh, first version
+
+import copy
+import pickle
+import base64
+import difflib
+import time
+
+import logging
+_logger = logging.getLogger('sharinghelper')
+
+class DiffRec:
+ def __init__(self, versionid, sender, incremental, objstr):
+ self.version_id = versionid
+ self.sender = sender
+ self.incremental = incremental
+ self.obj = objstr
+
+ def is_newer(self, v2):
+ if self.version_id > v2.version_id or \
+ (self.version_id == v2.version_id and self.sender > v2.sender):
+ return True
+ else:
+ return False
+
+ def __str__(self):
+ return "[%d]%s" % (self.version_id, str(self.obj))
+
+ def __repr__(self):
+ return self.__str__()
+
+class SharedObject:
+ """Base class for shared objects, able to share python objects the
+ dumb way"""
+
+ def __init__(self, name, helper, opt = {}):
+ self._name = name
+ self._options = opt
+ self._helper = helper
+ self._value = None
+ self._version_id = 0
+ self._received_diffs = []
+ self._inverse_diffs = []
+ self._pending_diffs = {}
+ self._cached_versions = 8
+ self._locked = False
+ self._locked_by = None
+ self._locked_time = 0
+
+ def encode(self, obj):
+ return base64.b64encode(pickle.dumps(obj))
+
+ def decode(self, obj):
+ return pickle.loads(base64.b64decode(obj))
+
+ def _should_encode_incremental(self, incremental):
+ """Decide whether to encode an object incrementally. If nothing is
+ specified (incremental=None) determine from self._options, else
+ return what is specified."""
+
+ if incremental is None:
+ if 'incremental' in self._options and self._options['incremental'] is True:
+ return True
+ else:
+ return False
+ return incremental
+
+ def changed_nc(self, diffobj, incremental):
+ """This function should be called when the object has changed."""
+
+ self._version_id += 1
+ try:
+ diff = DiffRec(self._version_id, self._helper._own_bus_name, incremental, diffobj)
+ self.insert_diff(diff)
+ enc = self.encode(diff.obj)
+ if self._helper.tube_connected():
+ self._helper.SendObject(self._name, self._version_id, incremental, enc)
+ except Exception, inst:
+ _logger.error('changed(): %s', inst)
+
+ self.do_changed_callback()
+
+ def changed(self, diffobj, incremental=False):
+ """This function should be called when the object has change
+ If diffobj is None the whole object will be sent
+ If defined, only this difference will be sent
+ A diff entry is also added to our received_diffs so that
+ we can properly sequence and undo/redo this change.
+ """
+
+ try:
+ self.insert_diff(DiffRec(self._version_id+1,
+ self._helper._own_bus_name, incremental, diffobj))
+ if not incremental:
+ enc = self.encode(self._value)
+ else:
+ enc = self.encode(diffobj)
+ self._helper.SendObject(self._name, self._version_id, incremental, enc)
+ _logger.debug("Modification sent")
+ except Exception, inst:
+ _logger.error('changed(): %s, currval: %s', inst, self._value)
+ self.do_changed_callback()
+
+ def set_value_nc(self, v, incremental=None):
+ """Function to set value of this object. Specifying incremental
+ (a boolean) allows forcing of either incremental/full encoding.
+ If not specified, the default will be used from self._options"""
+
+ incremental = self._should_encode_incremental(incremental)
+ _logger.debug('Setting value of %s to %s, incremental=%s', self._name, v, incremental)
+ if incremental:
+ old = copy.deepcopy(self._value)
+ self._value = v
+ d = self.diff(v, old)
+ _logger.debug('set_value(): generated diff:\n%r', d)
+ del old
+ if d is not None:
+ self.changed(d, True)
+ else:
+ self._value = v
+ self.changed_nc(v, False)
+
+ def set_value(self, v, incremental=False):
+ incremental = self._should_encode_incremental(incremental)
+ _logger.debug('Setting value of %s to %s, incremental=%s', self._name, v, incremental)
+ old = copy.deepcopy(self._value)
+ d = self.diff(v, old)
+ _logger.debug("Diff= %s", d)
+ self.changed(d, incremental)
+
+ def get_value(self):
+ return self._value
+
+ def do_changed_callback(self):
+ if 'changed' in self._options:
+ self._options['changed'](self._value)
+
+ def output_diff_stack(self):
+ _logger.debug('Diff stack:')
+ for versionid, incremental, objstr, sender in self._received_diffs:
+ _logger.debug('\tv:%d, inc:%d, sender:%d', versionid,
+ incremental, sender)
+
+ def get_version(self, versionid):
+ if versionid == self._version_id:
+ return self._value
+ if versionid > self._version_id or versionid < 0:
+ return None
+ target_index = self._get_diff_index(versionid + 1) #versionid of a diff== the version it leads _up_ to
+ if 0 > target_index or index > len(self._received_diffs):
+ return None
+ object = self._value
+ for i in range(len(self._received_diffs)-1, target_index -1, -1):
+ d = self._received_diffs[i]
+ object = self._apply_diff_to(object, self.inverse_diff(diff))
+ return object
+
+ def get_version(self, versionid):
+ if versionid == self._version_id:
+ return self._value
+ if versionid > self._version_id or versionid < 0:
+ return None
+ if versionid < self._received_diffs[0].version_id:
+ return None
+
+ i = len(self._received_diffs) - 1
+ while self._version_id > versionid:
+ obj = self._apply_diff_to(obj, self.inverse_diff(diff))
+ i -= 1
+
+ return obj
+
+ def inverse_diff(self, diff):
+ """Invert a diff object, so that if was the result of an o -> n comparison, the
+ result is associated to a n -> o comparison."""
+ index = self._get_diff_index(diff)
+ if 0 < index < len(self._inverse_diffs): #found (?)
+ return self._inverse_diffs[index]
+ return None
+
+ def _get_diff_index(self, vi):
+ for i in xrange(len(self._received_diffs)-1, -1 , -1):
+ if self._received_diffs[i].version_id == vi:
+ return i
+ return -1
+
+ def insert_diff_nc(self, d):
+ if len(self._received_diffs) > 0 and self._received_diffs[0].is_newer(d):
+ return -1
+
+ if len(self._received_diffs) >= self._cached_versions:
+ del(self._received_diffs[0])
+
+ i = len(self._received_diffs) - 1
+ while i > -1:
+ if d.is_newer(self._received_diffs[i]):
+ break
+ i -= 1
+
+ self._received_diffs.insert(i + 1, d)
+ self._inverse_diffs.insert(i + 1, DiffRec(d.version_id, d.sender, d.incremental, None))
+
+ return i + 1
+
+ def insert_diff(self, recv_diff, old=None):
+ """ Places a new and compatible change of incremental type in its correct place, and
+ actualizes thevalue of the shared object accordingly."""
+ _logger.debug("insert_diff(): Current versionid:%s, recv_diff:%s", self._version_id, recv_diff)
+ if not recv_diff.incremental:
+ _logger.debug("insert_diff(): Applying non-incremental diff")
+ if recv_diff in self._received_diffs:
+ _logger.debug("Dupe")
+ return True
+ recvi = recv_diff.version_id
+ index = self._get_diff_index(recvi)
+ if old == None:
+ old = self.get_version(recvi - 1)
+ #if old == None: #can't find the father, doesn't use
+ # self._discarded_diff = recv_diff
+ # #TODO: signal that we have a discarded diff --> return False
+ # return False
+
+ _logger.debug("insert_diff(): old=%s", old)
+ if index < 0:
+ diffs = []
+ else:
+ diffs = self._received_diffs[index:]
+ i = 0
+ while len(diffs) > 0 and recv_diff.is_newer(diffs[0]):
+ diffs = diffs[1:]
+ index += 1
+ i += 1
+ recv_diff.version_id += i
+ for d in diffs:
+ d.version_id += 1
+ res = [recv_diff] + diffs
+
+ ret = old
+ invdiffs = []
+ for d in res:
+ _logger.debug("[insert_diff] Applying %s to %s", d.obj, ret)
+ ret, id = self._apply_diff_to(ret, d.obj)
+ invdiffs.append(id)
+ self._value = ret
+ if index >= 0:
+ self._received_diffs = self._received_diffs[:index] + res
+ self._inverse_diffs = self._inverse_diffs[:index] + invdiffs
+ _logger.info("insert_diff(): recv_diff inserted at %d", index)
+ else:
+ self._received_diffs = self._received_diffs + res
+ self._inverse_diffs = self._inverse_diffs + invdiffs
+ _logger.debug("insert_diff(): recv_diff inserted at %d", len(self._received_diffs))
+ self._version_id += 1
+ if not self._version_id == self._received_diffs[-1].version_id:
+ _logger.debug("Version inconsistency: expected %s, got %s", self._received_diffs[-1], self._version_id)
+ self._version_id = self._received_diffs[-1].version_id
+ _logger.debug("new version_id: %s, actualized received_diffs: %s", self._version_id, self._received_diffs)
+ return True
+
+ def process_update_nc(self, versionid, incremental, objstr, sender, force=False):
+ """Process an update:
+ -Undo all newer diffs
+ -Apply the just added one
+ -Redo all newer diffs
+ """
+
+ obj = self.decode(objstr)
+ d = DiffRec(versionid, sender, incremental, obj)
+
+ i = self.insert_diff(d)
+ _logger.debug('Inserted diff at position %d', i)
+ if i == -1:
+ return False
+
+ j = len(self._received_diffs) - 1 # Don't include ourselve
+ while j > i:
+ if not self._received_diffs[j].incremental:
+ break # not necessary to continue beyond replacement object
+ self.apply_diff(self._inverse_diffs[j].obj)
+ j -= 1
+
+ while j < len(self._received_diffs):
+ if not self._received_diffs[j].incremental:
+ self._value = self._received_diffs[j].obj
+ else:
+ self._inverse_diffs[j].obj = self.apply_diff(self._received_diffs[j].obj)
+ self._version_id = self._received_diffs[j].version_id
+ j += 1
+
+ self.do_changed_callback()
+
+ return True
+
+ def process_update(self, versionid, incremental, objstr, sender, force=False):
+ """Process an update:
+ -Undo all newer diffs to get to the common version
+ - Check for compatability between the received update and the 'combined' newer diffs
+ - If compatible, insert the received one
+ - If not, apply the 'winning' one, and pass the other to the 'rejected' folder
+ We return 'True' if there is no conflict, and 'False' if there was one
+ """
+ if (versionid == self._version_id):
+ _logger.debug("Maybe dupe? our versionid:%d, received:%d", self._version_id, versionid)
+ a = len(self._received_diffs) > 0
+ b = (sender == self._received_diffs[-1].sender)
+ _logger.debug("Two tests: %s, %s", a, b)
+ if a and b:
+ return True #Dupe
+ obj = self.decode(objstr)
+ _logger.debug( "process_update: version: %s, obj: %s" % (versionid, obj))
+ if versionid > self._version_id + 1 and incremental and not force:
+ #Disordered diffs. Store for later use
+ self._pending_diffs[versionid] = DiffRec(versionid, sender, incremental, obj)
+ for i in range(self._version_id+1, versionid):
+ #TODO : Call for missing diffs:
+ pass
+ _logger.debug("Disordered diffs. returning")
+ return True
+ old = self.get_version(versionid - 1) #supposed common ancestor
+ if not incremental: #we get the incremental version maually
+ obj2 = self.diff(obj, old)
+ else:
+ obj2 = obj
+ db = DiffRec(versionid, sender, True, obj2)
+ if versionid > self._version_id or force: #expected version number
+ if not incremental:
+ _logger.debug("Update in expected range, non incremental")
+ self._value = obj
+ self._received_diffs.append(db)
+ self._version_id = versionid
+ else:
+ _logger.debug("Update in expected range, incremental")
+ self.insert_diff(db, old)
+ while self._version_id + 1 in self._pending_diffs:
+ #We get the pending diff and apply it
+ pd = self._pending_diffs[self._version_id + 1]
+ if not pd.incremental:
+ self._value = pd.obj
+ pd.obj = self.diff(pd.obj, self._value)
+ pd.incremental = True
+ else:
+ self.insert_diff(pd, self._value)
+ self._received_diffs.append(pd)
+ self._version_id += 1
+ del self._pending_diffs[self._version_id +1]
+ _logger.debug("Updated value: %s", self._value)
+ self.do_changed_callback()
+ return True
+ else:
+ _logger.debug("Conflicting versionids: mine:%d, his:%d" %(self._version_id, versionid))
+ obj_da = self.diff(self._value, old)
+ if len(self._received_diffs)>0:
+ sender_a = self._received_diffs[-1].sender
+ else:
+ sender_a = None
+ da = DiffRec(self._version_id, sender_a, True, obj_da)
+ _logger.debug("Verifying compatibility")
+ if self._compatible_diffs(da.obj, db.obj):
+ _logger.debug("compatible diff")
+ if self.insert_diff(db, old):
+ #insert does take care of version actualization and updates self._version_id
+ _logger.debug("changed without error")
+ self.do_changed_callback()
+ return True
+ else:
+ _logger.debug("Error with insertion")
+ return False
+
+ def _compatible_diffs(self, da, db):
+ return True
+
+ def diff(self, new, old):
+ return None
+
+ def apply_diff_to(self, obj, diffobj):
+ return (obj, diffobj)
+
+ def apply_diff(self, diffobj):
+ (newobj, idiff) = self.apply_diff_to(self._value, diffobj)
+ self._value = newobj
+ return idiff
+
+ def is_locked(self):
+ return self._locked
+
+ def lock(self):
+ if not self._locked:
+ self._locked = True
+ self._locked_by = "me"
+ self._locked_time = time.time()
+ self._helper.LockObject(self._name, self._locked_time)
+
+ def receive_lock(self, sender, when):
+ if not self._locked or \
+ (self._locked and self._locked_time > when):
+ if self._locked and 'locklost' in self._options:
+ self._options['locklost']()
+ self._locked = True
+ self._locked_by = sender
+ self._locked_time = when
+ if 'locked' in self._options:
+ self._options['locked'](sender)
+
+ def unlock(self):
+ if self._locked and self._locked_by is 'me':
+ self._helper.UnlockObject(self._name)
+
+ def receive_unlock(self, sender):
+ if self._locked:
+ self._locked = False
+ self._locked_by = None
+ self._locked_time = 0
+ if 'unlocked' in self._options:
+ self._options['unlocked'](sender)
diff --git a/sharedstate.git/sharedstate/sharedobjects.py b/sharedstate.git/sharedstate/sharedobjects.py
new file mode 100644
index 0000000..341005a
--- /dev/null
+++ b/sharedstate.git/sharedstate/sharedobjects.py
@@ -0,0 +1,25 @@
+# sharedobjects.py, wrapper for importing SharedObject types
+# Reinier Heeres, reinier@heeres.eu
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Change log:
+# 2007-06-22: rwh, first version
+
+from sharedobject import SharedObject
+from sharedpython import SharedPython
+from shareddict import SharedDict
+from sharedtext import SharedText
+
diff --git a/sharedstate.git/sharedstate/sharedpython.py b/sharedstate.git/sharedstate/sharedpython.py
new file mode 100644
index 0000000..78a622a
--- /dev/null
+++ b/sharedstate.git/sharedstate/sharedpython.py
@@ -0,0 +1,234 @@
+# sharedpython.py, classes to aid activities in sharing a state
+# @author: Miguel Angel Alvarez, miguel@laptop.org
+# @author: Reinier Heeres
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Change log:
+#
+
+import pickle
+import difflib
+import logging
+from sharedobject import DiffRec
+_logger = logging.getLogger('sharedpython')
+
+from sharedobject import SharedObject
+
+class SharedPython(SharedObject):
+
+ def __init__(self, name, helper, opt={}):
+ SharedObject.__init__(self, name, helper, opt=opt)
+ self._value = None
+ self._picklestr = ''
+
+ def _divide_change(self, c):
+ """Separate the index and the string parts of the chage string"""
+ if ' ' in c:
+ i = c.index(' ')
+ return (c[:i], c[i+1:])
+ else:
+ print c
+ return None
+
+ def inverse_diff(self, diff):
+ """Return the inverse diff object"""
+ d = SharedObject.inverse_diff(self, diff)
+ if d == None:
+ obj = self._generate_inverse_diffobj(diff.obj)
+ return DiffRec(diff.version_id, diff.sender, True, obj)
+
+ def _generate_inverse_diffobj(self, changes):
+ ret = []
+ delta = 0
+ last_num = -1
+ last_n_in = -1
+
+ for c in changes:
+ n, s = self._divide_change(c)
+ l = len(s)
+ num = abs(int(n))
+ if num == last_num:
+ n_in = last_n_in
+ else:
+ n_in = num + delta
+ last_num = num
+ last_n_in = n_in
+
+ if c[0] == '+':
+ ret.append('-'+str(n_in)+' '+s)
+ delta += l
+ elif c[0] == '-':
+ ret.append('+'+str(n_in)+' '+s)
+ delta -= l
+ else:
+ print "Unknown line type:", c
+ ret = self._format_changes(ret)
+ return ret
+
+ def _update_interval(self, i, cs):
+ """Get an 'exclusion interval' (where no other different edits are accepted) for the change cs[i]"""
+ c = cs[i]
+ n, d = self._divide_change(c)
+ n = int(n)
+ if n >= 0:
+ return (n+1, n+1)
+ else:
+ return (abs(n), abs(n) + len(d))
+
+ def _intersect(self, ia, ib):
+ """function that takes 2 intervals (2 element ordered int lists) and returns whether they
+ intersect and, if not, which one is bigger:
+ ret > 0 => ia bigger
+ ret < 0 => ib bigger
+ ret = 0 => intersection"""
+ assert ia[1] >= ia[0] and len(ia) == 2
+ assert ib[1] >= ib[0] and len(ib) == 2
+ if ia[0] > ib[1]:
+ return 1 #No _intersect, ia bigger
+ if ia[1] < ib[0]:
+ return -1 #No _intersect, ia smaller
+ return 0 #Intersect
+
+ def _compatible_diffs(self, diff_a, diff_b):
+ """ It returns whether two change arrays act upon the same positions, and
+ cannot therefore be automatically merged without risking conflict"""
+ _logger.debug("_compatible_diffs(): a=%s, b=%s", diff_a, diff_b)
+ index_a = index_b = 0
+ while index_a < len(diff_a) and index_b < len(diff_b):
+ interval_a = self._update_interval(index_a, diff_a)
+ interval_b = self._update_interval(index_b, diff_b)
+ d = self._intersect(interval_a, interval_b)
+ if d == 0 :
+## if diff_a[index_a] not in diff_b and diff_b[index_b] not in diff_a:
+## print "change a:'%s'\tchange_b:'%s'" % (diff_a[index_a], diff_b[index_b])
+## return False
+## elif interval_a[1] > interval_b[1]:
+## index_b += 1
+## else:
+## index_a += 1
+## ATT: More restrictive version of compatible_diffs used right now
+ return False
+ elif d == 1:
+ index_b += 1
+ elif d == -1:
+ index_a += 1
+ else:
+ index_a += 1
+ index_b += 1
+ return True
+
+ def _format_changes(self, changes):
+ last_sign = None
+ last_num = -1
+ foreseen_index = -1
+ res=[]
+ for c in changes:
+ sign = c[0]
+ n, s = self._divide_change(c)
+ number = abs(int(n))
+ if sign == "+" and last_sign == "-" and (number == foreseen_index or number == last_num) :
+ res = res[:-1]+[sign +str(last_num)+" "+s, res[-1]]
+ last_sign = sign
+ foreseen_index = number + len(s)
+ last_num = number
+ else:
+ res.append(c)
+ last_sign = sign
+ foreseen_index = number + len(s)
+ last_num = number
+ return res
+
+ def diff(self, new_object, old_object):
+ """Generate a change array from two python objects"""
+ _logger.debug("Diffing old:%s (type: %s), new: %s (type: %s)", old_object, type(old_object),
+ new_object, type(new_object))
+ differ = difflib.Differ()
+ old = pickle.dumps(old_object)
+ new = pickle.dumps(new_object)
+## _logger.debug('Old text: %s', old)
+## _logger.debug(' New text:%s', new)
+ ret = []
+ raw_delta = list(differ.compare(old, new))
+## _logger.debug('raw delta: %s', raw_delta)
+ pos = 0
+ continuous = False
+ for r in raw_delta:
+ if r[:2] == "+ ":
+ if len(ret) > 0 and ret[-1][0] == "+" and continuous:
+ ret[-1] += r[2:]
+ #if 2 continuous additions occur, append at the end
+ else:
+ string = "+"+str(pos)+" "+r[2:]
+ ret.append(string)
+ continuous = True
+ elif r[:2] == "- ":
+ if len(ret) > 0 and ret[-1][0] == "-" and continuous:
+ ret[-1] += r[2:] #append at the end
+ else:
+ string = "-"+str(pos)+" "+r[2:]
+ ret.append(string)
+ continuous = True
+ pos += 1 # TODO: important change; verify
+ elif r[:2] == "? ":
+ pass
+ else:
+ continuous = False
+ pos += len(r) - 2
+## _logger.debug('Ret before format changes: %s', ret)
+ return self._format_changes(ret)
+
+ def _apply_diff_to(self, object, diffobj):
+ """ Apply a diff to a given object and return the new version
+ In this case, the provided object gets modified, too."""
+ old = pickle.dumps(object)
+ _logger.debug("_apply_diff_to(): old=%r, diffobj=%s", old, diffobj)
+ new = ""
+ pos = old_pos = 0
+ for c in diffobj:
+ id, st = self._divide_change(c)
+ pos = abs(int(id))
+ new += old[old_pos:pos]
+ if id[0] == "+":
+## _logger.debug("_apply_diff_to(): adding %r", st)
+ new += st
+ elif id[0] == "-":
+## _logger.debug("_apply_diff_to(): deleting %r", st)
+ if old[pos:pos+len(st)] != st:
+ exc = "Bad delete at %d, expected %s, got %r" % (pos,
+ st, old[pos:pos+len(st)])
+ raise Exception(exc)
+ pos += len(st)
+ old_pos = pos
+ if pos < len(old):
+ new += old[pos:]
+ res = pickle.loads(new)
+ _logger.debug("_apply_diff_to(): new=%r, res=%s", new, res)
+ idiff = self._generate_inverse_diffobj(diffobj)
+ return (res, idiff)
+
+ def get_version(self, versionid):
+ _logger.debug("get_version(): called with versionid = %d", versionid)
+ if versionid == self._version_id:
+ return self._value
+ ret = self._value
+ if versionid > self._version_id:
+ return None
+ for i in range(len(self._received_diffs)-1, self._get_diff_index(versionid), -1):
+ d = self._received_diffs[i]
+ idobj = self._generate_inverse_diffobj(d.obj)
+ ret = self._apply_diff_to(ret, idobj)[0]
+ _logger.debug("get_version(): return value: %s", ret)
+ return ret
diff --git a/sharedstate.git/sharedstate/sharedstate.py b/sharedstate.git/sharedstate/sharedstate.py
new file mode 100644
index 0000000..c69ace0
--- /dev/null
+++ b/sharedstate.git/sharedstate/sharedstate.py
@@ -0,0 +1,532 @@
+# sharedstate.py, classes to aid activities in sharing a state
+# Reinier Heeres, reinier@heeres.eu
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Change log:
+# 2007-05-22: rwh, first version
+
+"""General imports"""
+import types
+import copy
+
+import logging
+_logger = logging.getLogger('sharinghelper')
+
+"""DBus imorts"""
+import dbus
+import dbus.service
+import dbus.glib
+import gobject
+
+"""Sugar imports"""
+from sugar.presence import presenceservice
+from sugar.presence import activity
+from sugar.activity.activity import Activity
+
+"""Telepathy imports"""
+import telepathy
+import telepathy.client
+from tubeconn import TubeConnection
+
+from sharedobjects import *
+
+IFACE = "org.laptop.SharingHelper"
+
+class SharingHelper(dbus.service.Object):
+ """Class to help activities with state sharing"""
+
+ def __init__(self, actparent, opt={}):
+ self._activity = actparent
+ self._options = opt
+ self._shared_types = {}
+ self._shared_objects = {}
+ self._buddy_list = {}
+ self._service_name = ''
+ self._object_path = ''
+ self._tube = None
+ self._own_bus_name = None
+
+ self.register_shared_type('int', SharedPython, inc=False, autotype=int)
+ self.register_shared_type('long', SharedPython, inc=False, autotype=long)
+ self.register_shared_type('float', SharedPython, inc=False, autotype=float)
+ self.register_shared_type('string', SharedText, inc=True, autotype=str)
+ self.register_shared_type('ustring', SharedText, inc=True, autotype=unicode)
+ self.register_shared_type('dict', SharedDict, inc=True, autotype=dict)
+ self.register_shared_type('python', SharedPython, inc=True)
+
+ self._tp_support = TubePresenceSupport(self)
+ self._tp_support.connect_to_ps()
+
+ return
+
+ def __getitem__(self, key):
+ if type(key) != types.StringType:
+ raise TypeError, "SharingHelper.__getitem()__ only accepts string keys"
+
+ if isinstance(self._shared_objects[key], SharedDict):
+ return self._shared_objects[key]
+ else:
+ return self._shared_objects[key].get_value()
+
+ def __setitem__(self, key, val):
+ if type(key) != types.StringType:
+ raise TypeError, "SharingHelper.__setitem()__ only accepts string keys"
+ self._shared_objects[key].set_value(val)
+
+ def get_object(self, key):
+ if type(key) != types.StringType:
+ raise TypeError, "SharingHelper.get_object() only accepts string keys"
+ self._shared_objects[key]
+
+ def _tube_created_cb(self, tube, reqsync):
+ self._tube = tube
+ self._object_path = '/org/laptop/SharingHelper/%s' % (self._activity._shared_activity._id)
+
+ if self._tube is None:
+ _logger.error('setup_shared_tube(): no tube connection yet!')
+ return False
+
+ dbus.service.Object.__init__(self, self._tube, self._object_path)
+
+ _logger.info('Connected to bus as %s, object path %s', self._service_name, self._object_path)
+ self._activity._shared_activity.connect('buddy-joined', self._buddy_joined_cb)
+ self._activity._shared_activity.connect('buddy-left', self._buddy_left_cb)
+
+ self._tube.add_signal_receiver(self._receive_object, 'SendObject', \
+ IFACE, path=self._object_path, sender_keyword='sender')
+ self._tube.add_signal_receiver(self._receive_new_object, 'SendNewObject', \
+ IFACE, path=self._object_path, sender_keyword='sender')
+ self._tube.add_signal_receiver(self._receive_sync_request, 'RequestSync', \
+ IFACE, path=self._object_path, sender_keyword='sender')
+ self._tube.add_signal_receiver(self._receive_message, 'SendMessage', \
+ IFACE, path=self._object_path, sender_keyword='sender')
+
+ _logger.info('Tube setup successful!')
+
+ if reqsync:
+ self.synchronize()
+ if 'on_connect' in self._options:
+ self._options['on_connect']()
+
+ return True
+
+ def _buddy_joined_cb(self, activity, buddy):
+ """Callback for buddy joining"""
+ _logger.info('Buddy %s joined', buddy._properties["nick"])
+
+ key = buddy._properties["key"]
+ if key not in self._buddy_list:
+ self._buddy_list[key] = buddy
+
+ def _buddy_left_cb(self, activity, buddy):
+ """Callback for buddy leaving"""
+ _logger.info('Buddy %s left', buddy)
+
+ key = buddy._properties["key"]
+ if buddy in self._buddy_list:
+ del self._buddy_list[key]
+
+ def get_buddy_list(self):
+ return self._buddy_list
+
+ def tube_connected(self):
+ if self._tube is None:
+ return False
+
+ return True
+
+##########################################
+# Shared object collection managing functions
+##########################################
+
+ def register_shared_type(self, name, oclass, inc=1, autotype=None):
+ self._shared_types[name] = (oclass, inc, autotype)
+
+ def add_shared_object(self, o):
+ """Add shared object to list of objects to process"""
+ self._shared_objects[o._name] = o
+ return True
+
+ def create_shared_object(self, name, opt, iv=None):
+ """Create a new shared object"""
+
+# Auto-detect object type
+ if 'type' not in opt:
+ for key, (oclass, inc, autotype) in self._shared_types.iteritems():
+ if autotype is not None and isinstance(iv, autotype):
+ opt['type'] = key
+ opt['incremental'] = inc
+
+ _logger.debug("Shared object %s of type %s requested", name, opt['type'])
+
+ if opt['type'] not in self._shared_types:
+ _logger.error("Shared object type %s unknown", opt['type'])
+ return None
+
+ (oclass, inc, autotype) = self._shared_types[opt['type']]
+ obj = oclass(name, opt=opt, helper=self)
+
+ if obj is None:
+ return None
+
+ self.add_shared_object(obj)
+
+# Tell other instances about dynamically created objects
+ if 'dynamic' in opt and opt['dynamic'] is True:
+ self.SendNewObject(name, opt)
+
+ if iv is not None:
+ obj.set_value(iv)
+
+ return obj
+
+##########################################
+# Sending and receiving objects
+##########################################
+
+ def is_remote_sender(self, sender):
+ if self._own_bus_name is None:
+ self._own_bus_name = self._tube.get_unique_name()
+ _logger.info('Acquired unique name: %s', self._own_bus_name)
+
+ if sender == self._own_bus_name:
+ return False
+ else:
+ return True
+
+ @dbus.service.signal(dbus_interface=IFACE, signature='subs')
+ def SendObject(self, name, versionid, incremental, objstr):
+ """Signal proxy to send an object"""
+ _logger.info('Sending object %s v%d on bus (inc=%d)', name, versionid, incremental)
+
+ def _receive_object(self, name, versionid, incremental, objstr, sender=None):
+ """Response to SendObject() signal; updates the state of the shared object.
+ If an update is requested for an object that does not exist yet we
+ must be in a confused state, so ask for a sync.
+ """
+ if not self.is_remote_sender(sender):
+ return True
+
+ _logger.info('receive_object(): Received object: %s v%d (inc=%d) from %s, %s', \
+ name, versionid, incremental, sender, objstr)
+ if name in self._shared_objects:
+ self._shared_objects[name].process_update(versionid, incremental, objstr, sender)
+ else:
+ _logger.error('receive_object(): Unknown object %s; requesting sync', name)
+ self.synchronize()
+
+ @dbus.service.signal(dbus_interface=IFACE, signature='sa{sv}')
+ def SendNewObject(self, name, opts):
+ """Signal proxy to create a new object"""
+ _logger.info('Sending new object %s on bus', name)
+
+ def _receive_new_object(self, name, opts, sender=None):
+ """Response to SendNewObject() signal; creates a new shared object.
+ If creation is requested for an object that exists already, leave
+ it untouched.
+ If the 'objectcreated' option is set call that function
+ """
+ if not self.is_remote_sender(sender):
+ return True
+
+ _logger.info('receive_new_object(): Received new object: %s from %s', name, sender)
+ if name in self._shared_objects:
+ _logger.error('receive_new_object(): object already exists; leaving untouched')
+ else:
+ obj = self.create_shared_object(name, opts)
+ if 'objectcreated' in self._options:
+ self._options['objectcreated'](obj)
+
+ def synchronize(self):
+ self._in_sync = False
+ #self.RequestSync()
+ #gobject.timeout_add(1000, self._verify_sync)
+
+ def _verify_sync(self):
+ if not self._in_sync:
+ self.RequestSync()
+ return True
+ return False
+
+ @dbus.service.signal(dbus_interface=IFACE, signature='')
+ def RequestSync(self):
+ """Signal proxy to request synchronization"""
+ _logger.info('Sending synchronization request...')
+
+ def _receive_sync_request(self, sender=None):
+ """Called when somebody sends a SyncRequest."""
+ if not self.is_remote_sender(sender):
+ return True
+
+ _logger.info('Received sync request from %s, sending objects', sender)
+ for name, obj in self._shared_objects.iteritems():
+# Sending options is only necessary for dynamically created objects; implement this later
+# sendopt = copy.deepcopy(obj.Options)
+# if 'changed' in sendopt:
+# del sendopt['changed']
+ self._tube.get_object(sender, self._object_path).ReceiveSyncObject( \
+ name, {'empty': True}, obj._version_id, obj.encode(obj._value))
+
+ @dbus.service.method(dbus_interface=IFACE, in_signature='sa{sv}us', out_signature='', sender_keyword='sender')
+ def ReceiveSyncObject(self, name, opt, versionid, objstr, sender=None):
+ """Function to receive full synchronisation. Used when joining an
+ existing activity or when in a confused state.
+ If an object does not exists yet it is created; the version is forced
+ """
+ _logger.debug('Receiving sync object %s from %s', name, sender)
+
+ if not self.is_remote_sender(sender):
+ return True
+
+ self._in_sync = True
+
+ if name not in self._shared_objects:
+ obj = self.create_shared_object(name, opts)
+
+ self._shared_objects[name].process_update(versionid, False, objstr, sender, force=True)
+
+ @dbus.service.signal(dbus_interface=IFACE, signature='sd')
+ def LockObject(self, name, when):
+ """Signal proxy to request object lock"""
+ _logger.debug('Sending lock signal for %s', name)
+
+ def _receive_lock_object(self, name, when, sender=None):
+ """Called when somebody tries to lock an object"""
+ if name in self._shared_objects:
+ self._shared_objects[name].receive_lock(sender, when)
+ else:
+ _logger.error('Received lock signal for non-existing object %s', name)
+
+ @dbus.service.signal(dbus_interface=IFACE, signature='s')
+ def UnlockObject(self, name):
+ """Signal proxy to signal release of an object lock"""
+ _logger.debug('Sending unlock signal for %s', name)
+
+ def _receive_unlock_object(self, name, sender=None):
+ """Called when somebody signals unlocking of an object"""
+ if name in self._shared_objects:
+ self._shared_objects[name].receive_unlock()
+ else:
+ _logger.error('Received unlock signal for non-existing object %s', name)
+
+##########################################
+# Simple message sending between apps
+##########################################
+
+ @dbus.service.signal(dbus_interface=IFACE, signature='sv')
+ def SendMessage(self, msg, val):
+ """Signal proxy to send simple messages"""
+
+ def send_message(self, msg, val, to=None):
+ _logger.debug('send_message(msg=%s, val=%r)', msg, val)
+ try:
+ if to is None:
+ self.SendMessage(msg, val)
+ except Exception, inst:
+ _logger.error('send_message: %s', inst)
+
+ def _receive_message(self, msg, val, sender=None):
+ if not self.is_remote_sender(sender):
+ return True
+
+ _logger.info('_receive_message(%s, %r)', msg, val)
+
+ if 'receive_message' in self._options:
+ self._options['receive_message'](msg, val)
+
+##########################################
+# Functions for turn-based activities
+##########################################
+
+class TurnBased:
+ def __init__(self, helper):
+ self._helper = helper
+ self._helper.create_shared_object('_turntoken', {
+ 'locked': self.my_turn,
+ 'unlocked': self.turn_changed,
+ 'locklost': self.turn_problem,
+ })
+ self._playing = False
+ self._playing_buddies = []
+ self._watching_buddies = []
+
+ def set_number_of_players(self, minp, maxp=None):
+ self._started = False
+ self._min_players = minp
+ self._max_players = maxp
+ self.check_ready()
+
+ def set_turn_callbacks(self, d):
+ """Set callbacks for turn-based functions:
+ ready: called when enough players to start
+ myturn: called when it's this instance's turn
+ """
+ self._turn_callbacks = d
+
+ def check_ready(self):
+ if len(self._helper.get_buddy_list()) >= self._min_players:
+ self._turn_callbacks['ready']()
+ self._started = True
+
+ def start(self):
+ self._playing = True
+ self._playing_buddies = self._helper.get_buddy_list()
+ self._current_player = -1
+ self.turn_changed(self, None)
+
+ def who_is_next_player(self):
+ self._current_player = (self._current_player + 1) % len(self._playing_buddies)
+ return self._playing_buddies[self._current_player]
+
+ def turn_changed(self, sender):
+ if sender is not None and 'processturn' in self._turn_callbacks:
+ self._turn_callbacks['processturn'](sender, self.get_turn_data())
+ if self.who_is_next_player() == self._helper._own_dbus_name:
+ self._helper.get_object('_turntoken').lock()
+ if 'myturn' in self._turn_callbacks:
+ self._turn_callbacks['myturn']()
+
+ def release_turn(self, turndata):
+ self._helper['_turndata'] = turndata
+ self._helper.get_object('_turntoken').unlock()
+
+ return
+
+ def turn_problem(self, sender):
+ return
+
+
+
+##########################################
+# Functions for Tube/Presence support
+##########################################
+
+class TubePresenceSupport:
+
+ def __init__(self, parent):
+ self._parent = parent
+ self._activity = parent._activity
+
+ self._request_sync = False
+
+ return
+
+ def connect_to_ps(self):
+ """Connect to the presence service"""
+
+ self._activity.connect('shared', self._shared_cb)
+
+ self._ps = presenceservice.get_instance()
+ if self._activity._shared_activity:
+ # We are trying to join, call this if it worked
+ self._activity.connect('joined', self._joined_cb)
+ if self._activity.get_shared():
+ self.joined_cb()
+
+ def setup_shared_activity(self):
+ """Setup things to talk to other SharingHelpers """
+
+ if self._activity._shared_activity is None:
+ _logger.error('setup_shared_activity(): no _shared_activity yey!')
+ return False
+
+ self._service_name = 'org.laptop.SharingHelper'
+
+# Get basic telepathy stuff
+ name, path = self._ps.get_preferred_connection()
+ _logger.info('Preferred connection: name %s, path %s', name, path)
+ self._tp_conn_name = name
+ self._tp_conn_path = path
+ self._tp_conn = telepathy.client.Connection(name, path)
+
+# Setup tubes channel
+ self._tube_service_name = '%s.Tube' % (self._service_name)
+ bus_name, conn_path, channel_paths = self._activity._shared_activity.get_channels()
+ room = None
+ self._text_channel = None
+ self._tube_channel = None
+ for channel_path in channel_paths:
+ channel = telepathy.client.Channel(bus_name, channel_path)
+ htype, handle = channel.GetHandle()
+ if htype == telepathy.HANDLE_TYPE_ROOM:
+ _logger.info('Found room with handle %d', handle)
+ room = handle
+ ctype = channel.GetChannelType()
+ if ctype == telepathy.CHANNEL_TYPE_TUBES:
+ _logger.info('Found Tubes channel %s', channel_path)
+ self._tube_channel = channel
+ elif ctype == telepathy.CHANNEL_TYPE_TEXT:
+ _logger.info('Found Text channel %s', channel_path)
+ self._text_channel = channel
+
+ if room is None:
+ _logger.error('Didn\'t find room')
+
+ if self._tube_channel is None:
+ self._tube_channel = self._tp_conn.request_channel( \
+ telepathy.CHANNEL_TYPE_TUBES, \
+ telepathy.HANDLE_TYPE_ROOM, room, True)
+
+ self._tube_channel[telepathy.CHANNEL_TYPE_TUBES].connect_to_signal('NewTube', self._new_tube_cb)
+
+ def _shared_cb(self, activity):
+ """Callback for when our activity is shared"""
+ _logger.info('Activity shared')
+ self.setup_shared_activity()
+ self._tube_channel[telepathy.CHANNEL_TYPE_TUBES].OfferDBusTube( \
+ self._tube_service_name, {})
+
+ def _joined_cb(self, activity):
+ """Callback for when we join an existing activity"""
+ _logger.info('Joined existing activity')
+ self._request_sync = True
+ self.setup_shared_activity()
+
+ _logger.info('Getting tubes list...')
+ self._tube_channel[telepathy.CHANNEL_TYPE_TUBES].ListTubes( \
+ reply_handler=self._list_tubes_reply_cb,
+ error_handler=self._list_tubes_error_cb)
+
+ def _new_tube_cb(self, id, initiator, type, service, params, state):
+ """Callback for when a new tube is created"""
+ _logger.info('new_tube_cb(): id=%d, init=%d, type=%d, svc=%s, state=%d, _request_sync=%r', id, initiator, type, service, state, self._request_sync)
+ _logger.info('Expected: type=%d, svc=%s, state=%d', telepathy.TUBE_TYPE_DBUS, self._tube_service_name, telepathy.TUBE_STATE_LOCAL_PENDING)
+ if type == telepathy.TUBE_TYPE_DBUS and service == self._tube_service_name:
+ if state == telepathy.TUBE_STATE_LOCAL_PENDING:
+ self._tube_channel[telepathy.CHANNEL_TYPE_TUBES].AcceptDBusTube(id)
+ self._tube = TubeConnection(self._tp_conn, \
+ self._tube_channel[telepathy.CHANNEL_TYPE_TUBES], id, \
+ group_iface=self._text_channel[telepathy.CHANNEL_INTERFACE_GROUP])
+
+ if self._tube is None:
+ _logger.error('Don\'t have a tube channel, not connecting')
+ return False
+
+ self._parent._tube_created_cb(self._tube, self._request_sync)
+
+ def _list_tubes_reply_cb(self, tubes):
+ """Callback for when requesting an existing tube"""
+ _logger.debug('_list_tubes_reply_cb(): %r', tubes)
+ for tube_info in tubes:
+ _logger.debug('tube_info: %r', tube_info)
+ self._new_tube_cb(*tube_info)
+
+ def _list_tubes_error_cb(self, e):
+ _logger.error('list_tubes() failed: %s', e)
+
+ def _tube_participant_change_cb(self, added, removed):
+ _logger.info('Adding participants: %r', added)
+ _logger.info('Removing participants: %r', removed)
diff --git a/sharedstate.git/sharedstate/sharedtext.py b/sharedstate.git/sharedstate/sharedtext.py
new file mode 100644
index 0000000..384f0a8
--- /dev/null
+++ b/sharedstate.git/sharedstate/sharedtext.py
@@ -0,0 +1,181 @@
+# sharedobjects.py, classes to aid activities in sharing a state
+# Reinier Heeres, reinier@heeres.eu
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 2 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+#
+# Change log:
+# 2007-06-21: rwh, first version
+
+import types
+import difflib
+import logging
+_logger = logging.getLogger('sharinghelper')
+
+from sharedobject import SharedObject
+
+def my_joinlines(list, addsep=False, separator='\n'):
+ if len(list) == 0:
+ return ''
+ string = list[0]
+ for s in list[1:]:
+ if addsep:
+ string += separator
+ string += s
+ return string
+
+def my_splitlines(str, keepsep=False, separators=['\n']):
+ list = []
+ if str is None:
+ return list
+ ofs = 0
+ startofs = 0
+ while ofs < len(str):
+ if str[ofs] in separators:
+ if keepsep:
+ list.append(str[startofs:ofs+1])
+ else:
+ if startofs != ofs:
+ list.append(str[startofs:ofs])
+ else:
+ list.append('')
+ startofs = ofs + 1
+ ofs += 1
+ return list
+
+def string_to_list(str):
+ list = []
+ if str is not None:
+ for i in str:
+ list.append(i)
+ return list
+
+def list_to_string(l):
+ str = ""
+ for i in l:
+ str += i
+ return str
+
+class SharedText(SharedObject):
+ """Shared text object, generates line-by-line difference objects"""
+
+ REPLACE = 0
+ DELETE = 1
+ INSERT = 2
+
+ BY_CHAR = 0
+ BY_WORD = 1
+ BY_LINE = 2
+
+ def __init__(self, name, helper, opt={}, by_what=BY_CHAR):
+ SharedObject.__init__(self, name, helper, opt=opt)
+ self._value = ''
+ self._by_what = by_what
+
+ def split(self, s):
+ if self._by_what == SharedText.BY_CHAR:
+ return string_to_list(s)
+ elif self._by_what == SharedText.BY_WORD:
+ return my_splitlines(s, keepsep=True, separators=['\n', ' '])
+ elif self._by_what == SharedText.BY_LINE:
+ return my_splitlines(s, keepsep=True)
+ else:
+ _logger.error('SharedText.split(): unknown splitting type')
+
+ def join(self, l):
+ if self._by_what == SharedText.BY_CHAR:
+ return list_to_string(l)
+ elif self._by_what == SharedText.BY_WORD:
+ return my_joinlines(l)
+ elif self._by_what == SharedText.BY_LINE:
+ return my_joinlines(l)
+ else:
+ _logger.error('SharedText.split(): unknown splitting type')
+
+ def _compatible_diffs(self, da, db):
+ return True
+
+ def diff(self, cur, old):
+ """Generate a difference object between to text objects"""
+
+ _logger.debug('Generating diff between %r and %r', cur, old)
+
+ l1 = self.split(cur)
+ l2 = self.split(old)
+ sm = difflib.SequenceMatcher(None, l2, l1)
+ ret = []
+ for (tag, i1, i2, j1, j2) in sm.get_opcodes():
+ if tag is 'replace':
+ ret.append((SharedText.REPLACE, (i1, i2, j1, j2), l1[j1:j2]))
+ elif tag is 'delete':
+ ret.append((SharedText.DELETE, (i1, i2, j1, j2), None))
+ elif tag is 'insert':
+ ret.append((SharedText.INSERT, (i1, i2, j1, j2), l1[j1:j2]))
+ elif tag is 'equal':
+ pass
+ else:
+ _logger.warning('SharedText.diff(): unkown tag: %s', tag)
+
+ if len(ret) is 0:
+ return None
+ else:
+ return ret
+
+ def _apply_diff_to(self, obj, diffobj):
+ """Apply a diff and return an object that describes the inverse diff"""
+
+ if diffobj is None:
+ _logger.error('SharedText.apply_diff_to(): no diffobj given')
+ return (None, None)
+
+ _logger.debug('Applying %r to %r', diffobj, obj)
+ ret = []
+ d = 0
+ l2 = self.split(obj)
+ for (tag, (i1, i2, j1, j2), val) in diffobj:
+ i1 -= d
+ i2 -= d
+# print 'd: %r' % (d)
+ if tag is SharedText.REPLACE:
+ ret.append((SharedText.REPLACE, (j1, j2, i1, i2), l2[i1:i2]))
+ l2[i1:i2] = val
+ d -= (j2 - j1) - (i2 - i1)
+ elif tag is SharedText.DELETE:
+ ret.append((SharedText.INSERT, (j1, j2, i1, i2), l2[i1:i2]))
+ del(l2[i1:i2])
+ d += i2 - i1
+ elif tag is SharedText.INSERT:
+ ret.append((SharedText.DELETE, (j1, j2, i1, i2), None))
+ l2[i1:i1] = val
+ d -= j2 - j1
+
+ obj = self.join(l2)
+ return (obj, ret)
+
+
+ def insert(self, ofs, str):
+ self._value = self._value[:ofs] + str + self._value[ofs:]
+ dobj = {"type": 'chars', "data": (SharedText.INSERT, ofs, str)}
+ self.changed(dobj, True)
+
+ def remove(self, ofs, len):
+ del self._value[ofs:ofs+len]
+ dobj = {"type": 'chars', "data": (SharedText.REMOVE, ofs, len)}
+ self.changed(dobj, True)
+
+ def replace(self, ofs, str):
+ self._value[ofs:ofs+len(str)] = str
+ dobj = {"type": 'chars', "data": (SharedText.REPLACE, ofs, str)}
+ self.changed(dobj, True)
+
diff --git a/sharedstate.git/sharedstate/tubeconn.py b/sharedstate.git/sharedstate/tubeconn.py
new file mode 100644
index 0000000..b487391
--- /dev/null
+++ b/sharedstate.git/sharedstate/tubeconn.py
@@ -0,0 +1,107 @@
+# This should eventually land in telepathy-python, so has the same license:
+
+# Copyright (C) 2007 Collabora Ltd. <http://www.collabora.co.uk/>
+#
+# This program is free software; you can redistribute it and/or modify
+# it under the terms of the GNU Lesser General Public License as published
+# by the Free Software Foundation; either version 2.1 of the License, or
+# (at your option) any later version.
+#
+# This program is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU Lesser General Public License for more details.
+#
+# You should have received a copy of the GNU Lesser General Public License
+# along with this program; if not, write to the Free Software
+# Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
+
+
+__all__ = ('TubeConnection',)
+__docformat__ = 'reStructuredText'
+
+
+import logging
+
+from dbus.connection import Connection
+
+
+logger = logging.getLogger('telepathy.tubeconn')
+
+
+class TubeConnection(Connection):
+
+ def __new__(cls, conn, tubes_iface, tube_id, address=None,
+ group_iface=None, mainloop=None):
+ if address is None:
+ address = tubes_iface.GetDBusTubeAddress(tube_id)
+ self = super(TubeConnection, cls).__new__(cls, address,
+ mainloop=mainloop)
+
+ self._tubes_iface = tubes_iface
+ self.tube_id = tube_id
+ self.participants = {}
+ self.bus_name_to_handle = {}
+ self._mapping_watches = []
+
+ if group_iface is None:
+ method = conn.GetSelfHandle
+ else:
+ method = group_iface.GetSelfHandle
+ method(reply_handler=self._on_get_self_handle_reply,
+ error_handler=self._on_get_self_handle_error)
+
+ return self
+
+ def _on_get_self_handle_reply(self, handle):
+ self.self_handle = handle
+ match = self._tubes_iface.connect_to_signal('DBusNamesChanged',
+ self._on_dbus_names_changed)
+ self._tubes_iface.GetDBusNames(self.tube_id,
+ reply_handler=self._on_get_dbus_names_reply,
+ error_handler=self._on_get_dbus_names_error)
+ self._dbus_names_changed_match = match
+
+ def _on_get_self_handle_error(self, e):
+ logging.basicConfig()
+ logger.error('GetSelfHandle failed: %s', e)
+
+ def close(self):
+ self._dbus_names_changed_match.remove()
+ self._on_dbus_names_changed(self.tube_id, (), self.participants.keys())
+ super(TubeConnection, self).close()
+
+ def _on_get_dbus_names_reply(self, names):
+ self._on_dbus_names_changed(self.tube_id, names, ())
+
+ def _on_get_dbus_names_error(self, e):
+ logging.basicConfig()
+ logger.error('GetDBusNames failed: %s', e)
+
+ def _on_dbus_names_changed(self, tube_id, added, removed):
+ if tube_id == self.tube_id:
+ for handle, bus_name in added:
+ if handle == self.self_handle:
+ # I've just joined - set my unique name
+ self.set_unique_name(bus_name)
+ self.participants[handle] = bus_name
+ self.bus_name_to_handle[bus_name] = handle
+
+ # call the callback while the removed people are still in
+ # participants, so their bus names are available
+ for callback in self._mapping_watches:
+ callback(added, removed)
+
+ for handle in removed:
+ bus_name = self.participants.pop(handle, None)
+ self.bus_name_to_handle.pop(bus_name, None)
+
+ def watch_participants(self, callback):
+ self._mapping_watches.append(callback)
+ if self.participants:
+ # GetDBusNames already returned: fake a participant add event
+ # immediately
+ added = []
+ for k, v in self.participants.iteritems():
+ added.append((k, v))
+ callback(added, [])