[chronojump] Implemented language change



commit 2effdb19e9616a0d4abb2b4cd143b13312851964
Author: Xavier de Blas <xaviblas gmail com>
Date:   Fri Jul 24 03:04:29 2015 +0200

    Implemented language change

 configure.ac              |    1 +
 glade/chronojump.glade    |  588 ++++++++++++++++++++++++++++++++-------------
 src/Makefile.am           |    2 +-
 src/chronojump.cs         |   31 ++-
 src/constants.cs          |   25 --
 src/gui/chronojump.cs     |    2 -
 src/gui/language.cs       |  116 ---------
 src/gui/preferences.cs    |  132 ++++++-----
 src/preferences.cs        |    2 +-
 src/sqlite/main.cs        |   11 +-
 src/sqlite/preferences.cs |    4 +-
 src/util.cs               |   48 ----
 src/utilLanguage.cs       |   59 +++++
 13 files changed, 584 insertions(+), 437 deletions(-)
---
diff --git a/configure.ac b/configure.ac
index da97da5..7582ca0 100644
--- a/configure.ac
+++ b/configure.ac
@@ -99,6 +99,7 @@ esac
 AM_CONDITIONAL(OSTYPE_WINDOWS, test x$ostype = xWindows)
 AM_CONDITIONAL(OSTYPE_OS_X, test x$ostype = xOS_X)
 AM_CONDITIONAL(OSTYPE_LINUX, test x$ostype = xLinux)
+AC_SUBST(GMCS_FLAGS, ["$GMCS_FLAGS"])
 AC_MSG_RESULT($ostype)
 
 
diff --git a/glade/chronojump.glade b/glade/chronojump.glade
index 7602ad8..9da6c19 100644
--- a/glade/chronojump.glade
+++ b/glade/chronojump.glade
@@ -7571,6 +7571,12 @@ after time</property>
                                                             <child>
                                                             <placeholder/>
                                                             </child>
+                                                            <child>
+                                                            <placeholder/>
+                                                            </child>
+                                                            <child>
+                                                            <placeholder/>
+                                                            </child>
                                                             </widget>
                                                             </child>
                                                             <child>
@@ -8937,6 +8943,12 @@ after time</property>
                                                             <child>
                                                             <placeholder/>
                                                             </child>
+                                                            <child>
+                                                            <placeholder/>
+                                                            </child>
+                                                            <child>
+                                                            <placeholder/>
+                                                            </child>
                                                             </widget>
                                                             <packing>
                                                             <property name="position">2</property>
@@ -9944,6 +9956,12 @@ after time</property>
                                                             <child>
                                                             <placeholder/>
                                                             </child>
+                                                            <child>
+                                                            <placeholder/>
+                                                            </child>
+                                                            <child>
+                                                            <placeholder/>
+                                                            </child>
                                                             </widget>
                                                             <packing>
                                                             <property name="position">4</property>
@@ -21404,6 +21422,12 @@ by you</property>
                         <child>
                           <placeholder/>
                         </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
                       </widget>
                     </child>
                   </widget>
@@ -22310,6 +22334,12 @@ by you</property>
                         <child>
                           <placeholder/>
                         </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
                       </widget>
                     </child>
                   </widget>
@@ -23708,6 +23738,12 @@ by you</property>
               <placeholder/>
             </child>
             <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
               <widget class="GtkButton" id="button_video_url">
                 <property name="visible">True</property>
                 <property name="can_focus">True</property>
@@ -24163,6 +24199,12 @@ by you</property>
             <child>
               <placeholder/>
             </child>
+            <child>
+              <placeholder/>
+            </child>
+            <child>
+              <placeholder/>
+            </child>
           </widget>
           <packing>
             <property name="expand">True</property>
@@ -31949,93 +31991,6 @@ options</property>
       </widget>
     </child>
   </widget>
-  <widget class="GtkWindow" id="language_window">
-    <property name="width_request">350</property>
-    <property name="visible">True</property>
-    <property name="can_focus">False</property>
-    <property name="border_width">10</property>
-    <property name="title" translatable="yes">Chronojump language select</property>
-    <property name="modal">True</property>
-    <property name="window_position">center-always</property>
-    <property name="skip_taskbar_hint">True</property>
-    <property name="skip_pager_hint">True</property>
-    <property name="decorated">False</property>
-    <signal name="delete_event" handler="on_delete_event" swapped="no"/>
-    <child>
-      <widget class="GtkVBox" id="vbox92">
-        <property name="visible">True</property>
-        <property name="can_focus">False</property>
-        <property name="spacing">10</property>
-        <child>
-          <widget class="GtkLabel" id="label321">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="label" translatable="yes">Please select &lt;b&gt;Chronojump&lt;/b&gt; 
language</property>
-            <property name="use_markup">True</property>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">0</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="GtkHBox" id="hbox_combo_language">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <child>
-              <placeholder/>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">1</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="GtkLabel" id="label_linux_restart">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <property name="wrap">True</property>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">False</property>
-            <property name="position">2</property>
-          </packing>
-        </child>
-        <child>
-          <widget class="GtkHButtonBox" id="hbuttonbox33">
-            <property name="visible">True</property>
-            <property name="can_focus">False</property>
-            <child>
-              <widget class="GtkButton" id="button_accept">
-                <property name="label">gtk-ok</property>
-                <property name="visible">True</property>
-                <property name="can_focus">True</property>
-                <property name="can_default">True</property>
-                <property name="receives_default">False</property>
-                <property name="use_stock">True</property>
-                <signal name="clicked" handler="on_button_accept_clicked" swapped="no"/>
-                <accelerator key="Escape" signal="clicked"/>
-              </widget>
-              <packing>
-                <property name="expand">False</property>
-                <property name="fill">False</property>
-                <property name="position">0</property>
-              </packing>
-            </child>
-          </widget>
-          <packing>
-            <property name="expand">False</property>
-            <property name="fill">True</property>
-            <property name="position">3</property>
-          </packing>
-        </child>
-      </widget>
-    </child>
-  </widget>
   <widget class="GtkWindow" id="person_multiple_infinite">
     <property name="visible">True</property>
     <property name="can_focus">False</property>
@@ -35465,6 +35420,42 @@ options</property>
                             <child>
                               <placeholder/>
                             </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
+                            <child>
+                              <placeholder/>
+                            </child>
                           </widget>
                         </child>
                       </widget>
@@ -37052,6 +37043,30 @@ To differentiate between male and female, use the values 1/0, or m/f, or M/F on
                     <child>
                       <placeholder/>
                     </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
                   </widget>
                 </child>
               </widget>
@@ -38443,12 +38458,6 @@ To differentiate between male and female, use the values 1/0, or m/f, or M/F on
                                       <placeholder/>
                                     </child>
                                     <child>
-                                      <placeholder/>
-                                    </child>
-                                    <child>
-                                      <placeholder/>
-                                    </child>
-                                    <child>
                                       <widget class="GtkLabel" id="label218">
                                         <property name="visible">True</property>
                                         <property name="can_focus">False</property>
@@ -39354,6 +39363,12 @@ To differentiate between male and female, use the values 1/0, or m/f, or M/F on
                                     <child>
                                       <placeholder/>
                                     </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
+                                    <child>
+                                      <placeholder/>
+                                    </child>
                                   </widget>
                                 </child>
                               </widget>
@@ -41384,6 +41399,293 @@ It starts before and arrives there with some speed.</property>
               </packing>
             </child>
             <child>
+              <widget class="GtkVBox" id="vbox15">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="border_width">8</property>
+                <property name="spacing">30</property>
+                <child>
+                  <widget class="GtkVBox" id="vbox16">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">12</property>
+                    <child>
+                      <widget class="GtkHBox" id="hbox14">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <widget class="GtkLabel" id="label48">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">Language</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkLabel" id="label49">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">This change needs restart</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="pack_type">end</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkVBox" id="vbox17">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <property name="spacing">10</property>
+                        <child>
+                          <widget class="GtkRadioButton" id="radio_language_detected">
+                            <property name="visible">True</property>
+                            <property name="can_focus">True</property>
+                            <property name="receives_default">False</property>
+                            <property name="active">True</property>
+                            <property name="draw_indicator">True</property>
+                            <signal name="toggled" handler="on_radio_language_toggled" swapped="no"/>
+                            <child>
+                              <widget class="GtkHBox" id="hbox15">
+                                <property name="visible">True</property>
+                                <property name="can_focus">False</property>
+                                <property name="spacing">6</property>
+                                <child>
+                                  <widget class="GtkLabel" id="label50">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <property name="label" translatable="yes">Use detected 
language</property>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">0</property>
+                                  </packing>
+                                </child>
+                                <child>
+                                  <widget class="GtkHBox" id="hbox16">
+                                    <property name="visible">True</property>
+                                    <property name="can_focus">False</property>
+                                    <child>
+                                      <widget class="GtkLabel" id="label52">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label">(</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">0</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkLabel" id="label51">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label" translatable="yes">recommended</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">False</property>
+                                        <property name="fill">False</property>
+                                        <property name="position">1</property>
+                                      </packing>
+                                    </child>
+                                    <child>
+                                      <widget class="GtkLabel" id="label53">
+                                        <property name="visible">True</property>
+                                        <property name="can_focus">False</property>
+                                        <property name="label">)</property>
+                                      </widget>
+                                      <packing>
+                                        <property name="expand">True</property>
+                                        <property name="fill">True</property>
+                                        <property name="position">2</property>
+                                      </packing>
+                                    </child>
+                                  </widget>
+                                  <packing>
+                                    <property name="expand">True</property>
+                                    <property name="fill">True</property>
+                                    <property name="position">1</property>
+                                  </packing>
+                                </child>
+                              </widget>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkHBox" id="hbox17">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="spacing">10</property>
+                            <child>
+                              <widget class="GtkRadioButton" id="radio_language_force">
+                                <property name="label" translatable="yes">Force language</property>
+                                <property name="visible">True</property>
+                                <property name="can_focus">True</property>
+                                <property name="receives_default">False</property>
+                                <property name="active">True</property>
+                                <property name="draw_indicator">True</property>
+                                <property name="group">radio_language_detected</property>
+                                <signal name="toggled" handler="on_radio_language_toggled" swapped="no"/>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">0</property>
+                              </packing>
+                            </child>
+                            <child>
+                              <widget class="GtkHBox" id="hbox_combo_language">
+                                <property name="visible">True</property>
+                                <property name="sensitive">False</property>
+                                <property name="can_focus">False</property>
+                                <child>
+                                  <placeholder/>
+                                </child>
+                              </widget>
+                              <packing>
+                                <property name="expand">False</property>
+                                <property name="fill">False</property>
+                                <property name="position">1</property>
+                              </packing>
+                            </child>
+                          </widget>
+                          <packing>
+                            <property name="expand">True</property>
+                            <property name="fill">True</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">0</property>
+                  </packing>
+                </child>
+                <child>
+                  <widget class="GtkVBox" id="vbox3">
+                    <property name="visible">True</property>
+                    <property name="can_focus">False</property>
+                    <property name="spacing">10</property>
+                    <child>
+                      <widget class="GtkHBox" id="hbox1">
+                        <property name="visible">True</property>
+                        <property name="can_focus">False</property>
+                        <child>
+                          <widget class="GtkLabel" id="label20">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="xalign">0</property>
+                            <property name="label" translatable="yes">Translate statistics graphs</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="position">0</property>
+                          </packing>
+                        </child>
+                        <child>
+                          <widget class="GtkLabel" id="label36">
+                            <property name="visible">True</property>
+                            <property name="can_focus">False</property>
+                            <property name="label" translatable="yes">This change needs restart</property>
+                          </widget>
+                          <packing>
+                            <property name="expand">False</property>
+                            <property name="fill">False</property>
+                            <property name="pack_type">end</property>
+                            <property name="position">1</property>
+                          </packing>
+                        </child>
+                      </widget>
+                      <packing>
+                        <property name="expand">False</property>
+                        <property name="fill">False</property>
+                        <property name="position">0</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkRadioButton" id="radio_graphs_translate">
+                        <property name="label" translatable="yes">Translate</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="active">True</property>
+                        <property name="draw_indicator">True</property>
+                      </widget>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">1</property>
+                      </packing>
+                    </child>
+                    <child>
+                      <widget class="GtkRadioButton" id="radio_graphs_no_translate">
+                        <property name="label" translatable="yes">Do not translate</property>
+                        <property name="visible">True</property>
+                        <property name="can_focus">True</property>
+                        <property name="receives_default">False</property>
+                        <property name="draw_indicator">True</property>
+                        <property name="group">radio_graphs_translate</property>
+                      </widget>
+                      <packing>
+                        <property name="expand">True</property>
+                        <property name="fill">True</property>
+                        <property name="position">2</property>
+                      </packing>
+                    </child>
+                  </widget>
+                  <packing>
+                    <property name="expand">False</property>
+                    <property name="fill">False</property>
+                    <property name="position">1</property>
+                  </packing>
+                </child>
+              </widget>
+              <packing>
+                <property name="position">5</property>
+              </packing>
+            </child>
+            <child>
+              <widget class="GtkLabel" id="label47">
+                <property name="visible">True</property>
+                <property name="can_focus">False</property>
+                <property name="label" translatable="yes">Language</property>
+              </widget>
+              <packing>
+                <property name="position">5</property>
+                <property name="tab_fill">False</property>
+                <property name="type">tab</property>
+              </packing>
+            </child>
+            <child>
               <widget class="GtkVBox" id="vbox6">
                 <property name="visible">True</property>
                 <property name="can_focus">False</property>
@@ -41551,87 +41853,11 @@ It starts before and arrives there with some speed.</property>
                   </packing>
                 </child>
                 <child>
-                  <widget class="GtkVBox" id="vbox3">
-                    <property name="visible">True</property>
-                    <property name="can_focus">False</property>
-                    <property name="spacing">6</property>
-                    <child>
-                      <widget class="GtkHBox" id="hbox1">
-                        <property name="visible">True</property>
-                        <property name="can_focus">False</property>
-                        <child>
-                          <widget class="GtkLabel" id="label20">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="xalign">0</property>
-                            <property name="label" translatable="yes">Translate statistics graphs</property>
-                          </widget>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="position">0</property>
-                          </packing>
-                        </child>
-                        <child>
-                          <widget class="GtkLabel" id="label36">
-                            <property name="visible">True</property>
-                            <property name="can_focus">False</property>
-                            <property name="label" translatable="yes">This change needs restart</property>
-                          </widget>
-                          <packing>
-                            <property name="expand">False</property>
-                            <property name="fill">False</property>
-                            <property name="pack_type">end</property>
-                            <property name="position">1</property>
-                          </packing>
-                        </child>
-                      </widget>
-                      <packing>
-                        <property name="expand">False</property>
-                        <property name="fill">False</property>
-                        <property name="position">0</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkRadioButton" id="radio_graphs_translate">
-                        <property name="label" translatable="yes">Translate</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="active">True</property>
-                        <property name="draw_indicator">True</property>
-                      </widget>
-                      <packing>
-                        <property name="expand">True</property>
-                        <property name="fill">True</property>
-                        <property name="position">1</property>
-                      </packing>
-                    </child>
-                    <child>
-                      <widget class="GtkRadioButton" id="radio_graphs_no_translate">
-                        <property name="label" translatable="yes">Do not translate</property>
-                        <property name="visible">True</property>
-                        <property name="can_focus">True</property>
-                        <property name="receives_default">False</property>
-                        <property name="draw_indicator">True</property>
-                        <property name="group">radio_graphs_translate</property>
-                      </widget>
-                      <packing>
-                        <property name="expand">True</property>
-                        <property name="fill">True</property>
-                        <property name="position">2</property>
-                      </packing>
-                    </child>
-                  </widget>
-                  <packing>
-                    <property name="expand">False</property>
-                    <property name="fill">False</property>
-                    <property name="position">3</property>
-                  </packing>
+                  <placeholder/>
                 </child>
               </widget>
               <packing>
-                <property name="position">5</property>
+                <property name="position">6</property>
               </packing>
             </child>
             <child>
@@ -41641,7 +41867,7 @@ It starts before and arrives there with some speed.</property>
                 <property name="label" translatable="yes">Other</property>
               </widget>
               <packing>
-                <property name="position">5</property>
+                <property name="position">6</property>
                 <property name="tab_fill">False</property>
                 <property name="type">tab</property>
               </packing>
@@ -42794,6 +43020,12 @@ It starts before and arrives there with some speed.</property>
                         <child>
                           <placeholder/>
                         </child>
+                        <child>
+                          <placeholder/>
+                        </child>
+                        <child>
+                          <placeholder/>
+                        </child>
                       </widget>
                       <packing>
                         <property name="left_attach">2</property>
@@ -43364,6 +43596,12 @@ It starts before and arrives there with some speed.</property>
                     <child>
                       <placeholder/>
                     </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
                   </widget>
                 </child>
               </widget>
@@ -43949,6 +44187,12 @@ It starts before and arrives there with some speed.</property>
                     <child>
                       <placeholder/>
                     </child>
+                    <child>
+                      <placeholder/>
+                    </child>
+                    <child>
+                      <placeholder/>
+                    </child>
                   </widget>
                 </child>
               </widget>
diff --git a/src/Makefile.am b/src/Makefile.am
index abb2bc1..1a37302 100644
--- a/src/Makefile.am
+++ b/src/Makefile.am
@@ -35,7 +35,6 @@ SOURCES = \
        gui/dialogMessage.cs\
        gui/dialogCalendar.cs\
        gui/dialogImageTest.cs\
-       gui/language.cs\
        gui/repetitiveConditions.cs\
        gui/convertWeight.cs\
        gui/genericWindow.cs\
@@ -155,6 +154,7 @@ SOURCES = \
        utilDate.cs\
        utilEncoder.cs\
        utilGtk.cs\
+       utilLanguage.cs\
        utilVideo.cs\
        constants.cs\
        report.cs\
diff --git a/src/chronojump.cs b/src/chronojump.cs
index 40c41f6..ce66c87 100644
--- a/src/chronojump.cs
+++ b/src/chronojump.cs
@@ -146,20 +146,31 @@ public class ChronoJump
                        Environment.Exit(1);
                }
 
-//string language = "es_ES";   //works
-//string language = "es";      //works
-string language = "cs";
-Environment.SetEnvironmentVariable ("LANGUAGE", language); //works
+
+       string language = "";
+       if(File.Exists(System.IO.Path.Combine(Util.GetDatabaseDir(), "chronojump.db"))) {
+               try {
+                       Sqlite.Connect();
+                       language = SqlitePreferences.Select("language", false);
+                       Sqlite.DisConnect();
+       
+                       if(language != "") {
+                               Environment.SetEnvironmentVariable ("LANGUAGE", language); //works
 #if OSTYPE_WINDOWS
-g_setenv ("LANGUAGE", language, true);
+                               g_setenv ("LANGUAGE", language, true);
 #endif
+                       }
+               }
+               catch {
+                       LogB.Warning("Problem reading language on start");
+               }
+       }
 
-Catalog.Init("chronojump",System.IO.Path.Combine(Util.GetPrefixDir(),"share/locale"));
+       Catalog.Init("chronojump",System.IO.Path.Combine(Util.GetPrefixDir(),"share/locale"));
+
+       new ChronoJump(args);
+       }
 
-               new ChronoJump(args);
-               
-       }
-
        bool createdSplashWin = false;
 
        public static string RelativeToPrefix(string relativePath) {
diff --git a/src/constants.cs b/src/constants.cs
index b1c9283..d227434 100644
--- a/src/constants.cs
+++ b/src/constants.cs
@@ -452,32 +452,7 @@ public class Constants
                "LightGray", "LightGreen", "LightPink", "LightSalmon", "LightYellow", 
                "MediumBlue", "MediumOrchid", "MediumPurple", "MediumTurquoise", "MediumVioletRed", 
"YellowGreen" 
        };
-       
-       //for windows, on linux it takes language ok from the locale
-       public static string LanguageDefault = "en-GB:English (United Kingdom)";
-       public static string [] Languages = {
-               "ca-ES:Catalan", 
-               "zh-CN:Chinese", 
-               LanguageDefault, 
-               "dz-BT:Dzongkha",
-               "fi-FI:Finnish", 
-               "fr-FR:French", 
-               "oc-OC:Occitan",
-               "pt-BR:Portuguese (Brazil)", 
-               "pt-PT:Portuguese (Portugal)", 
-               "es-ES:Spanish (Spain)", 
-               "sv-SE:Swedish", 
-               "vi-VN:Vietnamese", 
-       };
 
-       /* *** ATTENTIOn ***: dz-BT deactivated on Windows compilation...
-        * in the next release, do it better
-        */
-
-       //TODO: add:
-       //ar (when there ara not fuzzy lines)
-       //see in both langs how to write as xx_XX
-       
 
        public static string PortNamesWindows = 
                string.Format(Catalog.GetString("Typical serial and USB-serial ports on Windows:") + 
diff --git a/src/gui/chronojump.cs b/src/gui/chronojump.cs
index 36ea51e..021841e 100644
--- a/src/gui/chronojump.cs
+++ b/src/gui/chronojump.cs
@@ -404,9 +404,7 @@ public partial class ChronoJumpWindow
 
        //windows needed
        PreferencesWindow preferencesWin;
-       //LanguageWindow languageWin;
        SessionAddEditWindow sessionAddEditWin;
-       //SessionEditWindow sessionEditWin;
        SessionLoadWindow sessionLoadWin;
        PersonRecuperateWindow personRecuperateWin; 
        PersonsRecuperateFromOtherSessionWindow personsRecuperateFromOtherSessionWin; 
diff --git a/src/gui/preferences.cs b/src/gui/preferences.cs
index 1ce5531..01b1771 100644
--- a/src/gui/preferences.cs
+++ b/src/gui/preferences.cs
@@ -29,6 +29,8 @@ using System.Text; //StringBuilder
 using System.Collections; //ArrayList
 using Mono.Unix;
 using System.Threading;
+using System.Globalization; //CultureInfo stuff
+
 
 public class PreferencesWindow {
        
@@ -109,11 +111,10 @@ public class PreferencesWindow {
        [Widget] Gtk.RadioButton radio_graphs_no_translate;
 
        
-
-
-//     [Widget] Gtk.Box hbox_language_row;
-//     [Widget] Gtk.Box hbox_combo_language;
-//     [Widget] Gtk.ComboBox combo_language;
+       [Widget] Gtk.Box hbox_combo_language;
+       [Widget] Gtk.ComboBox combo_language;
+       [Widget] Gtk.RadioButton radio_language_detected;
+       [Widget] Gtk.RadioButton radio_language_force;
 
 
        [Widget] Gtk.Button button_accept;
@@ -125,12 +126,10 @@ public class PreferencesWindow {
        private Preferences preferences; //stored to update SQL if anything changed
        private Thread thread;
 
-       //language when window is called. If changes, then change data in sql and show 
-       //dialogMessage
-       //private string languageIni;
-       
        string databaseURL;
        string databaseTempURL;
+       
+       ListStore langsStore;
 
 
        PreferencesWindow () {
@@ -156,13 +155,9 @@ public class PreferencesWindow {
 
                PreferencesWindowBox.preferences = preferences;
 
-               //PreferencesWindowBox.languageIni = language;
-               //if(UtilAll.IsWindows())
-               //      PreferencesWindowBox.createComboLanguage(language);
-               //else 
-                       PreferencesWindowBox.hideLanguageStuff();
+               PreferencesWindowBox.createComboLanguage();
 
-                       PreferencesWindowBox.createComboCamera(UtilVideo.GetVideoDevices(), 
preferences.videoDeviceNum);
+               PreferencesWindowBox.createComboCamera(UtilVideo.GetVideoDevices(), 
preferences.videoDeviceNum);
                
                string [] decs = {"1", "2", "3"};
                PreferencesWindowBox.combo_decimals.Active = UtilGtk.ComboMakeActive(
@@ -285,7 +280,12 @@ public class PreferencesWindow {
 
                //done here and not in glade to be shown with the decimal point of user language        
                PreferencesWindowBox.label_encoder_con.Text = (0.7).ToString();
-               
+       
+               if(preferences.language == "")
+                       PreferencesWindowBox.radio_language_detected.Active = true;
+               else
+                       PreferencesWindowBox.radio_language_force.Active = true;
+
                if(preferences.RGraphsTranslate)
                        PreferencesWindowBox.radio_graphs_translate.Active = true;
                else
@@ -322,39 +322,56 @@ public class PreferencesWindow {
                combo_camera.Active = UtilGtk.ComboMakeActive(devices, devices[current]);
        }
 
-       private void createComboLanguage(string myLanguageCode) {
-               /*
-               combo_language = ComboBox.NewText ();
-               UtilGtk.ComboUpdate(combo_language, Util.GetLanguagesNames(), "");
+       // ---- Language stuff
+       
+       //private void createComboLanguage(string myLanguageCode) {
+       private void createComboLanguage() {
                
-               //combo_language.Entry.Changed += new EventHandler (on_combo_language_changed);
+               combo_language = ComboBox.NewText ();
+               fillLanguages();
 
                hbox_combo_language.PackStart(combo_language, false, false, 0);
                hbox_combo_language.ShowAll();
-               
-               bool found = false;
-               int count = 0;
-               foreach (string lang in Constants.Languages) {
-                       if (myLanguageCode == Util.GetLanguageCode(lang)) {
-                               combo_language.Active = count;
-                               found = true;
-                       }
-                       count ++;
+       }
+
+       //from Longomatch ;)
+       //(C) Andoni Morales Alastruey
+       void fillLanguages () {
+               int index = 0, active = 0;
+
+               langsStore = new ListStore(typeof(string), typeof(CultureInfo));
+
+               foreach (CultureInfo lang in UtilLanguage.Languages) {
+                       langsStore.AppendValues(lang.DisplayName, lang);
+                       if (preferences.language != "" && lang.Name == preferences.language)
+                               active = index;
+                       index ++;
                }
-               if(!found)
-                       combo_language.Active = UtilGtk.ComboMakeActive(Constants.Languages, 
Util.GetLanguageName(Constants.LanguageDefault));
-               
-               //if(UtilAll.IsWindows())
-               //      combo_language.Sensitive = true;
-               //else 
-                       combo_language.Sensitive = false;
-                       */
+               combo_language.Model = langsStore;
+               combo_language.Active = active;
        }
-                       
-       private void hideLanguageStuff() {
-               //hbox_language_row.Hide();
+
+       private void on_radio_language_toggled (object obj, EventArgs args) {
+               hbox_combo_language.Sensitive = radio_language_force.Active;
        }
-       
+
+       string getSelectedLanguage()
+       {
+               TreeIter iter;
+               CultureInfo info;
+
+               combo_language.GetActiveIter (out iter);
+               info = (CultureInfo) langsStore.GetValue (iter, 1);
+               if (info == null) {
+                       return "";
+               } else {
+                       return info.Name;
+               }
+       }
+
+       // ---- end of Language stuff
+
+                       
        private void on_checkbutton_show_tv_tc_index_clicked (object o, EventArgs args) {
                if(checkbutton_show_tv_tc_index.Active)
                        hbox_indexes.Show();
@@ -802,6 +819,19 @@ public class PreferencesWindow {
                        preferences.CSVExportDecimalSeparator = "POINT";
                }
        
+               string selectedLanguage = getSelectedLanguage();
+
+               //if there was a language on SQL but now "detected" is selected, put "" in language on SQL
+               if(preferences.language != "" && radio_language_detected.Active) {
+                       SqlitePreferences.Update("language", "", true);
+                       preferences.language = "";
+               }
+               //if force a language, and SQL language is != than selected language, change language on SQL
+               else if(radio_language_force.Active && preferences.language != selectedLanguage) {
+                       SqlitePreferences.Update("language", selectedLanguage, true);
+                       preferences.language = selectedLanguage;
+               }
+
 
                if( preferences.RGraphsTranslate != PreferencesWindowBox.radio_graphs_translate.Active ) {
                        SqlitePreferences.Update("RGraphsTranslate", 
@@ -843,24 +873,6 @@ public class PreferencesWindow {
 
                Sqlite.Close();
 
-               /*
-                  if(UtilAll.IsWindows()) {
-               //if language has changed
-               if(UtilGtk.ComboGetActive(PreferencesWindowBox.combo_language) != languageIni) {
-               string myLanguage = SqlitePreferences.Select("language");
-               if ( myLanguage != null && myLanguage != "" && myLanguage != "0") {
-               //if language exists in sqlite preferences update it
-               SqlitePreferences.Update("language", 
Util.GetLanguageCodeFromName(UtilGtk.ComboGetActive(PreferencesWindowBox.combo_language)));
-               } else {
-               //else: create it
-               SqlitePreferences.Insert("language", 
Util.GetLanguageCodeFromName(UtilGtk.ComboGetActive(PreferencesWindowBox.combo_language)));
-               }
-
-               new DialogMessage(Catalog.GetString("Restart Chronojump to operate completely on your 
language."), true);
-               }
-               }
-               */
-
                PreferencesWindowBox.preferences_win.Hide();
                PreferencesWindowBox = null;
        }
diff --git a/src/preferences.cs b/src/preferences.cs
index fc24c7e..c1474d1 100644
--- a/src/preferences.cs
+++ b/src/preferences.cs
@@ -50,6 +50,7 @@ public class Preferences
        public int videoDeviceNum;              //AKA videoDevice
        public Constants.Encoder1RMMethod encoder1RMMethod;
        public string CSVExportDecimalSeparator;
+       public string language;
        public bool RGraphsTranslate;
        public bool useHeightsOnJumpIndexes;
        public Constants.EncoderAutoSaveCurve encoderAutoSaveCurve;
@@ -73,7 +74,6 @@ public class Preferences
        
        //public string chronopicPort;
        //public bool simulated;
-       //public string language;
        //public double encoderSmoothEccCon;    //unused
        //public double inertialmomentum;       //unused
 
diff --git a/src/sqlite/main.cs b/src/sqlite/main.cs
index 962362a..028a930 100644
--- a/src/sqlite/main.cs
+++ b/src/sqlite/main.cs
@@ -76,7 +76,7 @@ class Sqlite
        /*
         * Important, change this if there's any update to database
         */
-       static string lastChronojumpDatabaseVersion = "1.24";
+       static string lastChronojumpDatabaseVersion = "1.25";
 
        public Sqlite() {
        }
@@ -1826,6 +1826,14 @@ class Sqlite
                                SqlitePreferences.Update ("databaseVersion", newVersion, true); 
                                currentVersion = newVersion;
                        }
+                       if(currentVersion == "1.24") {
+                               LogB.SQL("Language defaults to (empty string), means detected");
+                               SqlitePreferences.Update("language", "", true);
+                               
+                               newVersion = "1.25";
+                               SqlitePreferences.Update ("databaseVersion", newVersion, true); 
+                               currentVersion = newVersion;
+                       }
 
                        // --- add more updates here
                
@@ -1980,6 +1988,7 @@ class Sqlite
                SqliteExecuteAuto.addChronojumpProfileAndBilateral();
                
                //changes [from - to - desc]
+               //1.24 - 1.25 Converted DB to 1.25 Language defaults to (empty string), means detected
                //1.23 - 1.24 Converted DB to 1.24 Delete runISpeedStartArrival and add 4 double contacts 
configs
                //1.22 - 1.23 Converted DB to 1.23 Added encoder configuration
                //1.21 - 1.22 Converted DB to 1.22 Encoder laterality in english again
diff --git a/src/sqlite/preferences.cs b/src/sqlite/preferences.cs
index 95a9b4b..23db08c 100644
--- a/src/sqlite/preferences.cs
+++ b/src/sqlite/preferences.cs
@@ -62,7 +62,7 @@ class SqlitePreferences : Sqlite
                                Insert ("askDeletion", "True", dbcmdTr);
                                Insert ("heightPreferred", "False", dbcmdTr);
                                Insert ("metersSecondsPreferred", "True", dbcmdTr);
-                               Insert ("language", "es-ES", dbcmdTr); 
+                               Insert ("language", "", dbcmdTr); 
                                Insert ("allowFinishRjAfterTime", "True", dbcmdTr); 
                                Insert ("volumeOn", "True", dbcmdTr); 
                                Insert ("videoOn", "True", dbcmdTr); 
@@ -216,6 +216,8 @@ class SqlitePreferences : Sqlite
                                preferences.videoDeviceNum = Convert.ToInt32(reader[1].ToString());
                        else if(reader[0].ToString() == "CSVExportDecimalSeparator")
                                preferences.CSVExportDecimalSeparator = reader[1].ToString();
+                       else if(reader[0].ToString() == "language")
+                               preferences.language = reader[1].ToString();
                        else if(reader[0].ToString() == "RGraphsTranslate")
                                preferences.RGraphsTranslate = reader[1].ToString() == "True";
                        else if(reader[0].ToString() == "useHeightsOnJumpIndexes")
diff --git a/src/util.cs b/src/util.cs
index bfc0220..fc9849e 100644
--- a/src/util.cs
+++ b/src/util.cs
@@ -1214,54 +1214,6 @@ public class Util
                }
        }
 
-       /* LANGUAGES STUFF */
-       public static string GetLanguageCode(string languageString) {
-               string [] myStringFull = languageString.Split(new char[] {':'});
-               return myStringFull[0];
-       }
-
-       public static string GetLanguageName(string languageString) {
-               string [] myStringFull = languageString.Split(new char[] {':'});
-               return myStringFull[1];
-       }
-       
-       public static string GetLanguageNameFromCode(string languageCode) {
-               foreach (string lang in Constants.Languages) {
-                       if (languageCode == GetLanguageCode(lang)) {
-                               return GetLanguageName(lang);
-                       }
-               }
-               //if there's an error:
-               return GetLanguageName(Constants.LanguageDefault);
-       }
-               
-       public static string GetLanguageCodeFromName(string languageName) {
-               foreach (string lang in Constants.Languages) {
-                       if (languageName == GetLanguageName(lang)) {
-                               return GetLanguageCode(lang);
-                       }
-               }
-               //if there's an error:
-               return GetLanguageCode(Constants.LanguageDefault);
-       }
-               
-       public static string [] GetLanguagesCodes() {
-               string [] codes = new string[Constants.Languages.Length];
-               int count = 0;
-               foreach (string lang in Constants.Languages) 
-                       codes[count++] = GetLanguageCode(lang);
-
-               return codes;
-       }
-               
-       public static string [] GetLanguagesNames() {
-               string [] names = new string[Constants.Languages.Length];
-               int count = 0;
-               foreach (string lang in Constants.Languages) 
-                       names[count++] = GetLanguageName(lang);
-               
-               return names;
-       }
 
        public static string GetImagePath(bool mini) {
                string returnString = "";
diff --git a/src/utilLanguage.cs b/src/utilLanguage.cs
new file mode 100644
index 0000000..e42698a
--- /dev/null
+++ b/src/utilLanguage.cs
@@ -0,0 +1,59 @@
+
+/*
+ * This file is part of ChronoJump
+ *
+ * ChronoJump 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.
+ *    
+ * ChronoJump 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., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ *  Copyright (C) 2004-2015   Xavier de Blas <xaviblas gmail com> 
+ */
+
+using System;
+using System.IO;
+using System.Collections.Generic;
+using System.Globalization;
+
+
+public class UtilLanguage 
+{
+       //from Longomatch ;)
+       //(C) Andoni Morales Alastruey
+       public static List<CultureInfo> Languages {
+               get { 
+                       List<CultureInfo> langs;
+                       string filename, localesDir;
+
+                       langs = new List<CultureInfo>();
+                       filename = String.Format ("{0}.mo", "chronojump");
+                       localesDir = System.IO.Path.Combine(Util.GetPrefixDir(),"share/locale");
+
+                       langs.Add (new CultureInfo ("en"));
+
+                       if (!Directory.Exists (localesDir))
+                               return langs;
+
+                       foreach (string dirpath in Directory.EnumerateDirectories (localesDir)) {
+                               if (File.Exists (Path.Combine (dirpath, "LC_MESSAGES", filename))) {
+                                       try {
+                                               string localeName = Path.GetFileName(dirpath).Replace("_", 
"-");
+                                               langs.Add(new CultureInfo (localeName));
+                                       } catch (Exception ex) {
+                                               LogB.Warning (ex.ToString());
+                                       }
+                               } 
+                       }
+                       return langs;
+               }
+       }
+}


[Date Prev][Date Next]   [Thread Prev][Thread Next]   [Thread Index] [Date Index] [Author Index]