├── .gitignore ├── README.md ├── config ├── de_DE │ └── default.xml ├── en_EN │ └── default.xml ├── es_ES │ └── default.xml ├── fr_FR │ └── default.xml ├── it_IT │ └── default.xml ├── nl_NL │ └── default.xml ├── pt_BR │ └── default.xml ├── pt_PT │ └── default.xml ├── yue_Hant │ └── default.xml └── zh_Hant │ └── default.xml ├── convert.sh ├── google2ubuntu-gui.desktop ├── google2ubuntu-manager.py ├── google2ubuntu.1.gz ├── google2ubuntu.desktop ├── google2ubuntu.py ├── i18n ├── de_DE │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── en_EN │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── es_ES │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── fr_FR │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── google2ubuntu.pot ├── it_IT │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── nl_NL │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── pt_BR │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── pt_PT │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── yue_Hant │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── zh_CN │ ├── README.md │ └── fallback ├── zh_HK │ ├── README.md │ └── fallback ├── zh_Hans │ └── .placeholder ├── zh_Hant │ └── LC_MESSAGES │ │ ├── google2ubuntu.mo │ │ └── google2ubuntu.po ├── zh_MO │ ├── README.md │ └── fallback ├── zh_MY │ ├── README.md │ └── fallback ├── zh_SG │ ├── README.md │ └── fallback └── zh_TW │ ├── README.md │ └── fallback ├── librairy ├── ArgsWindow.py ├── Googletts.py ├── HelpWindow.py ├── MainWindow.py ├── SetupWindow.py ├── add_window.py ├── basicCommands.py ├── externalWindow.py ├── interface.py ├── internalWindow.py ├── localehelper.py ├── moduleSelection.py ├── osd.py ├── stringParser.py └── workWithModule.py ├── listen.sh ├── listener.py ├── modules ├── google.sh ├── goto.py ├── meaning.py ├── weather.sh ├── wikipedia.sh └── youtube.sh ├── record.sh └── resources ├── Waiting ├── wait-0.png ├── wait-1.png ├── wait-10.png ├── wait-11.png ├── wait-12.png ├── wait-13.png ├── wait-14.png ├── wait-15.png ├── wait-16.png ├── wait-17.png ├── wait-2.png ├── wait-3.png ├── wait-4.png ├── wait-5.png ├── wait-6.png ├── wait-7.png ├── wait-8.png └── wait-9.png ├── error.png ├── icons.png └── sound.wav /.gitignore: -------------------------------------------------------------------------------- 1 | *.py[cod] 2 | 3 | doc 4 | _* 5 | conf.py 6 | *.rst 7 | archive/ 8 | createdeb.py 9 | *.tar.gz 10 | *.deb 11 | # sound files 12 | voix.flac 13 | 14 | # configuration files 15 | google2ubuntu.conf 16 | 17 | # C extensions 18 | *.so 19 | 20 | # Packages 21 | *.egg 22 | *.egg-info 23 | dist 24 | build 25 | eggs 26 | parts 27 | bin 28 | var 29 | sdist 30 | develop-eggs 31 | .installed.cfg 32 | lib 33 | lib64 34 | __pycache__ 35 | 36 | # Installer logs 37 | pip-log.txt 38 | 39 | # Unit test / coverage reports 40 | .coverage 41 | .tox 42 | nosetests.xml 43 | 44 | 45 | # Mr Developer 46 | .mr.developer.cfg 47 | .project 48 | .pydevproject 49 | -------------------------------------------------------------------------------- /config/de_DE/default.xml: -------------------------------------------------------------------------------- 1 | wie spättimeBatteriestandpowerLadestandpowerFenster schließenxdotool key "Alt+F4"Fenster versteckenxdotool key "Alt+F9"Fenster wechselnxdotool key "Alt+Tab"nächstes Fensterxdotool key "Alt+Tab"Eingabexdotool key "Return"Enterxdotool key "Return"Tabulatorxdotool key "Tab"Menüxdotool key "Alt+F1"zeige Menüxdotool key "Alt+F1"öffne Browserexo-open --launch WebBrowseröffne Dateimanagerexo-open --launch FileManageröffne Terminalexo-open --launch TerminalEmulatoröffne Bilderxdg-open ~/Bilderöffne Musikxdg-open ~/Musiköffne Dokumentexdg-open ~/Dokumenteöffne Downloadsxdg-open ~/Downloadskopierenxdotool key "Ctrl+c"einfügenxdotool key "Ctrl+v"ausschneidenxdotool key "Ctrl+x"googlegoogle/google.shWikipediawikipedia/wikipedia.shyoutubeyoutube/youtube.shMailprogramm öffnenexo-open --launch MailReader;wie ist das Wetterweather/weather.sh -------------------------------------------------------------------------------- /config/en_EN/default.xml: -------------------------------------------------------------------------------- 1 | 2 | what timetime power levelpower how many batterypower close windowxdotool key "Alt+F4" hide windowxdotool key "Alt+F9" switch windowxdotool key "Alt+Tab" other windowxdotool key "Alt+Tab" returnxdotool key "Return" returnxdotool key "Return" tabulationxdotool key "Tab" menuxdotool key "Alt+F1" show menuxdotool key "Alt+F1" open web browserexo-open --launch WebBrowser open web browserexo-open --launch WebBrowser open file managerexo-open --launch FileManager open terminalexo-open --launch TerminalEmulator open picturesxdg-open ~/Images open musicsxdg-open ~/Music open documentsxdg-open ~/Documents open downloadsxdg-open ~/Downloads copyxdotool key "Ctrl+c" pastexdotool key "Ctrl+v" cutxdotool key "Ctrl+x" googlegoogle.shgoogle 1meaningmeaning.pymeaning 1weather inweather.sh in 1wikipediawikipedia.shwikipedia 1youtubeyoutube.shyoutube 1 3 | -------------------------------------------------------------------------------- /config/es_ES/default.xml: -------------------------------------------------------------------------------- 1 | 2 | qué hora eshora cuál nivel bateríabateria cantidad batería quedabateria cerrar ventanaxdotool key "Alt+F4" minimizar ventanaxdotool key "Alt+F9" cambiar ventanaxdotool key "Alt+Tab" entrarxdotool key "Return" entradaxdotool key "Return" tabulaciónxdotool key "Tab" menúxdotool key "Alt+F1" muestra menúxdotool key "Alt+F1" abre navegadorexo-open --launch WebBrowser abre el explorador archivosexo-open --launch FileManager abre consolaexo-open --launch TerminalEmulator abre fotosxdg-open ~/Imagenes abre músicaxdg-open ~/Música abre documentosxdg-open ~/Documentos copiaxdotool key "Ctrl+c" copiarxdotool key "Ctrl+c" pastarxdotool key "Ctrl+v" googlegoogle.shgoogle 1significadomeaning.pysignificafo 1tiempo enweather.sh en 1wikipediawikipedia.shwikipedia 1youtubeyoutube.shyoutube 1 3 | -------------------------------------------------------------------------------- /config/fr_FR/default.xml: -------------------------------------------------------------------------------- 1 | 2 | quelle heureheure quel niveau batteriebatterie combien batterie restebatterie fermer fenêtrexdotool key "Alt+F4" réduire fenêtrexdotool key "Alt+F9" changer fenêtrexdotool key "Alt+Tab" change fenêtrexdotool key "Alt+Tab" entrerxdotool key "Return" entréexdotool key "Return" tabulationxdotool key "Tab" menuxdotool key "Alt+F1" montre menuxdotool key "Alt+F1" ouvre navigateurexo-open --launch WebBrowser ouvrir navigateurexo-open --launch WebBrowser ouvre navigateur fichierexo-open --launch FileManager ouvre consoleexo-open --launch TerminalEmulator ouvre imagesxdg-open ~/Images ouvre musiquexdg-open ~/Musique ouvre documentsxdg-open ~/Documents ouvre téléchargementsxdg-open ~/Téléchargements copierxdotool key "Ctrl+c" collerxdotool key "Ctrl+v" couperxdotool key "Ctrl+x" googlegoogle.shgoogle 1définitionmeaning.pydefinition 1météoweather.sh a 1wikipédiawikipedia.shwikipedia 1youtubeyoutube.shyoutube 1 3 | -------------------------------------------------------------------------------- /config/it_IT/default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | orario 5 | orario 6 | 7 | 8 | 9 | 10 | stato batteria 11 | batteria 12 | 13 | 14 | 15 | 16 | quanta batteria 17 | batteria 18 | 19 | 20 | 21 | 22 | chiudi finestra 23 | xdotool key "Alt+F4" 24 | 25 | 26 | 27 | 28 | nascondi finestra 29 | xdotool key "Alt+F9" 30 | 31 | 32 | 33 | 34 | cambia finestra 35 | xdotool key "Alt+Tab" 36 | 37 | 38 | 39 | 40 | altra finestra 41 | xdotool key "Alt+Tab" 42 | 43 | 44 | 45 | 46 | invia 47 | xdotool key "Return" 48 | 49 | 50 | 51 | 52 | invio 53 | xdotool key "Return" 54 | 55 | 56 | 57 | 58 | tab 59 | xdotool key "Tab" 60 | 61 | 62 | 63 | 64 | menu 65 | xdotool key "Alt+F1" 66 | 67 | 68 | 69 | 70 | apri menu 71 | xdotool key "Alt+F1" 72 | 73 | 74 | 75 | 76 | apri browser 77 | exo-open --launch WebBrowser 78 | 79 | 80 | 81 | 82 | apri internet 83 | exo-open --launch WebBrowser 84 | 85 | 86 | 87 | 88 | apri file manager 89 | exo-open --launch FileManager 90 | 91 | 92 | 93 | 94 | apri terminale 95 | exo-open --launch TerminalEmulator 96 | 97 | 98 | 99 | 100 | apri immagini 101 | xdg-open ~/Immagini 102 | 103 | 104 | 105 | 106 | apri musica 107 | xdg-open ~/Music 108 | 109 | 110 | 111 | 112 | apri documenti 113 | xdg-open ~/Documenti 114 | 115 | 116 | 117 | 118 | apri download 119 | xdg-open ~/Downloads 120 | 121 | 122 | 123 | 124 | copia 125 | xdotool key "Ctrl+c" 126 | 127 | 128 | 129 | 130 | incolla 131 | xdotool key "Ctrl+v" 132 | 133 | 134 | 135 | 136 | taglia 137 | xdotool key "Ctrl+x" 138 | 139 | 140 | 141 | 142 | google 143 | google.sh 144 | google 145 | 1 146 | 147 | 148 | meaning 149 | meaning.py 150 | meaning 151 | 1 152 | 153 | 154 | weather in 155 | weather.sh 156 | in 157 | 1 158 | 159 | 160 | wikipedia 161 | wikipedia.sh 162 | wikipedia 163 | 1 164 | 165 | 166 | youtube 167 | youtube.sh 168 | youtube 169 | 1 170 | 171 | -------------------------------------------------------------------------------- /config/nl_NL/default.xml: -------------------------------------------------------------------------------- 1 | open mail lezerexo-open --launch MailReader tijdtijd Batterijstatusbatterij Oplaadstatusbatterij Venster sluitenxdotool key "Alt+F4" Venster verbergenxdotool key "Alt+F9" Venster wisselenxdotool key "Alt+Tab" volgend vensterxdotool key "Alt+Tab" Volgende regelxdotool key "Return" Enterxdotool key "Return" Tabtoetsxdotool key "Tab" Menuxdotool key "Alt+F1" toon Menuxdotool key "Alt+F1" open Browserexo-open --launch WebBrowser open bestandsmanagerexo-open --launch FileManager open Terminalexo-open --launch TerminalEmulator open afbeeldingenxdg-open ~/Afbeeldingen open Muziekxdg-open ~/Muziek open Documentenxdg-open ~/Documenten open Downloadsxdg-open ~/Downloads kopiërenxdotool key "Ctrl+c" plakkenxdotool key "Ctrl+v" knippenxdotool key "Ctrl+x" googlegoogle.sh Wikipediawikipedia.sh youtubeyoutube.sh Mailprogramma openenexo-open --launch MailReader; Hoe is het weerweather.sh 2 | -------------------------------------------------------------------------------- /config/pt_BR/default.xml: -------------------------------------------------------------------------------- 1 | 2 | que horas sãohora nível de bateriabateria bateria restantebateria fechar janelaxdotool key "Alt+F4" minimizar janelaxdotool key "Alt+F9" mudar janelaxdotool key "Alt+Tab" outra janelaxdotool key "Alt+Tab" entrarxdotool key "Return" entradaxdotool key "Return" tabulaçãoxdotool key "Tab" menuxdotool key "Alt+F1" mostrar menuxdotool key "Alt+F1" abrir navegadorexo-open --launch WebBrowser abrir navegadorexo-open --launch WebBrowser abrir gerenciador de arquivosexo-open --launch FileManager abrir terminalexe-open --launch TerminalEmulator abrir imagensxdg-open ~/Imagens abrir músicaxdg-open ~/Música abrir Documentosxdg-open ~/Documentos abrir downloadsxdg-open ~/Downloads copiarxdotool key "Ctrl+c" colarxdotool key "Ctrl+v" cortarxdotool key "Ctrl+x" googlegoogle.shgoogle 1meaningmeaning.py 1weather inweather.sh in 1 name="modules">wikipediawikipedia.shwikipedia 1youtubeyoutube.shyoutube 1 3 | -------------------------------------------------------------------------------- /config/pt_PT/default.xml: -------------------------------------------------------------------------------- 1 | 2 | que horas sãohora nível de bateriabateria bateria restantebateria fechar janelaxdotool key "Alt+F4" minimizar janelaxdotool key "Alt+F9" mudar janelaxdotool key "Alt+Tab" outra janelaxdotool key "Alt+Tab" entrarxdotool key "Return" entradaxdotool key "Return" tabulaçãoxdotool key "Tab" menuxdotool key "Alt+F1" mostrar menuxdotool key "Alt+F1" abrir navegadorexo-open --launch WebBrowser abrir navegadorexo-open --launch WebBrowser abrir gestor de ficheirosexo-open --launch FileManager abrir terminalexe-open --launch TerminalEmulator abrir imagensxdg-open ~/Imagens abrir músicaxdg-open ~/Música abrir Documentosxdg-open ~/Documentos abrir transferênciasxdg-open ~/Transferências copiarxdotool key "Ctrl+c" colarxdotool key "Ctrl+v" cortarxdotool key "Ctrl+x" googlegoogle.shgoogle 1meaningmeaning.py 1weather inweather.sh in 1 name="modules">wikipediawikipedia.shwikipedia 1youtubeyoutube.shyoutube 1 3 | -------------------------------------------------------------------------------- /config/yue_Hant/default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 時間 5 | 時間 6 | 7 | 8 | 9 | 10 | 時辰 11 | 時間 12 | 13 | 14 | 15 | 16 | 咩時辰 17 | 時間 18 | 19 | 20 | 21 | 22 | 幾點 23 | 時間 24 | 25 | 26 | 27 | 28 | 而家幾點 29 | 時間 30 | 31 | 32 | 33 | 34 | 而家幾多點鐘 35 | 時間 36 | 37 | 38 | 39 | 40 | 電源 41 | 電源 42 | 43 | 44 | 45 | 46 | 電池 47 | 電源 48 | 49 | 50 | 51 | 52 | 電量 53 | 電源 54 | 55 | 56 | 57 | 58 | 剪貼簿 59 | 剪貼簿 60 | 61 | 62 | 63 | 64 | 開始口述 65 | 口述模式 66 | 67 | 68 | 69 | 70 | 口述開始 71 | 口述模式 72 | 73 | 74 | 75 | 76 | 結束口述 77 | 離開口述模式 78 | 79 | 80 | 81 | 82 | 口述結束 83 | 離開口述模式 84 | 85 | 86 | 87 | 88 | 關閉視窗 89 | xdotool key "Alt+F4" 90 | 91 | 92 | 93 | 94 | 隱藏視窗 95 | xdotool key "Alt+F9" 96 | 97 | 98 | 99 | 100 | 切換視窗 101 | xdotool key "Alt+Tab" 102 | 103 | 104 | 105 | 106 | 其他視窗 107 | xdotool key "Alt+Tab" 108 | 109 | 110 | 111 | 112 | Enter 113 | xdotool key "Return" 114 | 115 | 116 | 117 | 118 | 輸入 119 | xdotool key "Return" 120 | 121 | 122 | 123 | 124 | 回車 125 | xdotool key "Return" 126 | 127 | 128 | 129 | 130 | Tab 131 | xdotool key "Tab" 132 | 133 | 134 | 135 | 136 | 選單 137 | xdotool key "Alt+F1" 138 | 139 | 140 | 141 | 142 | 顯示選單 143 | xdotool key "Alt+F1" 144 | 145 | 146 | 147 | 148 | 開啟瀏覽器 149 | exo-open --launch WebBrowser 150 | 151 | 152 | 153 | 154 | 閱讀郵件 155 | exo-open --launch MailReader; 156 | 157 | 158 | 159 | 160 | 開啟檔案總管 161 | exo-open --launch FileManager 162 | 163 | 164 | 165 | 166 | 開啟終端機 167 | exo-open --launch TerminalEmulator 168 | 169 | 170 | 171 | 172 | 開啟圖片 173 | xdg-open ~/圖片 174 | 175 | 176 | 177 | 178 | 開啟音樂 179 | xdg-open ~/音樂 180 | 181 | 182 | 183 | 184 | 開啟文件 185 | xdg-open ~/文件 186 | 187 | 188 | 189 | 190 | 開啟下載 191 | xdg-open ~/下載 192 | 193 | 194 | 195 | 196 | 複製 197 | xdotool key "Ctrl+c" 198 | 199 | 200 | 201 | 202 | 貼上 203 | xdotool key "Ctrl+v" 204 | 205 | 206 | 207 | 208 | 剪下 209 | xdotool key "Ctrl+x" 210 | 211 | 212 | 213 | 214 | google 215 | google.sh 216 | google 217 | 1 218 | 219 | 220 | 搜尋 221 | google.sh 222 | 搜尋 223 | 1 224 | 225 | 226 | 瀏覽 227 | goto.py 228 | 瀏覽 229 | 230 | 231 | 232 | 前往 233 | goto.py 234 | 前往 235 | 236 | 237 | 238 | 定義 239 | meaning.py 240 | 定義 241 | 1 242 | 243 | 244 | wiki 245 | wikipedia.sh 246 | wiki 247 | 1 248 | 249 | 250 | 維基百科 251 | wikipedia.sh 252 | 維基百科 253 | 1 254 | 255 | 256 | youtube 257 | youtube.sh 258 | youtube 259 | 1 260 | 261 | 262 | 天氣 263 | weather.sh 264 | 天氣 265 | 1 266 | 267 | 268 | 咩天氣 269 | weather.sh 270 | 天氣 271 | 1 272 | 273 | 274 | 天氣點 275 | weather.sh 276 | 天氣 277 | 1 278 | 279 | 280 | 天氣如何 281 | weather.sh 282 | 天氣 283 | 1 284 | 285 | 286 | -------------------------------------------------------------------------------- /config/zh_Hant/default.xml: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 時間 5 | 時間 6 | 7 | 8 | 9 | 10 | 什麼時間 11 | 時間 12 | 13 | 14 | 15 | 16 | 時辰 17 | 時間 18 | 19 | 20 | 21 | 22 | 什麼時辰 23 | 時間 24 | 25 | 26 | 27 | 28 | 幾點鐘 29 | 時間 30 | 31 | 32 | 33 | 34 | 現在幾點鐘 35 | 時間 36 | 37 | 38 | 39 | 40 | 電源 41 | 電源 42 | 43 | 44 | 45 | 46 | 電池 47 | 電源 48 | 49 | 50 | 51 | 52 | 電量 53 | 電源 54 | 55 | 56 | 57 | 58 | 剪貼簿 59 | 剪貼簿 60 | 61 | 62 | 63 | 64 | 開始口述 65 | 口述模式 66 | 67 | 68 | 69 | 70 | 口述開始 71 | 口述模式 72 | 73 | 74 | 75 | 76 | 結束口述 77 | 離開口述模式 78 | 79 | 80 | 81 | 82 | 口述結束 83 | 離開口述模式 84 | 85 | 86 | 87 | 88 | 關閉視窗 89 | xdotool key "Alt+F4" 90 | 91 | 92 | 93 | 94 | 隱藏視窗 95 | xdotool key "Alt+F9" 96 | 97 | 98 | 99 | 100 | 切換視窗 101 | xdotool key "Alt+Tab" 102 | 103 | 104 | 105 | 106 | 其他視窗 107 | xdotool key "Alt+Tab" 108 | 109 | 110 | 111 | 112 | 輸入 113 | xdotool key "Return" 114 | 115 | 116 | 117 | 118 | Tab 119 | xdotool key "Tab" 120 | 121 | 122 | 123 | 124 | 選單 125 | xdotool key "Alt+F1" 126 | 127 | 128 | 129 | 130 | 顯示選單 131 | xdotool key "Alt+F1" 132 | 133 | 134 | 135 | 136 | 開啟瀏覽器 137 | exo-open --launch WebBrowser 138 | 139 | 140 | 141 | 142 | 閱讀郵件 143 | exo-open --launch MailReader; 144 | 145 | 146 | 147 | 148 | 開啟檔案總管 149 | exo-open --launch FileManager 150 | 151 | 152 | 153 | 154 | 開啟終端機 155 | exo-open --launch TerminalEmulator 156 | 157 | 158 | 159 | 160 | 開啟圖片 161 | xdg-open ~/圖片 162 | 163 | 164 | 165 | 166 | 開啟音樂 167 | xdg-open ~/音樂 168 | 169 | 170 | 171 | 172 | 開啟文件 173 | xdg-open ~/文件 174 | 175 | 176 | 177 | 178 | 開啟下載 179 | xdg-open ~/下載 180 | 181 | 182 | 183 | 184 | 複製 185 | xdotool key "Ctrl+c" 186 | 187 | 188 | 189 | 190 | 貼上 191 | xdotool key "Ctrl+v" 192 | 193 | 194 | 195 | 196 | 剪下 197 | xdotool key "Ctrl+x" 198 | 199 | 200 | 201 | 202 | google 203 | google.sh 204 | google 205 | 1 206 | 207 | 208 | 搜尋 209 | google.sh 210 | 搜尋 211 | 1 212 | 213 | 214 | 瀏覽 215 | goto.py 216 | 瀏覽 217 | 218 | 219 | 220 | 前往 221 | goto.py 222 | 前往 223 | 224 | 225 | 226 | 定義 227 | meaning.py 228 | 定義 229 | 1 230 | 231 | 232 | wiki 233 | wikipedia.sh 234 | wiki 235 | 1 236 | 237 | 238 | 維基百科 239 | wikipedia.sh 240 | 維基百科 241 | 1 242 | 243 | 244 | youtube 245 | youtube.sh 246 | youtube 247 | 1 248 | 249 | 250 | 天氣 251 | weather.sh 252 | 天氣 253 | 1 254 | 255 | 256 | 天氣怎麼樣 257 | weather.sh 258 | 天氣 259 | 1 260 | 261 | 262 | 天氣如何 263 | weather.sh 264 | 天氣 265 | 1 266 | 267 | 268 | -------------------------------------------------------------------------------- /convert.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | PID=$1 3 | rate=$(sox --i /tmp/voix_$PID.flac | grep "Sample Rate" | awk '{print $4}') 4 | if [ $rate != "16000" ]; then 5 | sox /tmp/voix_"$PID".flac /tmp/voix_"$PID"_.flac rate 16k 6 | mv /tmp/voix_"$PID"_.flac /tmp/voix_"$PID".flac 7 | fi 8 | 9 | exit 0 10 | -------------------------------------------------------------------------------- /google2ubuntu-gui.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Encoding=UTF-8 4 | Name=google2ubuntu-manager 5 | GenericName=google2ubuntu-manager 6 | Comment=google2ubuntu manager 7 | Icon=/usr/share/google2ubuntu/resources/icons.png 8 | Exec=/usr/share/google2ubuntu/google2ubuntu-manager.py 9 | Terminal=false 10 | StartupNotify=false 11 | Categories=Application 12 | -------------------------------------------------------------------------------- /google2ubuntu-manager.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Notify 5 | from gi.repository import Gdk 6 | from gi.repository import Gio 7 | from os.path import expanduser 8 | import os 9 | import sys 10 | import subprocess 11 | import gettext 12 | import xml.etree.ElementTree as ET 13 | 14 | sys.path.append(os.path.dirname(os.path.abspath(__file__))+'/librairy') 15 | from MainWindow import * 16 | from localehelper import LocaleHelper 17 | 18 | localeHelper = LocaleHelper() 19 | lang = localeHelper.getLocale() 20 | 21 | t=gettext.translation('google2ubuntu',os.path.dirname(os.path.abspath(__file__))+'/i18n/',languages=[lang]) 22 | t.install() 23 | 24 | #keep the old way for the moment 25 | #gettext.install('google2ubuntu',os.path.dirname(os.path.abspath(__file__))+'/i18n/') 26 | 27 | # application principale 28 | class MyApplication(Gtk.Application): 29 | def __init__(self): 30 | Gtk.Application.__init__(self) 31 | 32 | def do_activate(self): 33 | win = MainWindow(self) 34 | win.show_all() 35 | localeHelper = LocaleHelper() 36 | lang = localeHelper.getLocale() 37 | 38 | t=gettext.translation('google2ubuntu',os.path.dirname(os.path.abspath(__file__))+'/i18n/',languages=[lang]) 39 | t.install() 40 | 41 | def do_startup(self): 42 | Gtk.Application.do_startup(self) 43 | 44 | 45 | app = MyApplication() 46 | exit_status = app.run(sys.argv) 47 | sys.exit(exit_status) 48 | -------------------------------------------------------------------------------- /google2ubuntu.1.gz: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/google2ubuntu.1.gz -------------------------------------------------------------------------------- /google2ubuntu.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Type=Application 3 | Encoding=UTF-8 4 | Name=google2ubuntu 5 | GenericName=google2ubuntu 6 | Comment=Utiliser la reconnaissance vocale de Google 7 | Icon=/usr/share/google2ubuntu/resources/icons.png 8 | Exec=/usr/share/google2ubuntu/google2ubuntu.py 9 | Terminal=false 10 | StartupNotify=false 11 | Categories=Application 12 | -------------------------------------------------------------------------------- /google2ubuntu.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from subprocess import * 4 | from os.path import expanduser 5 | import sys, subprocess, os, json, urllib2, unicodedata, time, gettext, locale 6 | 7 | sys.path.append(os.path.dirname(os.path.abspath(__file__))+'/librairy') 8 | from interface import interface 9 | from localehelper import LocaleHelper 10 | 11 | localeHelper = LocaleHelper() 12 | lang = localeHelper.getLocale() 13 | 14 | t=gettext.translation('google2ubuntu',os.path.dirname(os.path.abspath(__file__))+'/i18n/',languages=[lang]) 15 | t.install() 16 | 17 | 18 | # pause media player if necessary 19 | config = expanduser('~')+'/.config/google2ubuntu/google2ubuntu.conf' 20 | paused = False 21 | haskey = False 22 | key = '' 23 | 24 | try: 25 | with open(config,"r") as f: 26 | for line in f.readlines(): 27 | line = line.strip('\n') 28 | field = line.split('=') 29 | if field[0] == 'pause' and field[1].replace('"','') != '': 30 | os.system(field[1].replace('"','')+' &') 31 | paused = True 32 | elif field[0] == 'play': 33 | play_command = field[1].replace('"','') 34 | elif field[0] == 'key' and field[1].replace('"','') != '': 35 | key = field[1].replace('"','') 36 | haskey = True 37 | 38 | except Exception: 39 | print 'Error reading google2ubuntu.conf file' 40 | 41 | if haskey == True: 42 | # launch the recognition 43 | g2u = interface(key) 44 | 45 | # restore media player state 46 | if paused: 47 | os.system(play_command+' &') 48 | -------------------------------------------------------------------------------- /i18n/de_DE/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/de_DE/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/de_DE/LC_MESSAGES/google2ubuntu.po: -------------------------------------------------------------------------------- 1 | # English translations for google package. 2 | # Copyright (C) 2014 THE google'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the google package. 4 | # Adrian Stöckl , 2014. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: google 2ubuntu-master\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2014-02-13 13:54+0100\n" 11 | "PO-Revision-Date: 2014-02-06 09:52+0100\n" 12 | "Last-Translator: Adrian Stöckl \n" 13 | "Language-Team: Deutsch\n" 14 | "Language: de_DE\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: librairy/add_window.py:41 21 | msgid "list of commands" 22 | msgstr "Liste der Kommandos" 23 | 24 | #: librairy/add_window.py:54 25 | msgid "Keys" 26 | msgstr "Schlüssel" 27 | 28 | #: librairy/add_window.py:70 29 | msgid "Commands" 30 | msgstr "Kommandos" 31 | 32 | #: librairy/add_window.py:78 librairy/osd.py:35 librairy/osd.py:40 33 | msgid "Ready" 34 | msgstr "Bereit" 35 | 36 | #: librairy/add_window.py:145 librairy/add_window.py:444 37 | #: librairy/add_window.py:446 librairy/add_window.py:476 38 | msgid "key sentence" 39 | msgstr "Schlüssel-Satz" 40 | 41 | #: librairy/add_window.py:145 librairy/add_window.py:205 42 | #: librairy/add_window.py:444 librairy/stringParser.py:75 43 | msgid "external" 44 | msgstr "extern" 45 | 46 | #: librairy/add_window.py:210 librairy/add_window.py:411 47 | #: librairy/add_window.py:415 librairy/add_window.py:426 48 | #: librairy/add_window.py:548 librairy/stringParser.py:66 49 | msgid "modules" 50 | msgstr "module" 51 | 52 | #: librairy/add_window.py:242 53 | msgid "External commands" 54 | msgstr "externe Kommandos" 55 | 56 | #: librairy/add_window.py:246 57 | msgid "Internal commands" 58 | msgstr "interne Kommandos" 59 | 60 | #: librairy/add_window.py:250 61 | msgid "Module" 62 | msgstr "Modul" 63 | 64 | #: librairy/add_window.py:257 65 | msgid "Add" 66 | msgstr "Hinzufügen" 67 | 68 | #: librairy/add_window.py:267 69 | msgid "Add a new command" 70 | msgstr "Füge neues Kommando hinzu" 71 | 72 | #: librairy/add_window.py:272 librairy/add_window.py:284 73 | #: librairy/add_window.py:505 74 | msgid "Remove" 75 | msgstr "Entfernen" 76 | 77 | #: librairy/add_window.py:274 librairy/add_window.py:294 78 | msgid "Remove this command" 79 | msgstr "Entferne dieses Kommando" 80 | 81 | #: librairy/add_window.py:277 82 | msgid "Clean up" 83 | msgstr "Aufräumen" 84 | 85 | #: librairy/add_window.py:279 librairy/add_window.py:526 86 | msgid "Remove all commands" 87 | msgstr "Entferne alle Kommandos" 88 | 89 | #: librairy/add_window.py:299 90 | msgid "Try" 91 | msgstr "Versuche" 92 | 93 | #: librairy/add_window.py:302 94 | msgid "Try this command" 95 | msgstr "Versuche dieses Kommando" 96 | 97 | #: librairy/add_window.py:309 librairy/add_window.py:312 98 | #: librairy/ArgsWindow.py:27 99 | msgid "Module setup" 100 | msgstr "Modulsetup" 101 | 102 | #: librairy/add_window.py:318 103 | msgid "Setup" 104 | msgstr "Setup" 105 | 106 | #: librairy/add_window.py:322 107 | msgid "Open setup window" 108 | msgstr "Setup Fenster öffnen" 109 | 110 | #: librairy/add_window.py:339 111 | msgid "Help" 112 | msgstr "Hilfe" 113 | 114 | #: librairy/add_window.py:343 115 | msgid "Display help message" 116 | msgstr "Zeige Hilfe" 117 | 118 | #: librairy/add_window.py:363 119 | msgid "All" 120 | msgstr "alles" 121 | 122 | #: librairy/add_window.py:364 123 | msgid "External" 124 | msgstr "extern" 125 | 126 | #: librairy/add_window.py:365 127 | msgid "Internal" 128 | msgstr "intern" 129 | 130 | #: librairy/add_window.py:366 131 | msgid "Modules" 132 | msgstr "Module" 133 | 134 | #: librairy/add_window.py:370 135 | msgid "What type of command to add" 136 | msgstr "Welcher Typ von Kommando soll hinzugefügt werden" 137 | 138 | #: librairy/add_window.py:411 librairy/add_window.py:413 139 | #: librairy/add_window.py:446 librairy/add_window.py:548 140 | #: librairy/stringParser.py:28 librairy/stringParser.py:71 141 | msgid "internal" 142 | msgstr "intern" 143 | 144 | #: librairy/add_window.py:444 145 | msgid "your command" 146 | msgstr "ihr Kommando" 147 | 148 | #: librairy/add_window.py:446 149 | msgid "word" 150 | msgstr "Wort" 151 | 152 | #: librairy/add_window.py:454 153 | msgid "Error, you must choose a file" 154 | msgstr "Fehler, wählen sie eine Datei" 155 | 156 | #: librairy/add_window.py:485 157 | msgid "Error, args file missing" 158 | msgstr "Fehler, args fehlen" 159 | 160 | #: librairy/add_window.py:635 161 | msgid "Save commands" 162 | msgstr "Speichere Kommandos" 163 | 164 | #: librairy/ArgsWindow.py:35 165 | msgid "Linking word" 166 | msgstr "Verbinde Wort" 167 | 168 | #: librairy/ArgsWindow.py:39 169 | msgid "Word to separate call and parameter" 170 | msgstr "Wort um Aufruf und Parameter zu trennen" 171 | 172 | #: librairy/ArgsWindow.py:41 librairy/ArgsWindow.py:42 173 | msgid "Replace space by plus" 174 | msgstr "Ersetze Leerzeichen mit Plus" 175 | 176 | #: librairy/ArgsWindow.py:45 librairy/ArgsWindow.py:46 177 | msgid "Go" 178 | msgstr "Los" 179 | 180 | #: librairy/basicCommands.py:28 181 | msgid "time" 182 | msgstr "Zeit" 183 | 184 | #: librairy/basicCommands.py:30 185 | msgid "power" 186 | msgstr "Spannung" 187 | 188 | #: librairy/basicCommands.py:32 189 | msgid "clipboard" 190 | msgstr "Ablage" 191 | 192 | #: librairy/basicCommands.py:34 193 | msgid "dictation mode" 194 | msgstr "Diktatmodus" 195 | 196 | #: librairy/basicCommands.py:37 librairy/stringParser.py:28 197 | msgid "exit dictation mode" 198 | msgstr "Diktatmodus verlassen" 199 | 200 | #: librairy/basicCommands.py:55 201 | msgid "Nothing in the clipboard" 202 | msgstr "Nichts in der Ablage" 203 | 204 | #: librairy/basicCommands.py:66 205 | msgid "it is" 206 | msgstr "es ist" 207 | 208 | #: librairy/basicCommands.py:66 209 | msgid "hour" 210 | msgstr "Stunde" 211 | 212 | #: librairy/basicCommands.py:66 213 | msgid "minute" 214 | msgstr "Minute" 215 | 216 | #: librairy/basicCommands.py:85 217 | msgid "Charging" 218 | msgstr "Lädt" 219 | 220 | #: librairy/basicCommands.py:85 221 | msgid "before charging" 222 | msgstr "vor dem laden" 223 | 224 | #: librairy/basicCommands.py:87 225 | msgid "Discharging" 226 | msgstr "Entlädt" 227 | 228 | #: librairy/basicCommands.py:87 229 | msgid "remaining" 230 | msgstr "verbleibend" 231 | 232 | #: librairy/basicCommands.py:89 233 | msgid "battery is not plugged" 234 | msgstr "Batterie ist nicht eingesteckt" 235 | 236 | #: librairy/HelpWindow.py:28 237 | msgid "Help Google2Ubuntu" 238 | msgstr "Hilfe Google2Ubuntu" 239 | 240 | #: librairy/interface.py:94 241 | msgid "unable to translate" 242 | msgstr "übersetzung nicht möglich" 243 | 244 | #: librairy/moduleSelection.py:18 245 | msgid "Choose a file" 246 | msgstr "Wähle eine Datei" 247 | 248 | #: librairy/osd.py:49 249 | msgid "Error" 250 | msgstr "Fehler" 251 | 252 | #: librairy/osd.py:61 253 | msgid "Recognition result" 254 | msgstr "Erkanntes Ergebnis" 255 | 256 | #: librairy/osd.py:71 257 | msgid "Calling command" 258 | msgstr "Aufrufendes Kommando" 259 | 260 | #: librairy/osd.py:78 261 | msgid "Information" 262 | msgstr "Information" 263 | 264 | #: librairy/osd.py:84 265 | msgid "Performing recording" 266 | msgstr "Führe Aufnahme aus" 267 | 268 | #: librairy/osd.py:85 269 | msgid "Please speak" 270 | msgstr "Sprechen sie bitte" 271 | 272 | #: librairy/osd.py:95 273 | msgid "Done" 274 | msgstr "Fertig" 275 | 276 | #: librairy/SetupWindow.py:27 277 | msgid "Setup window" 278 | msgstr "Setupfenster" 279 | 280 | #: librairy/SetupWindow.py:82 281 | msgid "Select your language" 282 | msgstr "Wählen sie ihre Sprache" 283 | 284 | #: librairy/SetupWindow.py:85 285 | msgid "Set the recording time (seconds)" 286 | msgstr "Wählen sie die Aufnahmedauer" 287 | 288 | #: librairy/SetupWindow.py:88 289 | msgid "Set the music player's play command" 290 | msgstr "Wählen sie das Kommando zum abspielen von Musik" 291 | 292 | #: librairy/SetupWindow.py:91 293 | msgid "Set the music player's pause command" 294 | msgstr "Wählen sie das Kommando zum pausieren der Musik" 295 | 296 | #: librairy/SetupWindow.py:100 297 | msgid "Change the recording time" 298 | msgstr "Ändern sie die Aufnahmedauer" 299 | 300 | #: librairy/SetupWindow.py:104 301 | msgid "Set the play command" 302 | msgstr "Wählen sie das Play-Kommando" 303 | 304 | #: librairy/SetupWindow.py:109 305 | msgid "Set the pause command" 306 | msgstr "Wählen sie das Pause-Kommando" 307 | 308 | #: librairy/SetupWindow.py:174 309 | msgid "What language to choose" 310 | msgstr "Welche Sprache wählen sie" 311 | 312 | #: librairy/stringParser.py:84 313 | msgid "Setup file missing" 314 | msgstr "Setup-Datei fehlt" 315 | 316 | #: librairy/workWithModule.py:55 317 | msgid "you didn't say the linking word" 318 | msgstr "sie haben das Verbindungswort nicht gesagt" 319 | 320 | #: librairy/workWithModule.py:59 321 | msgid "args file missing" 322 | msgstr "args-Datei fehlt" 323 | -------------------------------------------------------------------------------- /i18n/en_EN/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/en_EN/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/en_EN/LC_MESSAGES/google2ubuntu.po: -------------------------------------------------------------------------------- 1 | # French translations for google package 2 | # Traductions françaises du paquet google. 3 | # Copyright (C) 2014 THE google'S COPYRIGHT HOLDER 4 | # This file is distributed under the same license as the google package. 5 | # benoit , 2014. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: google 2ubuntu\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-02-15 14:54+0100\n" 12 | "PO-Revision-Date: 2014-02-02 09:47+0100\n" 13 | "Last-Translator: benoit \n" 14 | "Language-Team: French\n" 15 | "Language: fr\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 20 | 21 | #: listener.py:22 22 | msgid "ok start" 23 | msgstr "ok start" 24 | 25 | #: listener.py:76 26 | msgid "Cannot connect to Google Translate" 27 | msgstr "Cannot connect to Google Translate" 28 | 29 | #: listener.py:78 30 | msgid "Phrase parsing failed" 31 | msgstr "Phrase parsing failed" 32 | 33 | #: listener.py:80 34 | msgid "Error processing value returned by Google Translate" 35 | msgstr "Error processing value returned by Google Translate" 36 | 37 | #: librairy/add_window.py:44 38 | msgid "list of commands" 39 | msgstr "list of commands" 40 | 41 | #: librairy/add_window.py:57 42 | msgid "Keys" 43 | msgstr "Keys" 44 | 45 | #: librairy/add_window.py:73 46 | msgid "Commands" 47 | msgstr "Commands" 48 | 49 | #: librairy/add_window.py:81 librairy/osd.py:35 librairy/osd.py:40 50 | msgid "Ready" 51 | msgstr "Ready" 52 | 53 | #: librairy/add_window.py:153 librairy/add_window.py:504 54 | #: librairy/ArgsWindow.py:35 librairy/ArgsWindow.py:48 55 | #: librairy/externalWindow.py:20 librairy/internalWindow.py:22 56 | msgid "key sentence" 57 | msgstr "key sentence" 58 | 59 | #: librairy/add_window.py:153 librairy/add_window.py:217 60 | #: librairy/add_window.py:429 librairy/externalWindow.py:59 61 | #: librairy/stringParser.py:75 62 | msgid "external" 63 | msgstr "external" 64 | 65 | #: librairy/add_window.py:245 66 | msgid "External commands" 67 | msgstr "External commands" 68 | 69 | #: librairy/add_window.py:249 70 | msgid "Internal commands" 71 | msgstr "Internal commands" 72 | 73 | #: librairy/add_window.py:253 74 | msgid "Module" 75 | msgstr "Module" 76 | 77 | #: librairy/add_window.py:260 78 | msgid "Add" 79 | msgstr "Add" 80 | 81 | #: librairy/add_window.py:270 82 | msgid "Add a new command" 83 | msgstr "Add a new command" 84 | 85 | #: librairy/add_window.py:275 librairy/add_window.py:287 86 | #: librairy/add_window.py:540 87 | msgid "Remove" 88 | msgstr "Remove" 89 | 90 | #: librairy/add_window.py:277 librairy/add_window.py:297 91 | msgid "Remove this command" 92 | msgstr "Remove this command" 93 | 94 | #: librairy/add_window.py:280 95 | msgid "Clean up" 96 | msgstr "Clean up" 97 | 98 | #: librairy/add_window.py:282 librairy/add_window.py:561 99 | msgid "Remove all commands" 100 | msgstr "Remove all commands" 101 | 102 | #: librairy/add_window.py:302 103 | msgid "Try" 104 | msgstr "Try" 105 | 106 | #: librairy/add_window.py:305 107 | msgid "Try this command" 108 | msgstr "Try this command" 109 | 110 | #: librairy/add_window.py:312 111 | msgid "Edit" 112 | msgstr "Edit" 113 | 114 | #: librairy/add_window.py:315 115 | msgid "Edit this command" 116 | msgstr "Edit this command" 117 | 118 | #: librairy/add_window.py:337 119 | msgid "Help" 120 | msgstr "Help" 121 | 122 | #: librairy/add_window.py:341 123 | msgid "Display help message" 124 | msgstr "Display help message" 125 | 126 | #: librairy/add_window.py:361 127 | msgid "All" 128 | msgstr "All" 129 | 130 | #: librairy/add_window.py:362 131 | msgid "External" 132 | msgstr "External" 133 | 134 | #: librairy/add_window.py:363 135 | msgid "Internal" 136 | msgstr "Internal" 137 | 138 | #: librairy/add_window.py:364 139 | msgid "Modules" 140 | msgstr "Modules" 141 | 142 | #: librairy/add_window.py:368 143 | msgid "What type of command to add" 144 | msgstr "What type of command to add" 145 | 146 | #: librairy/add_window.py:409 librairy/add_window.py:413 147 | #: librairy/add_window.py:425 librairy/add_window.py:583 148 | #: librairy/stringParser.py:66 149 | msgid "modules" 150 | msgstr "modules" 151 | 152 | #: librairy/add_window.py:409 librairy/add_window.py:411 153 | #: librairy/add_window.py:433 librairy/add_window.py:583 154 | #: librairy/internalWindow.py:60 librairy/stringParser.py:28 155 | #: librairy/stringParser.py:71 156 | msgid "internal" 157 | msgstr "internal" 158 | 159 | #: librairy/add_window.py:471 160 | msgid "Error, you must choose a file" 161 | msgstr "Error, you must choose a file" 162 | 163 | #: librairy/add_window.py:518 164 | msgid "Error, args file missing" 165 | msgstr "Error, args file missing" 166 | 167 | #: librairy/add_window.py:670 168 | msgid "Save commands" 169 | msgstr "Save commands" 170 | 171 | #: librairy/ArgsWindow.py:40 172 | msgid "Linking word" 173 | msgstr "Linking word" 174 | 175 | #: librairy/ArgsWindow.py:51 176 | msgid "Word to separate call and parameter" 177 | msgstr "Word to separate call and parameter" 178 | 179 | #: librairy/ArgsWindow.py:53 librairy/ArgsWindow.py:54 180 | msgid "Replace space by plus" 181 | msgstr "Replace space by plus" 182 | 183 | #: librairy/ArgsWindow.py:57 librairy/ArgsWindow.py:58 184 | msgid "Go" 185 | msgstr "Go" 186 | 187 | #: librairy/basicCommands.py:28 librairy/internalWindow.py:80 188 | #: librairy/internalWindow.py:81 189 | msgid "time" 190 | msgstr "time" 191 | 192 | #: librairy/basicCommands.py:30 librairy/internalWindow.py:82 193 | #: librairy/internalWindow.py:83 194 | msgid "power" 195 | msgstr "power" 196 | 197 | #: librairy/basicCommands.py:32 librairy/internalWindow.py:84 198 | #: librairy/internalWindow.py:85 199 | msgid "clipboard" 200 | msgstr "clipboard" 201 | 202 | #: librairy/basicCommands.py:34 librairy/internalWindow.py:86 203 | #: librairy/internalWindow.py:87 204 | msgid "dictation mode" 205 | msgstr "dictation mode" 206 | 207 | #: librairy/basicCommands.py:37 librairy/internalWindow.py:88 208 | #: librairy/internalWindow.py:89 librairy/stringParser.py:28 209 | msgid "exit dictation mode" 210 | msgstr "exit dictation mode" 211 | 212 | #: librairy/basicCommands.py:55 213 | msgid "Nothing in the clipboard" 214 | msgstr "Nothing in the clipboard" 215 | 216 | #: librairy/basicCommands.py:66 217 | msgid "it is" 218 | msgstr "it is" 219 | 220 | #: librairy/basicCommands.py:66 221 | msgid "hour" 222 | msgstr "hour" 223 | 224 | #: librairy/basicCommands.py:66 225 | msgid "minute" 226 | msgstr "minute" 227 | 228 | #: librairy/basicCommands.py:85 229 | msgid "Charging" 230 | msgstr "Charging" 231 | 232 | #: librairy/basicCommands.py:85 233 | msgid "before charging" 234 | msgstr "before charging" 235 | 236 | #: librairy/basicCommands.py:87 237 | msgid "Discharging" 238 | msgstr "Discharging" 239 | 240 | #: librairy/basicCommands.py:87 241 | msgid "remaining" 242 | msgstr "remaining" 243 | 244 | #: librairy/basicCommands.py:89 245 | msgid "battery is not plugged" 246 | msgstr "battery is not plugged" 247 | 248 | #: librairy/externalWindow.py:24 librairy/internalWindow.py:26 249 | msgid "your command" 250 | msgstr "your command" 251 | 252 | #: librairy/HelpWindow.py:28 253 | msgid "Help Google2Ubuntu" 254 | msgstr "Help Google2Ubuntu" 255 | 256 | #: librairy/interface.py:95 257 | msgid "unable to translate" 258 | msgstr "unable to translate" 259 | 260 | #: librairy/internalWindow.py:99 261 | msgid "Which internal command to choose" 262 | msgstr "Which internal command to choose" 263 | 264 | #: librairy/MainWindow.py:33 265 | msgid "Setup" 266 | msgstr "Setup" 267 | 268 | #: librairy/MainWindow.py:35 269 | msgid "Open setup window" 270 | msgstr "Open setup window" 271 | 272 | #: librairy/moduleSelection.py:18 273 | msgid "Choose a file" 274 | msgstr "Choose a file" 275 | 276 | #: librairy/osd.py:49 277 | msgid "Error" 278 | msgstr "Error" 279 | 280 | #: librairy/osd.py:61 281 | msgid "Recognition result" 282 | msgstr "Recognition result" 283 | 284 | #: librairy/osd.py:71 285 | msgid "Calling command" 286 | msgstr "Calling command" 287 | 288 | #: librairy/osd.py:78 289 | msgid "Information" 290 | msgstr "Information" 291 | 292 | #: librairy/osd.py:84 293 | msgid "Performing recording" 294 | msgstr "Performing recording" 295 | 296 | #: librairy/osd.py:85 297 | msgid "Please speak" 298 | msgstr "Please speak" 299 | 300 | #: librairy/osd.py:95 301 | msgid "Done" 302 | msgstr "Done" 303 | 304 | #: librairy/SetupWindow.py:27 305 | msgid "Select your language" 306 | msgstr "Select your language" 307 | 308 | #: librairy/SetupWindow.py:31 309 | msgid "Set the recording time (seconds)" 310 | msgstr "Set the recording time (seconds)" 311 | 312 | #: librairy/SetupWindow.py:34 313 | msgid "Set the music player's play command" 314 | msgstr "Set the music player's play command" 315 | 316 | #: librairy/SetupWindow.py:37 317 | msgid "Set the music player's pause command" 318 | msgstr "Set the music player's pause command" 319 | 320 | #: librairy/SetupWindow.py:40 321 | msgid "Hotword mode" 322 | msgstr "Hotword mode" 323 | 324 | #: librairy/SetupWindow.py:43 325 | msgid "Set the noise threshold" 326 | msgstr "Set the noise threshold" 327 | 328 | #: librairy/SetupWindow.py:46 329 | msgid "Set the hotword" 330 | msgstr "Set the hotword" 331 | 332 | #: librairy/SetupWindow.py:55 333 | msgid "Change the recording time" 334 | msgstr "Change the recording time" 335 | 336 | #: librairy/SetupWindow.py:59 337 | msgid "Set the play command" 338 | msgstr "Set the play command" 339 | 340 | #: librairy/SetupWindow.py:64 341 | msgid "Set the pause command" 342 | msgstr "Set the pause command" 343 | 344 | #: librairy/SetupWindow.py:72 345 | msgid "Put the hotword mode ON or OFF" 346 | msgstr "Put the hotword mode ON or OFF" 347 | 348 | #: librairy/SetupWindow.py:78 349 | #, python-format 350 | msgid "Set the sound level in % under which sound is considerated as noise" 351 | msgstr "Set the sound level in % under which sound is considerated as noise" 352 | 353 | #: librairy/SetupWindow.py:82 354 | msgid "Set the hotword to start effective recording" 355 | msgstr "Set the hotword to start effective recording" 356 | 357 | #: librairy/SetupWindow.py:216 358 | msgid "What language to choose" 359 | msgstr "What language to choose" 360 | 361 | #: librairy/stringParser.py:84 362 | msgid "Setup file missing" 363 | msgstr "Setup file missing" 364 | 365 | #: librairy/workWithModule.py:55 366 | msgid "you didn't say the linking word" 367 | msgstr "you didn't say th linking word" 368 | 369 | #: librairy/workWithModule.py:59 370 | msgid "args file missing" 371 | msgstr "args file missing" 372 | 373 | #~ msgid "Module setup" 374 | #~ msgstr "Module setup" 375 | 376 | #~ msgid "word" 377 | #~ msgstr "word" 378 | 379 | #~ msgid "Setup window" 380 | #~ msgstr "Setup window" 381 | 382 | #~ msgid "Set the music palyer's pause command" 383 | #~ msgstr "Set the music player's pause command" 384 | 385 | #~ msgid "between" 386 | #~ msgstr "between" 387 | 388 | #~ msgid "and" 389 | #~ msgstr "and" 390 | 391 | #~ msgid "Performing recognition" 392 | #~ msgstr "Performing recognition" 393 | 394 | #~ msgid "Please wait" 395 | #~ msgstr "Please wait" 396 | -------------------------------------------------------------------------------- /i18n/es_ES/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/es_ES/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/es_ES/LC_MESSAGES/google2ubuntu.po: -------------------------------------------------------------------------------- 1 | # French translations for google package 2 | # Traductions françaises du paquet google. 3 | # Copyright (C) 2014 THE google'S COPYRIGHT HOLDER 4 | # This file is distributed under the same license as the google package. 5 | # benoit , 2014. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: google 2ubuntu\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-02-15 14:54+0100\n" 12 | "PO-Revision-Date: 2014-02-06 18:32+0100\n" 13 | "Last-Translator: benoit \n" 14 | "Language-Team: French\n" 15 | "Language: fr\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n > 1);\n" 20 | 21 | #: listener.py:22 22 | msgid "ok start" 23 | msgstr "ok inicio" 24 | 25 | #: listener.py:76 26 | msgid "Cannot connect to Google Translate" 27 | msgstr "no se puede conectar a traductor Google" 28 | 29 | #: listener.py:78 30 | msgid "Phrase parsing failed" 31 | msgstr "Análisis Frase fallado" 32 | 33 | #: listener.py:80 34 | msgid "Error processing value returned by Google Translate" 35 | msgstr "Error al procesar el valor devuelto por el traductor de Google" 36 | 37 | #: librairy/add_window.py:44 38 | msgid "list of commands" 39 | msgstr "lista de ordenes" 40 | 41 | #: librairy/add_window.py:57 42 | msgid "Keys" 43 | msgstr "clave" 44 | 45 | #: librairy/add_window.py:73 46 | msgid "Commands" 47 | msgstr "ordenes" 48 | 49 | #: librairy/add_window.py:81 librairy/osd.py:35 librairy/osd.py:40 50 | msgid "Ready" 51 | msgstr "Listo" 52 | 53 | #: librairy/add_window.py:153 librairy/add_window.py:504 54 | #: librairy/ArgsWindow.py:35 librairy/ArgsWindow.py:48 55 | #: librairy/externalWindow.py:20 librairy/internalWindow.py:22 56 | msgid "key sentence" 57 | msgstr "su sentencia" 58 | 59 | #: librairy/add_window.py:153 librairy/add_window.py:217 60 | #: librairy/add_window.py:429 librairy/externalWindow.py:59 61 | #: librairy/stringParser.py:75 62 | msgid "external" 63 | msgstr "externas" 64 | 65 | #: librairy/add_window.py:245 66 | msgid "External commands" 67 | msgstr "Ordenes externas" 68 | 69 | #: librairy/add_window.py:249 70 | msgid "Internal commands" 71 | msgstr "Ordenes internas" 72 | 73 | #: librairy/add_window.py:253 74 | msgid "Module" 75 | msgstr "Módulo" 76 | 77 | #: librairy/add_window.py:260 78 | msgid "Add" 79 | msgstr "Agregar" 80 | 81 | #: librairy/add_window.py:270 82 | msgid "Add a new command" 83 | msgstr "Agregar nueva orden" 84 | 85 | #: librairy/add_window.py:275 librairy/add_window.py:287 86 | #: librairy/add_window.py:540 87 | msgid "Remove" 88 | msgstr "Eliminar" 89 | 90 | #: librairy/add_window.py:277 librairy/add_window.py:297 91 | msgid "Remove this command" 92 | msgstr "Eliminar esta orden" 93 | 94 | #: librairy/add_window.py:280 95 | msgid "Clean up" 96 | msgstr "Limpiar" 97 | 98 | #: librairy/add_window.py:282 librairy/add_window.py:561 99 | msgid "Remove all commands" 100 | msgstr "Eliminar todas las ordenes" 101 | 102 | #: librairy/add_window.py:302 103 | msgid "Try" 104 | msgstr "Intentar" 105 | 106 | #: librairy/add_window.py:305 107 | msgid "Try this command" 108 | msgstr "Intentar esta orden" 109 | 110 | #: librairy/add_window.py:312 111 | msgid "Edit" 112 | msgstr "Editar" 113 | 114 | #: librairy/add_window.py:315 115 | msgid "Edit this command" 116 | msgstr "Editar este orden" 117 | 118 | #: librairy/add_window.py:337 119 | msgid "Help" 120 | msgstr "Ayuda" 121 | 122 | #: librairy/add_window.py:341 123 | msgid "Display help message" 124 | msgstr "Mostrar la ayuda" 125 | 126 | #: librairy/add_window.py:361 127 | msgid "All" 128 | msgstr "Todas" 129 | 130 | #: librairy/add_window.py:362 131 | msgid "External" 132 | msgstr "Externas" 133 | 134 | #: librairy/add_window.py:363 135 | msgid "Internal" 136 | msgstr "Internas" 137 | 138 | #: librairy/add_window.py:364 139 | msgid "Modules" 140 | msgstr "Módulos" 141 | 142 | #: librairy/add_window.py:368 143 | msgid "What type of command to add" 144 | msgstr "Que type de orden agregar" 145 | 146 | #: librairy/add_window.py:409 librairy/add_window.py:413 147 | #: librairy/add_window.py:425 librairy/add_window.py:583 148 | #: librairy/stringParser.py:66 149 | msgid "modules" 150 | msgstr "módulos" 151 | 152 | #: librairy/add_window.py:409 librairy/add_window.py:411 153 | #: librairy/add_window.py:433 librairy/add_window.py:583 154 | #: librairy/internalWindow.py:60 librairy/stringParser.py:28 155 | #: librairy/stringParser.py:71 156 | msgid "internal" 157 | msgstr "internas" 158 | 159 | #: librairy/add_window.py:471 160 | msgid "Error, you must choose a file" 161 | msgstr "Error, debe seleccionar un archivo" 162 | 163 | #: librairy/add_window.py:518 164 | msgid "Error, args file missing" 165 | msgstr "Error, archivo args ausente" 166 | 167 | #: librairy/add_window.py:670 168 | msgid "Save commands" 169 | msgstr "Salvar ordenes" 170 | 171 | #: librairy/ArgsWindow.py:40 172 | msgid "Linking word" 173 | msgstr "Palabra para vincular" 174 | 175 | #: librairy/ArgsWindow.py:51 176 | msgid "Word to separate call and parameter" 177 | msgstr "Palabra que permite separar los parametros y la llamade del modulo" 178 | 179 | #: librairy/ArgsWindow.py:53 librairy/ArgsWindow.py:54 180 | msgid "Replace space by plus" 181 | msgstr "Substituir los espacios por adicion" 182 | 183 | #: librairy/ArgsWindow.py:57 librairy/ArgsWindow.py:58 184 | msgid "Go" 185 | msgstr "Continuar" 186 | 187 | #: librairy/basicCommands.py:28 librairy/internalWindow.py:80 188 | #: librairy/internalWindow.py:81 189 | msgid "time" 190 | msgstr "hora" 191 | 192 | #: librairy/basicCommands.py:30 librairy/internalWindow.py:82 193 | #: librairy/internalWindow.py:83 194 | msgid "power" 195 | msgstr "bateria" 196 | 197 | #: librairy/basicCommands.py:32 librairy/internalWindow.py:84 198 | #: librairy/internalWindow.py:85 199 | msgid "clipboard" 200 | msgstr "portapapeles" 201 | 202 | #: librairy/basicCommands.py:34 librairy/internalWindow.py:86 203 | #: librairy/internalWindow.py:87 204 | msgid "dictation mode" 205 | msgstr "modo dictado" 206 | 207 | #: librairy/basicCommands.py:37 librairy/internalWindow.py:88 208 | #: librairy/internalWindow.py:89 librairy/stringParser.py:28 209 | msgid "exit dictation mode" 210 | msgstr "salgar del modo dictado" 211 | 212 | #: librairy/basicCommands.py:55 213 | msgid "Nothing in the clipboard" 214 | msgstr "el portapapeles est vacio" 215 | 216 | #: librairy/basicCommands.py:66 217 | msgid "it is" 218 | msgstr "es" 219 | 220 | #: librairy/basicCommands.py:66 221 | msgid "hour" 222 | msgstr "hora" 223 | 224 | #: librairy/basicCommands.py:66 225 | msgid "minute" 226 | msgstr "minuta" 227 | 228 | #: librairy/basicCommands.py:85 229 | msgid "Charging" 230 | msgstr "Cargando" 231 | 232 | #: librairy/basicCommands.py:85 233 | msgid "before charging" 234 | msgstr "antes de cargando" 235 | 236 | #: librairy/basicCommands.py:87 237 | msgid "Discharging" 238 | msgstr "Descargando" 239 | 240 | #: librairy/basicCommands.py:87 241 | msgid "remaining" 242 | msgstr "queda" 243 | 244 | #: librairy/basicCommands.py:89 245 | msgid "battery is not plugged" 246 | msgstr "la bateria no esta" 247 | 248 | #: librairy/externalWindow.py:24 librairy/internalWindow.py:26 249 | msgid "your command" 250 | msgstr "su orden" 251 | 252 | #: librairy/HelpWindow.py:28 253 | msgid "Help Google2Ubuntu" 254 | msgstr "Ayuda de google2ubuntu" 255 | 256 | #: librairy/interface.py:95 257 | msgid "unable to translate" 258 | msgstr "imposible de traducir" 259 | 260 | #: librairy/internalWindow.py:99 261 | msgid "Which internal command to choose" 262 | msgstr "que orden interno eligir" 263 | 264 | #: librairy/MainWindow.py:33 265 | msgid "Setup" 266 | msgstr "Configuración" 267 | 268 | #: librairy/MainWindow.py:35 269 | msgid "Open setup window" 270 | msgstr "Abrir la ventana de configuración" 271 | 272 | #: librairy/moduleSelection.py:18 273 | msgid "Choose a file" 274 | msgstr "Elige une archivo" 275 | 276 | #: librairy/osd.py:49 277 | msgid "Error" 278 | msgstr "Error" 279 | 280 | #: librairy/osd.py:61 281 | msgid "Recognition result" 282 | msgstr "Resultado del reconocimiento" 283 | 284 | #: librairy/osd.py:71 285 | msgid "Calling command" 286 | msgstr "orden de llamada" 287 | 288 | #: librairy/osd.py:78 289 | msgid "Information" 290 | msgstr "Información" 291 | 292 | #: librairy/osd.py:84 293 | msgid "Performing recording" 294 | msgstr "Registro en cursos" 295 | 296 | #: librairy/osd.py:85 297 | msgid "Please speak" 298 | msgstr "Por favor, hable" 299 | 300 | #: librairy/osd.py:95 301 | msgid "Done" 302 | msgstr "terminado" 303 | 304 | #: librairy/SetupWindow.py:27 305 | msgid "Select your language" 306 | msgstr "Elija su idioma" 307 | 308 | #: librairy/SetupWindow.py:31 309 | msgid "Set the recording time (seconds)" 310 | msgstr "Ajuste el tiempo de grabación (segundos)" 311 | 312 | #: librairy/SetupWindow.py:34 313 | msgid "Set the music player's play command" 314 | msgstr "Ajustar el control de pausa del jugador de medios" 315 | 316 | #: librairy/SetupWindow.py:37 317 | msgid "Set the music player's pause command" 318 | msgstr "Ajustar el control de la reproducción del reproductor multimedia" 319 | 320 | #: librairy/SetupWindow.py:40 321 | msgid "Hotword mode" 322 | msgstr "Modo de palabras clave" 323 | 324 | #: librairy/SetupWindow.py:43 325 | msgid "Set the noise threshold" 326 | msgstr "Ajuste el umbral de ruido" 327 | 328 | #: librairy/SetupWindow.py:46 329 | msgid "Set the hotword" 330 | msgstr "Establezca la palabra clave" 331 | 332 | #: librairy/SetupWindow.py:55 333 | msgid "Change the recording time" 334 | msgstr "Cambiar el tiempo de grabación" 335 | 336 | #: librairy/SetupWindow.py:59 337 | msgid "Set the play command" 338 | msgstr "Ajustar el control de reproducción" 339 | 340 | #: librairy/SetupWindow.py:64 341 | msgid "Set the pause command" 342 | msgstr "Ajustar el control de pausa" 343 | 344 | #: librairy/SetupWindow.py:72 345 | msgid "Put the hotword mode ON or OFF" 346 | msgstr "Ponga el modo de palabra clave ON u OFF" 347 | 348 | #: librairy/SetupWindow.py:78 349 | #, python-format 350 | msgid "Set the sound level in % under which sound is considerated as noise" 351 | msgstr "Ajuste el nivel de sonido en% en virtud del cual el sonido es considerar que es el ruido" 352 | 353 | #: librairy/SetupWindow.py:82 354 | msgid "Set the hotword to start effective recording" 355 | msgstr "Ajuste el hotword para iniciar la grabación efectiva" 356 | 357 | #: librairy/SetupWindow.py:216 358 | msgid "What language to choose" 359 | msgstr "Qué idioma para elegir" 360 | 361 | #: librairy/stringParser.py:84 362 | msgid "Setup file missing" 363 | msgstr "El archivo de configuración ausente" 364 | 365 | #: librairy/workWithModule.py:55 366 | msgid "you didn't say the linking word" 367 | msgstr "no has dicho la palabra de enlace" 368 | 369 | #: librairy/workWithModule.py:59 370 | msgid "args file missing" 371 | msgstr "args archivo ausente" 372 | 373 | #~ msgid "Module setup" 374 | #~ msgstr "Módulo confiuguracion" 375 | 376 | #~ msgid "word" 377 | #~ msgstr "palabra" 378 | 379 | #~ msgid "Setup window" 380 | #~ msgstr "Ventana de configuración" 381 | -------------------------------------------------------------------------------- /i18n/fr_FR/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/fr_FR/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/google2ubuntu.pot: -------------------------------------------------------------------------------- 1 | # SOME DESCRIPTIVE TITLE. 2 | # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the PACKAGE package. 4 | # FIRST AUTHOR , YEAR. 5 | # 6 | #, fuzzy 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: PACKAGE VERSION\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-08-03 10:14+0200\n" 12 | "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" 13 | "Last-Translator: FULL NAME \n" 14 | "Language-Team: LANGUAGE \n" 15 | "Language: \n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=CHARSET\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | 20 | #: listener.py:22 librairy/SetupWindow.py:23 21 | msgid "ok start" 22 | msgstr "" 23 | 24 | #: listener.py:76 25 | msgid "Cannot connect to Google Translate" 26 | msgstr "" 27 | 28 | #: listener.py:78 29 | msgid "Phrase parsing failed" 30 | msgstr "" 31 | 32 | #: listener.py:80 33 | msgid "Error processing value returned by Google Translate" 34 | msgstr "" 35 | 36 | #: librairy/add_window.py:44 37 | msgid "list of commands" 38 | msgstr "" 39 | 40 | #: librairy/add_window.py:57 41 | msgid "Keys" 42 | msgstr "" 43 | 44 | #: librairy/add_window.py:73 45 | msgid "Commands" 46 | msgstr "" 47 | 48 | #: librairy/add_window.py:81 librairy/osd.py:35 librairy/osd.py:40 49 | msgid "Ready" 50 | msgstr "" 51 | 52 | #: librairy/add_window.py:158 librairy/ArgsWindow.py:35 53 | #: librairy/ArgsWindow.py:52 librairy/externalWindow.py:20 54 | #: librairy/internalWindow.py:22 55 | msgid "key sentence" 56 | msgstr "" 57 | 58 | #: librairy/add_window.py:158 librairy/add_window.py:222 59 | #: librairy/add_window.py:433 librairy/externalWindow.py:59 60 | #: librairy/stringParser.py:79 61 | msgid "external" 62 | msgstr "" 63 | 64 | #: librairy/add_window.py:250 65 | msgid "External commands" 66 | msgstr "" 67 | 68 | #: librairy/add_window.py:254 69 | msgid "Internal commands" 70 | msgstr "" 71 | 72 | #: librairy/add_window.py:258 73 | msgid "Module" 74 | msgstr "" 75 | 76 | #: librairy/add_window.py:265 77 | msgid "Add" 78 | msgstr "" 79 | 80 | #: librairy/add_window.py:275 81 | msgid "Add a new command" 82 | msgstr "" 83 | 84 | #: librairy/add_window.py:280 librairy/add_window.py:292 85 | #: librairy/add_window.py:526 86 | msgid "Remove" 87 | msgstr "" 88 | 89 | #: librairy/add_window.py:282 librairy/add_window.py:302 90 | msgid "Remove this command" 91 | msgstr "" 92 | 93 | #: librairy/add_window.py:285 94 | msgid "Clean up" 95 | msgstr "" 96 | 97 | #: librairy/add_window.py:287 librairy/add_window.py:547 98 | msgid "Remove all commands" 99 | msgstr "" 100 | 101 | #: librairy/add_window.py:307 102 | msgid "Try" 103 | msgstr "" 104 | 105 | #: librairy/add_window.py:310 106 | msgid "Try this command" 107 | msgstr "" 108 | 109 | #: librairy/add_window.py:317 110 | msgid "Edit" 111 | msgstr "" 112 | 113 | #: librairy/add_window.py:320 114 | msgid "Edit this command" 115 | msgstr "" 116 | 117 | #: librairy/add_window.py:342 118 | msgid "Help" 119 | msgstr "" 120 | 121 | #: librairy/add_window.py:346 122 | msgid "Display help message" 123 | msgstr "" 124 | 125 | #: librairy/add_window.py:366 126 | msgid "All" 127 | msgstr "" 128 | 129 | #: librairy/add_window.py:367 130 | msgid "External" 131 | msgstr "" 132 | 133 | #: librairy/add_window.py:368 134 | msgid "Internal" 135 | msgstr "" 136 | 137 | #: librairy/add_window.py:369 138 | msgid "Modules" 139 | msgstr "" 140 | 141 | #: librairy/add_window.py:373 142 | msgid "What type of command to add" 143 | msgstr "" 144 | 145 | #: librairy/add_window.py:414 librairy/add_window.py:418 146 | #: librairy/add_window.py:431 librairy/add_window.py:569 147 | #: librairy/stringParser.py:69 148 | msgid "modules" 149 | msgstr "" 150 | 151 | #: librairy/add_window.py:414 librairy/add_window.py:416 152 | #: librairy/add_window.py:435 librairy/add_window.py:569 153 | #: librairy/internalWindow.py:60 librairy/stringParser.py:28 154 | #: librairy/stringParser.py:75 155 | msgid "internal" 156 | msgstr "" 157 | 158 | #: librairy/add_window.py:476 159 | msgid "Error, you must choose a file" 160 | msgstr "" 161 | 162 | #: librairy/add_window.py:663 163 | msgid "Save commands" 164 | msgstr "" 165 | 166 | #: librairy/ArgsWindow.py:40 167 | msgid "Linking word" 168 | msgstr "" 169 | 170 | #: librairy/ArgsWindow.py:44 librairy/ArgsWindow.py:57 171 | msgid "Replace space by plus" 172 | msgstr "" 173 | 174 | #: librairy/ArgsWindow.py:55 175 | msgid "Word to separate call and parameter" 176 | msgstr "" 177 | 178 | #: librairy/ArgsWindow.py:61 librairy/ArgsWindow.py:62 179 | msgid "Go" 180 | msgstr "" 181 | 182 | #: librairy/basicCommands.py:28 librairy/internalWindow.py:80 183 | #: librairy/internalWindow.py:81 184 | msgid "time" 185 | msgstr "" 186 | 187 | #: librairy/basicCommands.py:30 librairy/internalWindow.py:82 188 | #: librairy/internalWindow.py:83 189 | msgid "power" 190 | msgstr "" 191 | 192 | #: librairy/basicCommands.py:32 librairy/internalWindow.py:84 193 | #: librairy/internalWindow.py:85 194 | msgid "clipboard" 195 | msgstr "" 196 | 197 | #: librairy/basicCommands.py:34 librairy/internalWindow.py:86 198 | #: librairy/internalWindow.py:87 199 | msgid "dictation mode" 200 | msgstr "" 201 | 202 | #: librairy/basicCommands.py:37 librairy/internalWindow.py:88 203 | #: librairy/internalWindow.py:89 librairy/stringParser.py:28 204 | msgid "exit dictation mode" 205 | msgstr "" 206 | 207 | #: librairy/basicCommands.py:55 208 | msgid "Nothing in the clipboard" 209 | msgstr "" 210 | 211 | #: librairy/basicCommands.py:66 212 | msgid "it is" 213 | msgstr "" 214 | 215 | #: librairy/basicCommands.py:66 216 | msgid "hour" 217 | msgstr "" 218 | 219 | #: librairy/basicCommands.py:66 220 | msgid "minute" 221 | msgstr "" 222 | 223 | #: librairy/basicCommands.py:85 224 | msgid "Charging" 225 | msgstr "" 226 | 227 | #: librairy/basicCommands.py:85 228 | msgid "before charging" 229 | msgstr "" 230 | 231 | #: librairy/basicCommands.py:87 232 | msgid "Discharging" 233 | msgstr "" 234 | 235 | #: librairy/basicCommands.py:87 236 | msgid "remaining" 237 | msgstr "" 238 | 239 | #: librairy/basicCommands.py:89 240 | msgid "battery is not plugged" 241 | msgstr "" 242 | 243 | #: librairy/externalWindow.py:24 librairy/internalWindow.py:26 244 | msgid "your command" 245 | msgstr "" 246 | 247 | #: librairy/HelpWindow.py:30 248 | msgid "Help Google2Ubuntu" 249 | msgstr "" 250 | 251 | #: librairy/interface.py:92 252 | msgid "unable to translate" 253 | msgstr "" 254 | 255 | #: librairy/internalWindow.py:99 256 | msgid "Which internal command to choose" 257 | msgstr "" 258 | 259 | #: librairy/MainWindow.py:33 260 | msgid "Setup" 261 | msgstr "" 262 | 263 | #: librairy/MainWindow.py:35 264 | msgid "Open setup window" 265 | msgstr "" 266 | 267 | #: librairy/moduleSelection.py:18 268 | msgid "Choose a file" 269 | msgstr "" 270 | 271 | #: librairy/osd.py:49 272 | msgid "Error" 273 | msgstr "" 274 | 275 | #: librairy/osd.py:61 276 | msgid "Recognition result" 277 | msgstr "" 278 | 279 | #: librairy/osd.py:71 280 | msgid "Calling command" 281 | msgstr "" 282 | 283 | #: librairy/osd.py:78 284 | msgid "Information" 285 | msgstr "" 286 | 287 | #: librairy/osd.py:84 288 | msgid "Performing recording" 289 | msgstr "" 290 | 291 | #: librairy/osd.py:85 292 | msgid "Please speak" 293 | msgstr "" 294 | 295 | #: librairy/osd.py:95 296 | msgid "Done" 297 | msgstr "" 298 | 299 | #: librairy/SetupWindow.py:28 300 | msgid "Set Google Api Key" 301 | msgstr "" 302 | 303 | #: librairy/SetupWindow.py:31 304 | msgid "Select your language" 305 | msgstr "" 306 | 307 | #: librairy/SetupWindow.py:35 308 | msgid "Set the recording time (seconds)" 309 | msgstr "" 310 | 311 | #: librairy/SetupWindow.py:38 312 | msgid "Set the music player's play command" 313 | msgstr "" 314 | 315 | #: librairy/SetupWindow.py:41 316 | msgid "Set the music player's pause command" 317 | msgstr "" 318 | 319 | #: librairy/SetupWindow.py:44 320 | msgid "Hotword mode" 321 | msgstr "" 322 | 323 | #: librairy/SetupWindow.py:47 324 | msgid "Set the noise threshold" 325 | msgstr "" 326 | 327 | #: librairy/SetupWindow.py:50 328 | msgid "Set the hotword" 329 | msgstr "" 330 | 331 | #: librairy/SetupWindow.py:59 332 | msgid "Change the recording time" 333 | msgstr "" 334 | 335 | #: librairy/SetupWindow.py:63 336 | msgid "Set the Google Api Key" 337 | msgstr "" 338 | 339 | #: librairy/SetupWindow.py:67 340 | msgid "Set the play command" 341 | msgstr "" 342 | 343 | #: librairy/SetupWindow.py:72 344 | msgid "Set the pause command" 345 | msgstr "" 346 | 347 | #: librairy/SetupWindow.py:80 348 | msgid "Put the hotword mode ON or OFF" 349 | msgstr "" 350 | 351 | #: librairy/SetupWindow.py:86 352 | #, python-format 353 | msgid "Set the sound level in % under which sound is considerated as noise" 354 | msgstr "" 355 | 356 | #: librairy/SetupWindow.py:90 357 | msgid "Set the hotword to start effective recording" 358 | msgstr "" 359 | 360 | #: librairy/SetupWindow.py:229 361 | msgid "What language to choose" 362 | msgstr "" 363 | 364 | #: librairy/stringParser.py:88 365 | msgid "Setup file missing" 366 | msgstr "" 367 | 368 | #: librairy/workWithModule.py:48 369 | msgid "you didn't say the linking word" 370 | msgstr "" 371 | 372 | #: librairy/workWithModule.py:52 373 | msgid "args file missing" 374 | msgstr "" 375 | -------------------------------------------------------------------------------- /i18n/it_IT/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/it_IT/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/it_IT/LC_MESSAGES/google2ubuntu.po: -------------------------------------------------------------------------------- 1 | # Italian translations for google package 2 | # Traduzioni italiane per il pacchetto google.. 3 | # Copyright (C) 2014 THE google'S COPYRIGHT HOLDER 4 | # This file is distributed under the same license as the google package. 5 | # 6 | # Mte90 , 2014. 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: google 2ubuntu\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-02-15 14:54+0100\n" 12 | "PO-Revision-Date: 2014-03-01 12:19+0100\n" 13 | "Last-Translator: \n" 14 | "Language-Team: it \n" 15 | "Language: it\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | "X-Generator: Poedit 1.5.4\n" 21 | 22 | #: listener.py:22 23 | msgid "ok start" 24 | msgstr "ok inizia" 25 | 26 | #: listener.py:76 27 | msgid "Cannot connect to Google Translate" 28 | msgstr "Non è stato possibile connettersi a Google Translate" 29 | 30 | #: listener.py:78 31 | msgid "Phrase parsing failed" 32 | msgstr "Parsing della frase fallito" 33 | 34 | #: listener.py:80 35 | msgid "Error processing value returned by Google Translate" 36 | msgstr "Errore durante l'analisi del valore fornito da Google Translate" 37 | 38 | #: librairy/add_window.py:44 39 | msgid "list of commands" 40 | msgstr "lista dei comandi" 41 | 42 | #: librairy/add_window.py:57 43 | msgid "Keys" 44 | msgstr "Tasti" 45 | 46 | #: librairy/add_window.py:73 47 | msgid "Commands" 48 | msgstr "Comandi" 49 | 50 | #: librairy/add_window.py:81 librairy/osd.py:35 librairy/osd.py:40 51 | msgid "Ready" 52 | msgstr "Pronto" 53 | 54 | #: librairy/add_window.py:153 librairy/add_window.py:504 55 | #: librairy/ArgsWindow.py:35 librairy/ArgsWindow.py:48 56 | #: librairy/externalWindow.py:20 librairy/internalWindow.py:22 57 | msgid "key sentence" 58 | msgstr "frase chiave" 59 | 60 | #: librairy/add_window.py:153 librairy/add_window.py:217 61 | #: librairy/add_window.py:429 librairy/externalWindow.py:59 62 | #: librairy/stringParser.py:75 63 | msgid "external" 64 | msgstr "esterno" 65 | 66 | #: librairy/add_window.py:245 67 | msgid "External commands" 68 | msgstr "Comando esterno" 69 | 70 | #: librairy/add_window.py:249 71 | msgid "Internal commands" 72 | msgstr "Comando interno" 73 | 74 | #: librairy/add_window.py:253 75 | msgid "Module" 76 | msgstr "Modulo" 77 | 78 | #: librairy/add_window.py:260 79 | msgid "Add" 80 | msgstr "Aggiungi" 81 | 82 | #: librairy/add_window.py:270 83 | msgid "Add a new command" 84 | msgstr "Aggiungi un nuovo comando" 85 | 86 | #: librairy/add_window.py:275 librairy/add_window.py:287 87 | #: librairy/add_window.py:540 88 | msgid "Remove" 89 | msgstr "Rimuovi" 90 | 91 | #: librairy/add_window.py:277 librairy/add_window.py:297 92 | msgid "Remove this command" 93 | msgstr "Rimuovi questo comando" 94 | 95 | #: librairy/add_window.py:280 96 | msgid "Clean up" 97 | msgstr "Pulisci" 98 | 99 | #: librairy/add_window.py:282 librairy/add_window.py:561 100 | msgid "Remove all commands" 101 | msgstr "Rimuovi tutti i comandi" 102 | 103 | #: librairy/add_window.py:302 104 | msgid "Try" 105 | msgstr "Prova" 106 | 107 | #: librairy/add_window.py:305 108 | msgid "Try this command" 109 | msgstr "Prova questo comando" 110 | 111 | #: librairy/add_window.py:312 112 | msgid "Edit" 113 | msgstr "Modifica" 114 | 115 | #: librairy/add_window.py:315 116 | msgid "Edit this command" 117 | msgstr "Modifica questo comando" 118 | 119 | #: librairy/add_window.py:337 120 | msgid "Help" 121 | msgstr "Aiuto" 122 | 123 | #: librairy/add_window.py:341 124 | msgid "Display help message" 125 | msgstr "Mostra messaggi d'aiuto" 126 | 127 | #: librairy/add_window.py:361 128 | msgid "All" 129 | msgstr "Tutti" 130 | 131 | #: librairy/add_window.py:362 132 | msgid "External" 133 | msgstr "Esterni" 134 | 135 | #: librairy/add_window.py:363 136 | msgid "Internal" 137 | msgstr "Interni" 138 | 139 | #: librairy/add_window.py:364 140 | msgid "Modules" 141 | msgstr "Moduli" 142 | 143 | #: librairy/add_window.py:368 144 | msgid "What type of command to add" 145 | msgstr "Tipo di comando da aggiungere" 146 | 147 | #: librairy/add_window.py:409 librairy/add_window.py:413 148 | #: librairy/add_window.py:425 librairy/add_window.py:583 149 | #: librairy/stringParser.py:66 150 | msgid "modules" 151 | msgstr "moduli" 152 | 153 | #: librairy/add_window.py:409 librairy/add_window.py:411 154 | #: librairy/add_window.py:433 librairy/add_window.py:583 155 | #: librairy/internalWindow.py:60 librairy/stringParser.py:28 156 | #: librairy/stringParser.py:71 157 | msgid "internal" 158 | msgstr "interno" 159 | 160 | #: librairy/add_window.py:471 161 | msgid "Error, you must choose a file" 162 | msgstr "Errore devi scegliere un file" 163 | 164 | #: librairy/add_window.py:518 165 | msgid "Error, args file missing" 166 | msgstr "Errore file mancante" 167 | 168 | #: librairy/add_window.py:670 169 | msgid "Save commands" 170 | msgstr "Salva i comandi" 171 | 172 | #: librairy/ArgsWindow.py:40 173 | msgid "Linking word" 174 | msgstr "Parola collegata" 175 | 176 | #: librairy/ArgsWindow.py:51 177 | msgid "Word to separate call and parameter" 178 | msgstr "Parola per separare chiamata e parametro" 179 | 180 | #: librairy/ArgsWindow.py:53 librairy/ArgsWindow.py:54 181 | msgid "Replace space by plus" 182 | msgstr "Sostituisci spazio con un +" 183 | 184 | #: librairy/ArgsWindow.py:57 librairy/ArgsWindow.py:58 185 | msgid "Go" 186 | msgstr "Vai" 187 | 188 | #: librairy/basicCommands.py:28 librairy/internalWindow.py:80 189 | #: librairy/internalWindow.py:81 190 | msgid "time" 191 | msgstr "orario" 192 | 193 | #: librairy/basicCommands.py:30 librairy/internalWindow.py:82 194 | #: librairy/internalWindow.py:83 195 | msgid "power" 196 | msgstr "batteria" 197 | 198 | #: librairy/basicCommands.py:32 librairy/internalWindow.py:84 199 | #: librairy/internalWindow.py:85 200 | msgid "clipboard" 201 | msgstr "appunti" 202 | 203 | #: librairy/basicCommands.py:34 librairy/internalWindow.py:86 204 | #: librairy/internalWindow.py:87 205 | msgid "dictation mode" 206 | msgstr "modalità dettatura" 207 | 208 | #: librairy/basicCommands.py:37 librairy/internalWindow.py:88 209 | #: librairy/internalWindow.py:89 librairy/stringParser.py:28 210 | msgid "exit dictation mode" 211 | msgstr "esci dalla modalità dettatura" 212 | 213 | #: librairy/basicCommands.py:55 214 | msgid "Nothing in the clipboard" 215 | msgstr "Appunti vuoto" 216 | 217 | #: librairy/basicCommands.py:66 218 | msgid "it is" 219 | msgstr "sono le" 220 | 221 | #: librairy/basicCommands.py:66 222 | msgid "hour" 223 | msgstr "e" 224 | 225 | #: librairy/basicCommands.py:66 226 | msgid "minute" 227 | msgstr " " 228 | 229 | #: librairy/basicCommands.py:85 230 | msgid "Charging" 231 | msgstr "Caricamento" 232 | 233 | #: librairy/basicCommands.py:85 234 | msgid "before charging" 235 | msgstr "prima del caricamento" 236 | 237 | #: librairy/basicCommands.py:87 238 | msgid "Discharging" 239 | msgstr "Caricamento annullato" 240 | 241 | #: librairy/basicCommands.py:87 242 | msgid "remaining" 243 | msgstr "rimasto" 244 | 245 | #: librairy/basicCommands.py:89 246 | msgid "battery is not plugged" 247 | msgstr "batteria non inserita" 248 | 249 | #: librairy/externalWindow.py:24 librairy/internalWindow.py:26 250 | msgid "your command" 251 | msgstr "comando" 252 | 253 | #: librairy/HelpWindow.py:28 254 | msgid "Help Google2Ubuntu" 255 | msgstr "Aiuta Google2Ubuntu" 256 | 257 | #: librairy/interface.py:95 258 | msgid "unable to translate" 259 | msgstr "rilevazione non possibile" 260 | 261 | #: librairy/internalWindow.py:99 262 | msgid "Which internal command to choose" 263 | msgstr "Comando interno da scegliere" 264 | 265 | #: librairy/MainWindow.py:33 266 | msgid "Setup" 267 | msgstr "Impostazioni" 268 | 269 | #: librairy/MainWindow.py:35 270 | msgid "Open setup window" 271 | msgstr "Apri le impostazioni" 272 | 273 | #: librairy/moduleSelection.py:18 274 | msgid "Choose a file" 275 | msgstr "Scegli un file" 276 | 277 | #: librairy/osd.py:49 278 | msgid "Error" 279 | msgstr "Errore" 280 | 281 | #: librairy/osd.py:61 282 | msgid "Recognition result" 283 | msgstr "Risultato riconoscimento" 284 | 285 | #: librairy/osd.py:71 286 | msgid "Calling command" 287 | msgstr "Esecuzione del comando" 288 | 289 | #: librairy/osd.py:78 290 | msgid "Information" 291 | msgstr "Informazioni" 292 | 293 | #: librairy/osd.py:84 294 | msgid "Performing recording" 295 | msgstr "Avvio della registrazione " 296 | 297 | #: librairy/osd.py:85 298 | msgid "Please speak" 299 | msgstr "Parla" 300 | 301 | #: librairy/osd.py:95 302 | msgid "Done" 303 | msgstr "Effettuato" 304 | 305 | #: librairy/SetupWindow.py:27 306 | msgid "Select your language" 307 | msgstr "Seleziona la lingua" 308 | 309 | #: librairy/SetupWindow.py:31 310 | msgid "Set the recording time (seconds)" 311 | msgstr "Imposta il tempo per la registrazione (in secondi)" 312 | 313 | #: librairy/SetupWindow.py:34 314 | msgid "Set the music player's play command" 315 | msgstr "Imposta il comando per avviare la musica del tuo player" 316 | 317 | #: librairy/SetupWindow.py:37 318 | msgid "Set the music player's pause command" 319 | msgstr "Imposta il comando per mettere in pausa il tuo player" 320 | 321 | #: librairy/SetupWindow.py:40 322 | msgid "Hotword mode" 323 | msgstr "Modalità Parola Chiave" 324 | 325 | #: librairy/SetupWindow.py:43 326 | msgid "Set the noise threshold" 327 | msgstr "Imposta il livello di rumore" 328 | 329 | #: librairy/SetupWindow.py:46 330 | msgid "Set the hotword" 331 | msgstr "Imposta la parola chiave" 332 | 333 | #: librairy/SetupWindow.py:55 334 | msgid "Change the recording time" 335 | msgstr "Cambia il tempo per la registrazione" 336 | 337 | #: librairy/SetupWindow.py:59 338 | msgid "Set the play command" 339 | msgstr "Imposta il comando play" 340 | 341 | #: librairy/SetupWindow.py:64 342 | msgid "Set the pause command" 343 | msgstr "Imposta il comando pausa" 344 | 345 | #: librairy/SetupWindow.py:72 346 | msgid "Put the hotword mode ON or OFF" 347 | msgstr "Imposta la parola chiave On o OFF" 348 | 349 | #: librairy/SetupWindow.py:78 350 | #, python-format 351 | msgid "Set the sound level in % under which sound is considerated as noise" 352 | msgstr "Imposta il volume in percentuale quel livello sarà considerato rumore" 353 | 354 | #: librairy/SetupWindow.py:82 355 | msgid "Set the hotword to start effective recording" 356 | msgstr "Imposta la parola chiave per avviare la registrazione" 357 | 358 | #: librairy/SetupWindow.py:216 359 | msgid "What language to choose" 360 | msgstr "Scegli la lingua" 361 | 362 | #: librairy/stringParser.py:84 363 | msgid "Setup file missing" 364 | msgstr "File di configurazione mancante" 365 | 366 | #: librairy/workWithModule.py:55 367 | msgid "you didn't say the linking word" 368 | msgstr "non hai detto la parola collegata" 369 | 370 | #: librairy/workWithModule.py:59 371 | msgid "args file missing" 372 | msgstr "file mancante" 373 | 374 | #~ msgid "Module setup" 375 | #~ msgstr "Configurazione modulo" 376 | 377 | #~ msgid "word" 378 | #~ msgstr "parola" 379 | 380 | #~ msgid "Setup window" 381 | #~ msgstr "Finestra delle impostazioni" 382 | -------------------------------------------------------------------------------- /i18n/nl_NL/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/nl_NL/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/nl_NL/LC_MESSAGES/google2ubuntu.po: -------------------------------------------------------------------------------- 1 | # English translations for google package. 2 | # Copyright (C) 2014 THE google'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the google package. 4 | # Frank Claessen , 2014. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: google 2ubuntu-master\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2014-02-15 14:54+0100\n" 11 | "PO-Revision-Date: 2014-02-20 11:05+0100\n" 12 | "Last-Translator: Frank Claessen \n" 13 | "Language-Team: English\n" 14 | "Language: en_US\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 19 | 20 | #: listener.py:22 21 | msgid "ok start" 22 | msgstr "ok start" 23 | 24 | #: listener.py:76 25 | msgid "Cannot connect to Google Translate" 26 | msgstr "Geen connectie met Google Translate" 27 | 28 | #: listener.py:78 29 | msgid "Phrase parsing failed" 30 | msgstr "Ontleden van de zin mislukt" 31 | 32 | #: listener.py:80 33 | msgid "Error processing value returned by Google Translate" 34 | msgstr "Fout verwerking van de waarde door Google Translate teruggegeven" 35 | 36 | #: librairy/add_window.py:44 37 | msgid "list of commands" 38 | msgstr "lijst met commando's" 39 | 40 | #: librairy/add_window.py:57 41 | msgid "Keys" 42 | msgstr "Sleutels" 43 | 44 | #: librairy/add_window.py:73 45 | msgid "Commands" 46 | msgstr "Commando's" 47 | 48 | #: librairy/add_window.py:81 librairy/osd.py:35 librairy/osd.py:40 49 | msgid "Ready" 50 | msgstr "Klaar" 51 | 52 | #: librairy/add_window.py:153 librairy/add_window.py:504 53 | #: librairy/ArgsWindow.py:35 librairy/ArgsWindow.py:48 54 | #: librairy/externalWindow.py:20 librairy/internalWindow.py:22 55 | msgid "key sentence" 56 | msgstr "sleutel zin" 57 | 58 | #: librairy/add_window.py:153 librairy/add_window.py:217 59 | #: librairy/add_window.py:429 librairy/externalWindow.py:59 60 | #: librairy/stringParser.py:75 61 | msgid "external" 62 | msgstr "extern" 63 | 64 | #: librairy/add_window.py:245 65 | msgid "External commands" 66 | msgstr "Externe commando's" 67 | 68 | #: librairy/add_window.py:249 69 | msgid "Internal commands" 70 | msgstr "Interne commando's" 71 | 72 | #: librairy/add_window.py:253 73 | msgid "Module" 74 | msgstr "Module" 75 | 76 | #: librairy/add_window.py:260 77 | msgid "Add" 78 | msgstr "Toevoegen" 79 | 80 | #: librairy/add_window.py:270 81 | msgid "Add a new command" 82 | msgstr "Voeg nieuw commando toe" 83 | 84 | #: librairy/add_window.py:275 librairy/add_window.py:287 85 | #: librairy/add_window.py:540 86 | msgid "Remove" 87 | msgstr "Verwijderen" 88 | 89 | #: librairy/add_window.py:277 librairy/add_window.py:297 90 | msgid "Remove this command" 91 | msgstr "Verwijder dit commando" 92 | 93 | #: librairy/add_window.py:280 94 | msgid "Clean up" 95 | msgstr "Ruim op" 96 | 97 | #: librairy/add_window.py:282 librairy/add_window.py:561 98 | msgid "Remove all commands" 99 | msgstr "Verwijder alle commando's" 100 | 101 | #: librairy/add_window.py:302 102 | msgid "Try" 103 | msgstr "Probeer" 104 | 105 | #: librairy/add_window.py:305 106 | msgid "Try this command" 107 | msgstr "Probeer dit commando" 108 | 109 | #: librairy/add_window.py:312 110 | msgid "Edit" 111 | msgstr "Wijzigen" 112 | 113 | #: librairy/add_window.py:315 114 | msgid "Edit this command" 115 | msgstr "Wijzig dit commando" 116 | 117 | #: librairy/add_window.py:337 118 | msgid "Help" 119 | msgstr "Help" 120 | 121 | #: librairy/add_window.py:341 122 | msgid "Display help message" 123 | msgstr "Toon help boodschap" 124 | 125 | #: librairy/add_window.py:361 126 | msgid "All" 127 | msgstr "Alles" 128 | 129 | #: librairy/add_window.py:362 130 | msgid "External" 131 | msgstr "Extern" 132 | 133 | #: librairy/add_window.py:363 134 | msgid "Internal" 135 | msgstr "Intern" 136 | 137 | #: librairy/add_window.py:364 138 | msgid "Modules" 139 | msgstr "Modules" 140 | 141 | #: librairy/add_window.py:368 142 | msgid "What type of command to add" 143 | msgstr "Welk type commando toe te voegen" 144 | 145 | #: librairy/add_window.py:409 librairy/add_window.py:413 146 | #: librairy/add_window.py:425 librairy/add_window.py:583 147 | #: librairy/stringParser.py:66 148 | msgid "modules" 149 | msgstr "modules" 150 | 151 | #: librairy/add_window.py:409 librairy/add_window.py:411 152 | #: librairy/add_window.py:433 librairy/add_window.py:583 153 | #: librairy/internalWindow.py:60 librairy/stringParser.py:28 154 | #: librairy/stringParser.py:71 155 | msgid "internal" 156 | msgstr "intern" 157 | 158 | #: librairy/add_window.py:471 159 | msgid "Error, you must choose a file" 160 | msgstr "Fout, u moet een bestand kiezen" 161 | 162 | #: librairy/add_window.py:518 163 | msgid "Error, args file missing" 164 | msgstr "" 165 | 166 | #: librairy/add_window.py:670 167 | msgid "Save commands" 168 | msgstr "Save commando's" 169 | 170 | #: librairy/ArgsWindow.py:40 171 | msgid "Linking word" 172 | msgstr "Verbindingswoord" 173 | 174 | #: librairy/ArgsWindow.py:51 175 | msgid "Word to separate call and parameter" 176 | msgstr "Woord tussen aanroep en parameter" 177 | 178 | #: librairy/ArgsWindow.py:53 librairy/ArgsWindow.py:54 179 | msgid "Replace space by plus" 180 | msgstr "Vervang spatie door plusteken" 181 | 182 | #: librairy/ArgsWindow.py:57 librairy/ArgsWindow.py:58 183 | msgid "Go" 184 | msgstr "Ga" 185 | 186 | #: librairy/basicCommands.py:28 librairy/internalWindow.py:80 187 | #: librairy/internalWindow.py:81 188 | msgid "time" 189 | msgstr "tijd" 190 | 191 | #: librairy/basicCommands.py:30 librairy/internalWindow.py:82 192 | #: librairy/internalWindow.py:83 193 | msgid "power" 194 | msgstr "batterij" 195 | 196 | #: librairy/basicCommands.py:32 librairy/internalWindow.py:84 197 | #: librairy/internalWindow.py:85 198 | msgid "clipboard" 199 | msgstr "klembord" 200 | 201 | #: librairy/basicCommands.py:34 librairy/internalWindow.py:86 202 | #: librairy/internalWindow.py:87 203 | msgid "dictation mode" 204 | msgstr "dictee modus" 205 | 206 | #: librairy/basicCommands.py:37 librairy/internalWindow.py:88 207 | #: librairy/internalWindow.py:89 librairy/stringParser.py:28 208 | msgid "exit dictation mode" 209 | msgstr "einde dictee modus" 210 | 211 | #: librairy/basicCommands.py:55 212 | msgid "Nothing in the clipboard" 213 | msgstr "Niets op het klembord" 214 | 215 | #: librairy/basicCommands.py:66 216 | msgid "it is" 217 | msgstr "het is" 218 | 219 | #: librairy/basicCommands.py:66 220 | msgid "hour" 221 | msgstr "uur" 222 | 223 | #: librairy/basicCommands.py:66 224 | msgid "minute" 225 | msgstr "minuut" 226 | 227 | #: librairy/basicCommands.py:85 228 | msgid "Charging" 229 | msgstr "Aan het opladen" 230 | 231 | #: librairy/basicCommands.py:85 232 | msgid "before charging" 233 | msgstr "voor het opladen" 234 | 235 | #: librairy/basicCommands.py:87 236 | msgid "Discharging" 237 | msgstr "Aan het ontladen" 238 | 239 | #: librairy/basicCommands.py:87 240 | msgid "remaining" 241 | msgstr "resterend" 242 | 243 | #: librairy/basicCommands.py:89 244 | msgid "battery is not plugged" 245 | msgstr "Stroom is niet aangesloten" 246 | 247 | #: librairy/externalWindow.py:24 librairy/internalWindow.py:26 248 | msgid "your command" 249 | msgstr "uw commando" 250 | 251 | #: librairy/HelpWindow.py:28 252 | msgid "Help Google2Ubuntu" 253 | msgstr "Help Google2Ubuntu" 254 | 255 | #: librairy/interface.py:95 256 | msgid "unable to translate" 257 | msgstr "kan niet worden vertaald" 258 | 259 | #: librairy/internalWindow.py:99 260 | msgid "Which internal command to choose" 261 | msgstr "Te kiezen intern commando" 262 | 263 | #: librairy/MainWindow.py:33 264 | msgid "Setup" 265 | msgstr "Setup" 266 | 267 | #: librairy/MainWindow.py:35 268 | msgid "Open setup window" 269 | msgstr "geopend installatievenster" 270 | 271 | #: librairy/moduleSelection.py:18 272 | msgid "Choose a file" 273 | msgstr "Kies een bestand" 274 | 275 | #: librairy/osd.py:49 276 | msgid "Error" 277 | msgstr "Fout" 278 | 279 | #: librairy/osd.py:61 280 | msgid "Recognition result" 281 | msgstr "Resultaat herkenning" 282 | 283 | #: librairy/osd.py:71 284 | msgid "Calling command" 285 | msgstr "Aanroepend commando" 286 | 287 | #: librairy/osd.py:78 288 | msgid "Information" 289 | msgstr "Informatie" 290 | 291 | #: librairy/osd.py:84 292 | msgid "Performing recording" 293 | msgstr "Opname wordt uitgevoerd" 294 | 295 | #: librairy/osd.py:85 296 | msgid "Please speak" 297 | msgstr "Spreek aub in" 298 | 299 | #: librairy/osd.py:95 300 | msgid "Done" 301 | msgstr "Klaar" 302 | 303 | #: librairy/SetupWindow.py:27 304 | msgid "Select your language" 305 | msgstr "Selecteer uw taal" 306 | 307 | #: librairy/SetupWindow.py:31 308 | msgid "Set the recording time (seconds)" 309 | msgstr "Stel de opnametijd in (seconden)" 310 | 311 | #: librairy/SetupWindow.py:34 312 | msgid "Set the music player's play command" 313 | msgstr "Vul het play-commando van de muziekspeler in" 314 | 315 | #: librairy/SetupWindow.py:37 316 | msgid "Set the music player's pause command" 317 | msgstr "Vul het pauze-commando van de muziekspeler in" 318 | 319 | #: librairy/SetupWindow.py:40 320 | msgid "Hotword mode" 321 | msgstr "Hotword modus" 322 | 323 | #: librairy/SetupWindow.py:43 324 | msgid "Set the noise threshold" 325 | msgstr "Stel de geluidsdrempel in" 326 | 327 | #: librairy/SetupWindow.py:46 328 | msgid "Set the hotword" 329 | msgstr "Stel het hotword in" 330 | 331 | #: librairy/SetupWindow.py:55 332 | msgid "Change the recording time" 333 | msgstr "Verander de opname tijd" 334 | 335 | #: librairy/SetupWindow.py:59 336 | msgid "Set the play command" 337 | msgstr "Stel het play-commando in" 338 | 339 | #: librairy/SetupWindow.py:64 340 | msgid "Set the pause command" 341 | msgstr "Stel het pauze-commando in" 342 | 343 | #: librairy/SetupWindow.py:72 344 | msgid "Put the hotword mode ON or OFF" 345 | msgstr "Zet de hotword-modus AAN of UIT" 346 | 347 | #: librairy/SetupWindow.py:78 348 | #, python-format 349 | msgid "Set the sound level in % under which sound is considerated as noise" 350 | msgstr "Stel het geluidsniveau in % waaronder geluid als ruis wordt gezien" 351 | 352 | #: librairy/SetupWindow.py:82 353 | msgid "Set the hotword to start effective recording" 354 | msgstr "Stel het hotword in om het opnemen te starten" 355 | 356 | #: librairy/SetupWindow.py:216 357 | msgid "What language to choose" 358 | msgstr "Welke taal te kiezen" 359 | 360 | #: librairy/stringParser.py:84 361 | msgid "Setup file missing" 362 | msgstr "Setup-bestand ontbreekt" 363 | 364 | #: librairy/workWithModule.py:55 365 | msgid "you didn't say the linking word" 366 | msgstr "U hebt het verbindingswoord niet uitgesproken" 367 | 368 | #: librairy/workWithModule.py:59 369 | msgid "args file missing" 370 | msgstr "args-bestand ontbreekt" 371 | -------------------------------------------------------------------------------- /i18n/pt_BR/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/pt_BR/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/pt_BR/LC_MESSAGES/google2ubuntu.po: -------------------------------------------------------------------------------- 1 | # Portuguese translations for PACKAGE package 2 | # Traduções portuguesas para o pacote PACKAGE. 3 | # Copyright (C) 2014 THE PACKAGE'S COPYRIGHT HOLDER 4 | # This file is distributed under the same license as the PACKAGE package. 5 | # leor , 2014. 6 | # 7 | msgid "" 8 | msgstr "" 9 | "Project-Id-Version: google 2ubuntu\n" 10 | "Report-Msgid-Bugs-To: \n" 11 | "POT-Creation-Date: 2014-02-15 14:54+0100\n" 12 | "PO-Revision-Date: 2014-02-16 04:43+0100\n" 13 | "Last-Translator: leor \n" 14 | "Language-Team: Brazilian\n" 15 | "Language: br\n" 16 | "MIME-Version: 1.0\n" 17 | "Content-Type: text/plain; charset=UTF-8\n" 18 | "Content-Transfer-Encoding: 8bit\n" 19 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 20 | 21 | #: listener.py:22 22 | msgid "ok start" 23 | msgstr "ok começar" 24 | 25 | #: listener.py:76 26 | msgid "Cannot connect to Google Translate" 27 | msgstr "Incapaz de ligar ao Google Tradutor" 28 | 29 | #: listener.py:78 30 | msgid "Phrase parsing failed" 31 | msgstr "Análise da frase falhou" 32 | 33 | #: listener.py:80 34 | msgid "Error processing value returned by Google Translate" 35 | msgstr "Erro a processar valor retornado pelo Google Tradutor" 36 | 37 | #: librairy/add_window.py:44 38 | msgid "list of commands" 39 | msgstr "lista de comandos" 40 | 41 | #: librairy/add_window.py:57 42 | msgid "Keys" 43 | msgstr "Chave" 44 | 45 | #: librairy/add_window.py:73 46 | msgid "Commands" 47 | msgstr "Comandos" 48 | 49 | #: librairy/add_window.py:81 50 | #: librairy/osd.py:35 51 | #: librairy/osd.py:40 52 | msgid "Ready" 53 | msgstr "Pronto" 54 | 55 | #: librairy/add_window.py:153 56 | #: librairy/add_window.py:504 57 | #: librairy/ArgsWindow.py:35 58 | #: librairy/ArgsWindow.py:48 59 | #: librairy/externalWindow.py:20 60 | #: librairy/internalWindow.py:22 61 | msgid "key sentence" 62 | msgstr "frase-chave" 63 | 64 | #: librairy/add_window.py:153 65 | #: librairy/add_window.py:217 66 | #: librairy/add_window.py:429 67 | #: librairy/externalWindow.py:59 68 | #: librairy/stringParser.py:75 69 | msgid "external" 70 | msgstr "externo" 71 | 72 | #: librairy/add_window.py:245 73 | msgid "External commands" 74 | msgstr "Comandos externos" 75 | 76 | #: librairy/add_window.py:249 77 | msgid "Internal commands" 78 | msgstr "Comandos internos" 79 | 80 | #: librairy/add_window.py:253 81 | msgid "Module" 82 | msgstr "Módulo" 83 | 84 | #: librairy/add_window.py:260 85 | msgid "Add" 86 | msgstr "Adicionar" 87 | 88 | #: librairy/add_window.py:270 89 | msgid "Add a new command" 90 | msgstr "Adicionar novo comando" 91 | 92 | #: librairy/add_window.py:275 93 | #: librairy/add_window.py:287 94 | #: librairy/add_window.py:540 95 | msgid "Remove" 96 | msgstr "Remover" 97 | 98 | #: librairy/add_window.py:277 99 | #: librairy/add_window.py:297 100 | msgid "Remove this command" 101 | msgstr "Remover este comando" 102 | 103 | #: librairy/add_window.py:280 104 | msgid "Clean up" 105 | msgstr "Limpar" 106 | 107 | #: librairy/add_window.py:282 108 | #: librairy/add_window.py:561 109 | msgid "Remove all commands" 110 | msgstr "Remover todos os comandos" 111 | 112 | #: librairy/add_window.py:302 113 | msgid "Try" 114 | msgstr "Tentar" 115 | 116 | #: librairy/add_window.py:305 117 | msgid "Try this command" 118 | msgstr "Tentar este comando" 119 | 120 | #: librairy/add_window.py:312 121 | msgid "Edit" 122 | msgstr "Editar" 123 | 124 | #: librairy/add_window.py:315 125 | msgid "Edit this command" 126 | msgstr "Editar este comando" 127 | 128 | #: librairy/add_window.py:337 129 | msgid "Help" 130 | msgstr "Ajuda" 131 | 132 | #: librairy/add_window.py:341 133 | msgid "Display help message" 134 | msgstr "Mostrar mensagem de ajuda" 135 | 136 | #: librairy/add_window.py:361 137 | msgid "All" 138 | msgstr "Todos" 139 | 140 | #: librairy/add_window.py:362 141 | msgid "External" 142 | msgstr "Externo" 143 | 144 | #: librairy/add_window.py:363 145 | msgid "Internal" 146 | msgstr "Interno" 147 | 148 | #: librairy/add_window.py:364 149 | msgid "Modules" 150 | msgstr "Módulos" 151 | 152 | #: librairy/add_window.py:368 153 | msgid "What type of command to add" 154 | msgstr "Tipo de comando a adicionar" 155 | 156 | #: librairy/add_window.py:409 157 | #: librairy/add_window.py:413 158 | #: librairy/add_window.py:425 159 | #: librairy/add_window.py:583 160 | #: librairy/stringParser.py:66 161 | msgid "modules" 162 | msgstr "módulos" 163 | 164 | #: librairy/add_window.py:409 165 | #: librairy/add_window.py:411 166 | #: librairy/add_window.py:433 167 | #: librairy/add_window.py:583 168 | #: librairy/internalWindow.py:60 169 | #: librairy/stringParser.py:28 170 | #: librairy/stringParser.py:71 171 | msgid "internal" 172 | msgstr "Interno" 173 | 174 | #: librairy/add_window.py:471 175 | msgid "Error, you must choose a file" 176 | msgstr "Erro, deve escolher um ficheiro" 177 | 178 | #: librairy/add_window.py:518 179 | msgid "Error, args file missing" 180 | msgstr "Erro, ficheiro de argumento em falta" 181 | 182 | #: librairy/add_window.py:670 183 | msgid "Save commands" 184 | msgstr "Guardar comandos" 185 | 186 | #: librairy/ArgsWindow.py:40 187 | msgid "Linking word" 188 | msgstr "lingando palavras" 189 | 190 | #: librairy/ArgsWindow.py:51 191 | msgid "Word to separate call and parameter" 192 | msgstr "Palavra para separar chamada e parâmetro" 193 | 194 | #: librairy/ArgsWindow.py:53 195 | #: librairy/ArgsWindow.py:54 196 | msgid "Replace space by plus" 197 | msgstr "Substituir espaço por mais" 198 | 199 | #: librairy/ArgsWindow.py:57 200 | #: librairy/ArgsWindow.py:58 201 | msgid "Go" 202 | msgstr "Ir" 203 | 204 | #: librairy/basicCommands.py:28 205 | #: librairy/internalWindow.py:80 206 | #: librairy/internalWindow.py:81 207 | msgid "time" 208 | msgstr "tempo" 209 | 210 | #: librairy/basicCommands.py:30 211 | #: librairy/internalWindow.py:82 212 | #: librairy/internalWindow.py:83 213 | msgid "power" 214 | msgstr "bateria" 215 | 216 | #: librairy/basicCommands.py:32 217 | #: librairy/internalWindow.py:84 218 | #: librairy/internalWindow.py:85 219 | msgid "clipboard" 220 | msgstr "Área de transferência" 221 | 222 | #: librairy/basicCommands.py:34 223 | #: librairy/internalWindow.py:86 224 | #: librairy/internalWindow.py:87 225 | msgid "dictation mode" 226 | msgstr "modo de ditar" 227 | 228 | #: librairy/basicCommands.py:37 229 | #: librairy/internalWindow.py:88 230 | #: librairy/internalWindow.py:89 231 | #: librairy/stringParser.py:28 232 | msgid "exit dictation mode" 233 | msgstr "sair do modo de ditar" 234 | 235 | #: librairy/basicCommands.py:55 236 | msgid "Nothing in the clipboard" 237 | msgstr "Nada na área de transferência" 238 | 239 | #: librairy/basicCommands.py:66 240 | msgid "it is" 241 | msgstr "é" 242 | 243 | #: librairy/basicCommands.py:66 244 | msgid "hour" 245 | msgstr "hora" 246 | 247 | #: librairy/basicCommands.py:66 248 | msgid "minute" 249 | msgstr "minuto" 250 | 251 | #: librairy/basicCommands.py:85 252 | msgid "Charging" 253 | msgstr "Em carga" 254 | 255 | #: librairy/basicCommands.py:85 256 | msgid "before charging" 257 | msgstr "antes de carregar" 258 | 259 | #: librairy/basicCommands.py:87 260 | msgid "Discharging" 261 | msgstr "m descarga" 262 | 263 | #: librairy/basicCommands.py:87 264 | msgid "remaining" 265 | msgstr "restante" 266 | 267 | #: librairy/basicCommands.py:89 268 | msgid "battery is not plugged" 269 | msgstr "a bateria não está ligada" 270 | 271 | #: librairy/externalWindow.py:24 272 | #: librairy/internalWindow.py:26 273 | msgid "your command" 274 | msgstr "O seu comando" 275 | 276 | #: librairy/HelpWindow.py:28 277 | msgid "Help Google2Ubuntu" 278 | msgstr "Ajuda Google2Ubuntu" 279 | 280 | #: librairy/interface.py:95 281 | msgid "unable to translate" 282 | msgstr "incapaz de traduzir" 283 | 284 | #: librairy/internalWindow.py:99 285 | msgid "Which internal command to choose" 286 | msgstr "Qual o comando interno a escolher" 287 | 288 | #: librairy/MainWindow.py:33 289 | msgid "Setup" 290 | msgstr "Configurações" 291 | 292 | #: librairy/MainWindow.py:35 293 | msgid "Open setup window" 294 | msgstr "Abrir janela de configurações" 295 | 296 | #: librairy/moduleSelection.py:18 297 | msgid "Choose a file" 298 | msgstr "Escolha um ficheiro" 299 | 300 | #: librairy/osd.py:49 301 | msgid "Error" 302 | msgstr "Erro" 303 | 304 | #: librairy/osd.py:61 305 | msgid "Recognition result" 306 | msgstr "Resultado do reconhecimento" 307 | 308 | #: librairy/osd.py:71 309 | msgid "Calling command" 310 | msgstr "Commando de chamada" 311 | 312 | #: librairy/osd.py:78 313 | msgid "Information" 314 | msgstr "Informação" 315 | 316 | #: librairy/osd.py:84 317 | msgid "Performing recording" 318 | msgstr "Gravação em curso" 319 | 320 | #: librairy/osd.py:85 321 | msgid "Please speak" 322 | msgstr "Por favor fale" 323 | 324 | #: librairy/osd.py:95 325 | msgid "Done" 326 | msgstr "Pronto" 327 | 328 | #: librairy/SetupWindow.py:27 329 | msgid "Select your language" 330 | msgstr "Selecione o seu idioma" 331 | 332 | #: librairy/SetupWindow.py:31 333 | msgid "Set the recording time (seconds)" 334 | msgstr "Difinir o tempo de gravação (segundos)" 335 | 336 | #: librairy/SetupWindow.py:34 337 | msgid "Set the music player's play command" 338 | msgstr "Definir o comando do player de audio para reproduzir" 339 | 340 | #: librairy/SetupWindow.py:37 341 | msgid "Set the music player's pause command" 342 | msgstr "Definir o comando do player de audio para pausa" 343 | 344 | #: librairy/SetupWindow.py:40 345 | msgid "Hotword mode" 346 | msgstr "Modo de palavra-chave" 347 | 348 | #: librairy/SetupWindow.py:43 349 | msgid "Set the noise threshold" 350 | msgstr "Definir o limite de ruido" 351 | 352 | #: librairy/SetupWindow.py:46 353 | msgid "Set the hotword" 354 | msgstr "Definir a palavra-chave" 355 | 356 | #: librairy/SetupWindow.py:55 357 | msgid "Change the recording time" 358 | msgstr "Mudar o tempo de gravação" 359 | 360 | #: librairy/SetupWindow.py:59 361 | msgid "Set the play command" 362 | msgstr "Mudar o comando para reproduzir" 363 | 364 | #: librairy/SetupWindow.py:64 365 | msgid "Set the pause command" 366 | msgstr "Mudar o comando para pausa" 367 | 368 | #: librairy/SetupWindow.py:72 369 | msgid "Put the hotword mode ON or OFF" 370 | msgstr "Definir o modo de palavra-chave como ON ou OFF" 371 | 372 | #: librairy/SetupWindow.py:78 373 | #, python-format 374 | msgid "Set the sound level in % under which sound is considerated as noise" 375 | msgstr "Definir o lnível do som em % que será considerado como ruido" 376 | 377 | #: librairy/SetupWindow.py:82 378 | msgid "Set the hotword to start effective recording" 379 | msgstr "Definir a palavra-chave para começar uma gravação efectiva" 380 | 381 | #: librairy/SetupWindow.py:216 382 | msgid "What language to choose" 383 | msgstr "Qual idioma a escolher" 384 | 385 | #: librairy/stringParser.py:84 386 | msgid "Setup file missing" 387 | msgstr "Ficheiro de configuração em falta" 388 | 389 | #: librairy/workWithModule.py:55 390 | msgid "you didn't say the linking word" 391 | msgstr "Não disse a palavra de ligação" 392 | 393 | #: librairy/workWithModule.py:59 394 | msgid "args file missing" 395 | msgstr "Ficheiro de argumento em falta" 396 | 397 | #~ msgid "Module setup" 398 | #~ msgstr "Módulo de cofigurações" 399 | 400 | #~ msgid "word" 401 | #~ msgstr "palavra" 402 | 403 | #~ msgid "Setup window" 404 | #~ msgstr "Janela de configurações" 405 | -------------------------------------------------------------------------------- /i18n/pt_PT/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/pt_PT/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/yue_Hant/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/yue_Hant/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/yue_Hant/LC_MESSAGES/google2ubuntu.po: -------------------------------------------------------------------------------- 1 | # Chinese translations for google package. 2 | # Copyright (C) 2014 THE google'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the google package. 4 | # Ladios Jonquil , 2014. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: google 2ubuntu\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2014-02-15 14:54+0100\n" 11 | "PO-Revision-Date: 2014-02-12 04:52+0800\n" 12 | "Last-Translator: Ladios Jonquil \n" 13 | "Language-Team: Chinese (Hong Kong)\n" 14 | "Language: yue_Hant\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: listener.py:22 20 | msgid "ok start" 21 | msgstr "ok 開始" 22 | 23 | #: listener.py:76 24 | msgid "Cannot connect to Google Translate" 25 | msgstr "無法連線至 Google 翻譯" 26 | 27 | #: listener.py:78 28 | msgid "Phrase parsing failed" 29 | msgstr "片語剖析失則" 30 | 31 | #: listener.py:80 32 | msgid "Error processing value returned by Google Translate" 33 | msgstr "處理 Google 翻譯結果時發生錯誤" 34 | 35 | #: librairy/add_window.py:44 36 | msgid "list of commands" 37 | msgstr "命令列表" 38 | 39 | #: librairy/add_window.py:57 40 | msgid "Keys" 41 | msgstr "語音鍵" 42 | 43 | #: librairy/add_window.py:73 44 | msgid "Commands" 45 | msgstr "系統指令" 46 | 47 | #: librairy/add_window.py:81 librairy/osd.py:35 librairy/osd.py:40 48 | msgid "Ready" 49 | msgstr "就緒" 50 | 51 | #: librairy/add_window.py:153 librairy/add_window.py:504 52 | #: librairy/ArgsWindow.py:35 librairy/ArgsWindow.py:48 53 | #: librairy/externalWindow.py:20 librairy/internalWindow.py:22 54 | msgid "key sentence" 55 | msgstr "指令語句" 56 | 57 | #: librairy/add_window.py:153 librairy/add_window.py:217 58 | #: librairy/add_window.py:429 librairy/externalWindow.py:59 59 | #: librairy/stringParser.py:75 60 | msgid "external" 61 | msgstr "外部" 62 | 63 | #: librairy/add_window.py:245 64 | msgid "External commands" 65 | msgstr "外部指令" 66 | 67 | #: librairy/add_window.py:249 68 | msgid "Internal commands" 69 | msgstr "內部指令" 70 | 71 | #: librairy/add_window.py:253 72 | msgid "Module" 73 | msgstr "模組" 74 | 75 | #: librairy/add_window.py:260 76 | msgid "Add" 77 | msgstr "新增" 78 | 79 | #: librairy/add_window.py:270 80 | msgid "Add a new command" 81 | msgstr "新增指令" 82 | 83 | #: librairy/add_window.py:275 librairy/add_window.py:287 84 | #: librairy/add_window.py:540 85 | msgid "Remove" 86 | msgstr "移除" 87 | 88 | #: librairy/add_window.py:277 librairy/add_window.py:297 89 | msgid "Remove this command" 90 | msgstr "移除這指令" 91 | 92 | #: librairy/add_window.py:280 93 | msgid "Clean up" 94 | msgstr "清理" 95 | 96 | #: librairy/add_window.py:282 librairy/add_window.py:561 97 | msgid "Remove all commands" 98 | msgstr "移除所有指令" 99 | 100 | #: librairy/add_window.py:302 101 | msgid "Try" 102 | msgstr "試試看" 103 | 104 | #: librairy/add_window.py:305 105 | msgid "Try this command" 106 | msgstr "試一下這指令" 107 | 108 | #: librairy/add_window.py:312 109 | msgid "Edit" 110 | msgstr "編輯" 111 | 112 | #: librairy/add_window.py:315 113 | msgid "Edit this command" 114 | msgstr "編輯這指令" 115 | 116 | #: librairy/add_window.py:337 117 | msgid "Help" 118 | msgstr "幫助" 119 | 120 | #: librairy/add_window.py:341 121 | msgid "Display help message" 122 | msgstr "顯示幫助信息" 123 | 124 | #: librairy/add_window.py:361 125 | msgid "All" 126 | msgstr "全部" 127 | 128 | #: librairy/add_window.py:362 129 | msgid "External" 130 | msgstr "外部" 131 | 132 | #: librairy/add_window.py:363 133 | msgid "Internal" 134 | msgstr "內部" 135 | 136 | #: librairy/add_window.py:364 137 | msgid "Modules" 138 | msgstr "模組" 139 | 140 | #: librairy/add_window.py:368 141 | msgid "What type of command to add" 142 | msgstr "要新增的指令" 143 | 144 | #: librairy/add_window.py:409 librairy/add_window.py:413 145 | #: librairy/add_window.py:425 librairy/add_window.py:583 146 | #: librairy/stringParser.py:66 147 | msgid "modules" 148 | msgstr "模組" 149 | 150 | #: librairy/add_window.py:409 librairy/add_window.py:411 151 | #: librairy/add_window.py:433 librairy/add_window.py:583 152 | #: librairy/internalWindow.py:60 librairy/stringParser.py:28 153 | #: librairy/stringParser.py:71 154 | msgid "internal" 155 | msgstr "內部" 156 | 157 | #: librairy/add_window.py:471 158 | msgid "Error, you must choose a file" 159 | msgstr "錯誤,您必須選擇一個檔案" 160 | 161 | #: librairy/add_window.py:518 162 | msgid "Error, args file missing" 163 | msgstr "錯誤,欠缺參數檔" 164 | 165 | #: librairy/add_window.py:670 166 | msgid "Save commands" 167 | msgstr "儲存指令" 168 | 169 | #: librairy/ArgsWindow.py:40 170 | msgid "Linking word" 171 | msgstr "連結詞語" 172 | 173 | #: librairy/ArgsWindow.py:51 174 | msgid "Word to separate call and parameter" 175 | msgstr "分割命令與參數的詞語" 176 | 177 | #: librairy/ArgsWindow.py:53 librairy/ArgsWindow.py:54 178 | msgid "Replace space by plus" 179 | msgstr "將空白置換為加號" 180 | 181 | #: librairy/ArgsWindow.py:57 librairy/ArgsWindow.py:58 182 | msgid "Go" 183 | msgstr "前往" 184 | 185 | #: librairy/basicCommands.py:28 librairy/internalWindow.py:80 186 | #: librairy/internalWindow.py:81 187 | msgid "time" 188 | msgstr "時間" 189 | 190 | #: librairy/basicCommands.py:30 librairy/internalWindow.py:82 191 | #: librairy/internalWindow.py:83 192 | msgid "power" 193 | msgstr "電源" 194 | 195 | #: librairy/basicCommands.py:32 librairy/internalWindow.py:84 196 | #: librairy/internalWindow.py:85 197 | msgid "clipboard" 198 | msgstr "剪貼簿" 199 | 200 | #: librairy/basicCommands.py:34 librairy/internalWindow.py:86 201 | #: librairy/internalWindow.py:87 202 | msgid "dictation mode" 203 | msgstr "口述模式" 204 | 205 | #: librairy/basicCommands.py:37 librairy/internalWindow.py:88 206 | #: librairy/internalWindow.py:89 librairy/stringParser.py:28 207 | msgid "exit dictation mode" 208 | msgstr "離開口述模式" 209 | 210 | #: librairy/basicCommands.py:55 211 | msgid "Nothing in the clipboard" 212 | msgstr "無嘢喺剪貼簿入面" 213 | 214 | #: librairy/basicCommands.py:66 215 | msgid "it is" 216 | msgstr "現在係" 217 | 218 | #: librairy/basicCommands.py:66 219 | msgid "hour" 220 | msgstr "時" 221 | 222 | #: librairy/basicCommands.py:66 223 | msgid "minute" 224 | msgstr "分" 225 | 226 | #: librairy/basicCommands.py:85 227 | msgid "Charging" 228 | msgstr "充緊電" 229 | 230 | #: librairy/basicCommands.py:85 231 | msgid "before charging" 232 | msgstr "後會充滿" 233 | 234 | #: librairy/basicCommands.py:87 235 | msgid "Discharging" 236 | msgstr "放緊電" 237 | 238 | #: librairy/basicCommands.py:87 239 | msgid "remaining" 240 | msgstr "後會用晒" 241 | 242 | #: librairy/basicCommands.py:89 243 | msgid "battery is not plugged" 244 | msgstr "冇插入電池" 245 | 246 | #: librairy/externalWindow.py:24 librairy/internalWindow.py:26 247 | msgid "your command" 248 | msgstr "您的指令" 249 | 250 | #: librairy/HelpWindow.py:28 251 | msgid "Help Google2Ubuntu" 252 | msgstr "幫助 Google2Ubuntu" 253 | 254 | #: librairy/interface.py:95 255 | msgid "unable to translate" 256 | msgstr "無法翻譯" 257 | 258 | #: librairy/internalWindow.py:99 259 | msgid "Which internal command to choose" 260 | msgstr "要選擇的內部指令" 261 | 262 | #: librairy/MainWindow.py:33 263 | msgid "Setup" 264 | msgstr "設定" 265 | 266 | #: librairy/MainWindow.py:35 267 | msgid "Open setup window" 268 | msgstr "開啟設定視窗" 269 | 270 | #: librairy/moduleSelection.py:18 271 | msgid "Choose a file" 272 | msgstr "選擇一個檔案" 273 | 274 | #: librairy/osd.py:49 275 | msgid "Error" 276 | msgstr "錯誤" 277 | 278 | #: librairy/osd.py:61 279 | msgid "Recognition result" 280 | msgstr "辨認結果" 281 | 282 | #: librairy/osd.py:71 283 | msgid "Calling command" 284 | msgstr "正在呼叫指令" 285 | 286 | #: librairy/osd.py:78 287 | msgid "Information" 288 | msgstr "資訊" 289 | 290 | #: librairy/osd.py:84 291 | msgid "Performing recording" 292 | msgstr "正在錄音" 293 | 294 | #: librairy/osd.py:85 295 | msgid "Please speak" 296 | msgstr "請說話" 297 | 298 | #: librairy/osd.py:95 299 | msgid "Done" 300 | msgstr "完成" 301 | 302 | #: librairy/SetupWindow.py:27 303 | msgid "Select your language" 304 | msgstr "選擇您的語言" 305 | 306 | #: librairy/SetupWindow.py:31 307 | msgid "Set the recording time (seconds)" 308 | msgstr "設定錄音時間(秒)" 309 | 310 | #: librairy/SetupWindow.py:34 311 | msgid "Set the music player's play command" 312 | msgstr "設定音樂播放器的播放指令" 313 | 314 | #: librairy/SetupWindow.py:37 315 | msgid "Set the music player's pause command" 316 | msgstr "設定音樂播放器的暫停指令" 317 | 318 | #: librairy/SetupWindow.py:40 319 | msgid "Hotword mode" 320 | msgstr "字詞偵測模式" 321 | 322 | #: librairy/SetupWindow.py:43 323 | msgid "Set the noise threshold" 324 | msgstr "設定噪音閾值" 325 | 326 | #: librairy/SetupWindow.py:46 327 | msgid "Set the hotword" 328 | msgstr "設定偵測字詞" 329 | 330 | #: librairy/SetupWindow.py:55 331 | msgid "Change the recording time" 332 | msgstr "變更錄音時間" 333 | 334 | #: librairy/SetupWindow.py:59 335 | msgid "Set the play command" 336 | msgstr "設定播放指令" 337 | 338 | #: librairy/SetupWindow.py:64 339 | msgid "Set the pause command" 340 | msgstr "設定暫停指令" 341 | 342 | #: librairy/SetupWindow.py:72 343 | msgid "Put the hotword mode ON or OFF" 344 | msgstr "開關字詞偵測模式" 345 | 346 | #: librairy/SetupWindow.py:78 347 | #, python-format 348 | msgid "Set the sound level in % under which sound is considerated as noise" 349 | msgstr "設定將低於這聲浪水平 % 的聲音判斷為噪音" 350 | 351 | #: librairy/SetupWindow.py:82 352 | msgid "Set the hotword to start effective recording" 353 | msgstr "設定使錄音生效的偵測字詞" 354 | 355 | #: librairy/SetupWindow.py:216 356 | msgid "What language to choose" 357 | msgstr "要選擇的語言" 358 | 359 | #: librairy/stringParser.py:84 360 | msgid "Setup file missing" 361 | msgstr "欠缺設定檔" 362 | 363 | #: librairy/workWithModule.py:55 364 | msgid "you didn't say the linking word" 365 | msgstr "您沒有說出連結詞語" 366 | 367 | #: librairy/workWithModule.py:59 368 | msgid "args file missing" 369 | msgstr "欠缺參數檔" 370 | 371 | #~ msgid "Module setup" 372 | #~ msgstr "模組設定" 373 | 374 | #~ msgid "word" 375 | #~ msgstr "詞語" 376 | 377 | #~ msgid "Setup window" 378 | #~ msgstr "設定視窗" 379 | -------------------------------------------------------------------------------- /i18n/zh_CN/README.md: -------------------------------------------------------------------------------- 1 | Suggestion for zh_CN translators 2 | ================================ 3 | 4 | If you want to update Simplified Chinese translations, please update `i18n/zh_Hans/LC_MESSAGES/google2ubuntu.po` and `config/zh_Hans/default.xml`. 5 | -------------------------------------------------------------------------------- /i18n/zh_CN/fallback: -------------------------------------------------------------------------------- 1 | zh_Hans 2 | -------------------------------------------------------------------------------- /i18n/zh_HK/README.md: -------------------------------------------------------------------------------- 1 | Suggestion for zh_HK translators 2 | ================================ 3 | 4 | If you want to update Cantonese (Traditional Chinese) translations, please update `i18n/yue_Hant/LC_MESSAGES/google2ubuntu.po` and `config/yue_Hant/default.xml`. 5 | -------------------------------------------------------------------------------- /i18n/zh_HK/fallback: -------------------------------------------------------------------------------- 1 | yue_Hant 2 | -------------------------------------------------------------------------------- /i18n/zh_Hans/.placeholder: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/zh_Hans/.placeholder -------------------------------------------------------------------------------- /i18n/zh_Hant/LC_MESSAGES/google2ubuntu.mo: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/i18n/zh_Hant/LC_MESSAGES/google2ubuntu.mo -------------------------------------------------------------------------------- /i18n/zh_Hant/LC_MESSAGES/google2ubuntu.po: -------------------------------------------------------------------------------- 1 | # Chinese translations for google package. 2 | # Copyright (C) 2014 THE google'S COPYRIGHT HOLDER 3 | # This file is distributed under the same license as the google package. 4 | # Ladios Jonquil , 2014. 5 | # 6 | msgid "" 7 | msgstr "" 8 | "Project-Id-Version: google 2ubuntu\n" 9 | "Report-Msgid-Bugs-To: \n" 10 | "POT-Creation-Date: 2014-02-15 14:54+0100\n" 11 | "PO-Revision-Date: 2014-02-12 04:52+0800\n" 12 | "Last-Translator: Ladios Jonquil \n" 13 | "Language-Team: Chinese (traditional)\n" 14 | "Language: zh_Hant\n" 15 | "MIME-Version: 1.0\n" 16 | "Content-Type: text/plain; charset=UTF-8\n" 17 | "Content-Transfer-Encoding: 8bit\n" 18 | 19 | #: listener.py:22 20 | msgid "ok start" 21 | msgstr "ok 開始" 22 | 23 | #: listener.py:76 24 | msgid "Cannot connect to Google Translate" 25 | msgstr "無法連線至 Google 翻譯" 26 | 27 | #: listener.py:78 28 | msgid "Phrase parsing failed" 29 | msgstr "片語剖析失則" 30 | 31 | #: listener.py:80 32 | msgid "Error processing value returned by Google Translate" 33 | msgstr "處理 Google 翻譯結果時發生錯誤" 34 | 35 | #: librairy/add_window.py:44 36 | msgid "list of commands" 37 | msgstr "命令列表" 38 | 39 | #: librairy/add_window.py:57 40 | msgid "Keys" 41 | msgstr "語音鍵" 42 | 43 | #: librairy/add_window.py:73 44 | msgid "Commands" 45 | msgstr "系統指令" 46 | 47 | #: librairy/add_window.py:81 librairy/osd.py:35 librairy/osd.py:40 48 | msgid "Ready" 49 | msgstr "就緒" 50 | 51 | #: librairy/add_window.py:153 librairy/add_window.py:504 52 | #: librairy/ArgsWindow.py:35 librairy/ArgsWindow.py:48 53 | #: librairy/externalWindow.py:20 librairy/internalWindow.py:22 54 | msgid "key sentence" 55 | msgstr "指令語句" 56 | 57 | #: librairy/add_window.py:153 librairy/add_window.py:217 58 | #: librairy/add_window.py:429 librairy/externalWindow.py:59 59 | #: librairy/stringParser.py:75 60 | msgid "external" 61 | msgstr "外部" 62 | 63 | #: librairy/add_window.py:245 64 | msgid "External commands" 65 | msgstr "外部指令" 66 | 67 | #: librairy/add_window.py:249 68 | msgid "Internal commands" 69 | msgstr "內部指令" 70 | 71 | #: librairy/add_window.py:253 72 | msgid "Module" 73 | msgstr "模組" 74 | 75 | #: librairy/add_window.py:260 76 | msgid "Add" 77 | msgstr "新增" 78 | 79 | #: librairy/add_window.py:270 80 | msgid "Add a new command" 81 | msgstr "新增指令" 82 | 83 | #: librairy/add_window.py:275 librairy/add_window.py:287 84 | #: librairy/add_window.py:540 85 | msgid "Remove" 86 | msgstr "移除" 87 | 88 | #: librairy/add_window.py:277 librairy/add_window.py:297 89 | msgid "Remove this command" 90 | msgstr "移除這指令" 91 | 92 | #: librairy/add_window.py:280 93 | msgid "Clean up" 94 | msgstr "清理" 95 | 96 | #: librairy/add_window.py:282 librairy/add_window.py:561 97 | msgid "Remove all commands" 98 | msgstr "移除所有指令" 99 | 100 | #: librairy/add_window.py:302 101 | msgid "Try" 102 | msgstr "試試看" 103 | 104 | #: librairy/add_window.py:305 105 | msgid "Try this command" 106 | msgstr "試一下這指令" 107 | 108 | #: librairy/add_window.py:312 109 | msgid "Edit" 110 | msgstr "編輯" 111 | 112 | #: librairy/add_window.py:315 113 | msgid "Edit this command" 114 | msgstr "編輯這指令" 115 | 116 | #: librairy/add_window.py:337 117 | msgid "Help" 118 | msgstr "幫助" 119 | 120 | #: librairy/add_window.py:341 121 | msgid "Display help message" 122 | msgstr "顯示幫助信息" 123 | 124 | #: librairy/add_window.py:361 125 | msgid "All" 126 | msgstr "全部" 127 | 128 | #: librairy/add_window.py:362 129 | msgid "External" 130 | msgstr "外部" 131 | 132 | #: librairy/add_window.py:363 133 | msgid "Internal" 134 | msgstr "內部" 135 | 136 | #: librairy/add_window.py:364 137 | msgid "Modules" 138 | msgstr "模組" 139 | 140 | #: librairy/add_window.py:368 141 | msgid "What type of command to add" 142 | msgstr "要新增的指令" 143 | 144 | #: librairy/add_window.py:409 librairy/add_window.py:413 145 | #: librairy/add_window.py:425 librairy/add_window.py:583 146 | #: librairy/stringParser.py:66 147 | msgid "modules" 148 | msgstr "模組" 149 | 150 | #: librairy/add_window.py:409 librairy/add_window.py:411 151 | #: librairy/add_window.py:433 librairy/add_window.py:583 152 | #: librairy/internalWindow.py:60 librairy/stringParser.py:28 153 | #: librairy/stringParser.py:71 154 | msgid "internal" 155 | msgstr "內部" 156 | 157 | #: librairy/add_window.py:471 158 | msgid "Error, you must choose a file" 159 | msgstr "錯誤,您必須選擇一個檔案" 160 | 161 | #: librairy/add_window.py:518 162 | msgid "Error, args file missing" 163 | msgstr "錯誤,欠缺參數檔" 164 | 165 | #: librairy/add_window.py:670 166 | msgid "Save commands" 167 | msgstr "儲存指令" 168 | 169 | #: librairy/ArgsWindow.py:40 170 | msgid "Linking word" 171 | msgstr "連結詞語" 172 | 173 | #: librairy/ArgsWindow.py:51 174 | msgid "Word to separate call and parameter" 175 | msgstr "分割命令與參數的詞語" 176 | 177 | #: librairy/ArgsWindow.py:53 librairy/ArgsWindow.py:54 178 | msgid "Replace space by plus" 179 | msgstr "將空白置換為加號" 180 | 181 | #: librairy/ArgsWindow.py:57 librairy/ArgsWindow.py:58 182 | msgid "Go" 183 | msgstr "前往" 184 | 185 | #: librairy/basicCommands.py:28 librairy/internalWindow.py:80 186 | #: librairy/internalWindow.py:81 187 | msgid "time" 188 | msgstr "時間" 189 | 190 | #: librairy/basicCommands.py:30 librairy/internalWindow.py:82 191 | #: librairy/internalWindow.py:83 192 | msgid "power" 193 | msgstr "電源" 194 | 195 | #: librairy/basicCommands.py:32 librairy/internalWindow.py:84 196 | #: librairy/internalWindow.py:85 197 | msgid "clipboard" 198 | msgstr "剪貼簿" 199 | 200 | #: librairy/basicCommands.py:34 librairy/internalWindow.py:86 201 | #: librairy/internalWindow.py:87 202 | msgid "dictation mode" 203 | msgstr "口述模式" 204 | 205 | #: librairy/basicCommands.py:37 librairy/internalWindow.py:88 206 | #: librairy/internalWindow.py:89 librairy/stringParser.py:28 207 | msgid "exit dictation mode" 208 | msgstr "離開口述模式" 209 | 210 | #: librairy/basicCommands.py:55 211 | msgid "Nothing in the clipboard" 212 | msgstr "剪貼簿為空白" 213 | 214 | #: librairy/basicCommands.py:66 215 | msgid "it is" 216 | msgstr "現在是" 217 | 218 | #: librairy/basicCommands.py:66 219 | msgid "hour" 220 | msgstr "時" 221 | 222 | #: librairy/basicCommands.py:66 223 | msgid "minute" 224 | msgstr "分" 225 | 226 | #: librairy/basicCommands.py:85 227 | msgid "Charging" 228 | msgstr "正在充電" 229 | 230 | #: librairy/basicCommands.py:85 231 | msgid "before charging" 232 | msgstr "後完成充電" 233 | 234 | #: librairy/basicCommands.py:87 235 | msgid "Discharging" 236 | msgstr "放電中" 237 | 238 | #: librairy/basicCommands.py:87 239 | msgid "remaining" 240 | msgstr "後會用盡" 241 | 242 | #: librairy/basicCommands.py:89 243 | msgid "battery is not plugged" 244 | msgstr "沒有插入電池" 245 | 246 | #: librairy/externalWindow.py:24 librairy/internalWindow.py:26 247 | msgid "your command" 248 | msgstr "您的指令" 249 | 250 | #: librairy/HelpWindow.py:28 251 | msgid "Help Google2Ubuntu" 252 | msgstr "幫助 Google2Ubuntu" 253 | 254 | #: librairy/interface.py:95 255 | msgid "unable to translate" 256 | msgstr "無法翻譯" 257 | 258 | #: librairy/internalWindow.py:99 259 | msgid "Which internal command to choose" 260 | msgstr "要選擇的內部指令" 261 | 262 | #: librairy/MainWindow.py:33 263 | msgid "Setup" 264 | msgstr "設定" 265 | 266 | #: librairy/MainWindow.py:35 267 | msgid "Open setup window" 268 | msgstr "開啟設定視窗" 269 | 270 | #: librairy/moduleSelection.py:18 271 | msgid "Choose a file" 272 | msgstr "選擇一個檔案" 273 | 274 | #: librairy/osd.py:49 275 | msgid "Error" 276 | msgstr "錯誤" 277 | 278 | #: librairy/osd.py:61 279 | msgid "Recognition result" 280 | msgstr "辨認結果" 281 | 282 | #: librairy/osd.py:71 283 | msgid "Calling command" 284 | msgstr "正在呼叫指令" 285 | 286 | #: librairy/osd.py:78 287 | msgid "Information" 288 | msgstr "資訊" 289 | 290 | #: librairy/osd.py:84 291 | msgid "Performing recording" 292 | msgstr "正在錄音" 293 | 294 | #: librairy/osd.py:85 295 | msgid "Please speak" 296 | msgstr "請說話" 297 | 298 | #: librairy/osd.py:95 299 | msgid "Done" 300 | msgstr "完成" 301 | 302 | #: librairy/SetupWindow.py:27 303 | msgid "Select your language" 304 | msgstr "選擇您的語言" 305 | 306 | #: librairy/SetupWindow.py:31 307 | msgid "Set the recording time (seconds)" 308 | msgstr "設定錄音時間(秒)" 309 | 310 | #: librairy/SetupWindow.py:34 311 | msgid "Set the music player's play command" 312 | msgstr "設定音樂播放器的播放指令" 313 | 314 | #: librairy/SetupWindow.py:37 315 | msgid "Set the music player's pause command" 316 | msgstr "設定音樂播放器的暫停指令" 317 | 318 | #: librairy/SetupWindow.py:40 319 | msgid "Hotword mode" 320 | msgstr "字詞偵測模式" 321 | 322 | #: librairy/SetupWindow.py:43 323 | msgid "Set the noise threshold" 324 | msgstr "設定噪音閾值" 325 | 326 | #: librairy/SetupWindow.py:46 327 | msgid "Set the hotword" 328 | msgstr "設定偵測字詞" 329 | 330 | #: librairy/SetupWindow.py:55 331 | msgid "Change the recording time" 332 | msgstr "變更錄音時間" 333 | 334 | #: librairy/SetupWindow.py:59 335 | msgid "Set the play command" 336 | msgstr "設定播放指令" 337 | 338 | #: librairy/SetupWindow.py:64 339 | msgid "Set the pause command" 340 | msgstr "設定暫停指令" 341 | 342 | #: librairy/SetupWindow.py:72 343 | msgid "Put the hotword mode ON or OFF" 344 | msgstr "開關字詞偵測模式" 345 | 346 | #: librairy/SetupWindow.py:78 347 | #, python-format 348 | msgid "Set the sound level in % under which sound is considerated as noise" 349 | msgstr "設定將低於這聲浪水平 % 的聲音判斷為噪音" 350 | 351 | #: librairy/SetupWindow.py:82 352 | msgid "Set the hotword to start effective recording" 353 | msgstr "設定使錄音生效的偵測字詞" 354 | 355 | #: librairy/SetupWindow.py:216 356 | msgid "What language to choose" 357 | msgstr "要選擇的語言" 358 | 359 | #: librairy/stringParser.py:84 360 | msgid "Setup file missing" 361 | msgstr "欠缺設定檔" 362 | 363 | #: librairy/workWithModule.py:55 364 | msgid "you didn't say the linking word" 365 | msgstr "您沒有說出連結詞語" 366 | 367 | #: librairy/workWithModule.py:59 368 | msgid "args file missing" 369 | msgstr "欠缺參數檔" 370 | 371 | #~ msgid "Module setup" 372 | #~ msgstr "模組設定" 373 | 374 | #~ msgid "word" 375 | #~ msgstr "詞語" 376 | 377 | #~ msgid "Setup window" 378 | #~ msgstr "設定視窗" 379 | -------------------------------------------------------------------------------- /i18n/zh_MO/README.md: -------------------------------------------------------------------------------- 1 | Suggestion for zh_MO translators 2 | ================================ 3 | 4 | If you want to update Cantonese (Traditional Chinese) translations, please update `i18n/yue_Hant/LC_MESSAGES/google2ubuntu.po` and `config/yue_Hant/default.xml`. 5 | -------------------------------------------------------------------------------- /i18n/zh_MO/fallback: -------------------------------------------------------------------------------- 1 | yue_Hant 2 | -------------------------------------------------------------------------------- /i18n/zh_MY/README.md: -------------------------------------------------------------------------------- 1 | Suggestion for zh_MY translators 2 | ================================ 3 | 4 | If you want to update Simplified Chinese translations, please update `i18n/zh_Hans/LC_MESSAGES/google2ubuntu.po` and `config/zh_Hans/default.xml`. 5 | -------------------------------------------------------------------------------- /i18n/zh_MY/fallback: -------------------------------------------------------------------------------- 1 | zh_Hans 2 | -------------------------------------------------------------------------------- /i18n/zh_SG/README.md: -------------------------------------------------------------------------------- 1 | Suggestion for zh_SG translators 2 | ================================ 3 | 4 | If you want to update Simplified Chinese translations, please update `i18n/zh_Hans/LC_MESSAGES/google2ubuntu.po` and `config/zh_Hans/default.xml`. 5 | -------------------------------------------------------------------------------- /i18n/zh_SG/fallback: -------------------------------------------------------------------------------- 1 | zh_Hans 2 | -------------------------------------------------------------------------------- /i18n/zh_TW/README.md: -------------------------------------------------------------------------------- 1 | Suggestion for zh_TW translators 2 | ================================ 3 | 4 | If you want to update Traditional Chinese translations, please update `i18n/zh_Hant/LC_MESSAGES/google2ubuntu.po` and `config/zh_Hant/default.xml`. 5 | -------------------------------------------------------------------------------- /i18n/zh_TW/fallback: -------------------------------------------------------------------------------- 1 | zh_Hant 2 | -------------------------------------------------------------------------------- /librairy/ArgsWindow.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Notify 5 | from gi.repository import Gdk 6 | from gi.repository import Gio 7 | from os.path import expanduser 8 | import os, sys, subprocess, gettext 9 | import xml.etree.ElementTree as ET 10 | 11 | # gère l'apparition de la fenêtre d'assistance de création de module 12 | class ArgsWindow(): 13 | """ 14 | @description: Display a window to help the user create a config for a 15 | module 16 | 17 | @param module 18 | module's folder 19 | 20 | @param name 21 | module's name 22 | 23 | @param store 24 | a Gtk.Listore in which we will append a new line for this module 25 | """ 26 | def __init__(self,module,name,store,iter=None): 27 | self.grid = Gtk.Grid() 28 | self.grid.set_border_width(5) 29 | self.grid.set_row_spacing(5) 30 | self.grid.set_vexpand(True) 31 | self.grid.set_hexpand(True) 32 | self.grid.set_column_spacing(2) 33 | self.grid.set_column_homogeneous(False) 34 | 35 | label1 = Gtk.Label(_('key sentence')) 36 | label1.set_justify(Gtk.Justification.LEFT) 37 | label1.set_halign(Gtk.Align.START) 38 | label1.set_hexpand(True) 39 | 40 | label2 = Gtk.Label(_("Linking word")) 41 | label2.set_justify(Gtk.Justification.LEFT) 42 | label2.set_halign(Gtk.Align.START) 43 | 44 | label3 = Gtk.Label(_("Replace space by plus")) 45 | label3.set_justify(Gtk.Justification.LEFT) 46 | label3.set_halign(Gtk.Align.START) 47 | 48 | ll = Gtk.Label() 49 | ll.set_vexpand(True) 50 | 51 | self.entry1 = Gtk.Entry() 52 | self.entry1.set_tooltip_text(_('key sentence')) 53 | 54 | self.entry2 = Gtk.Entry() 55 | self.entry2.set_tooltip_text(_("Word to separate call and parameter")) 56 | self.checkbutton = Gtk.Switch() 57 | self.checkbutton.set_tooltip_text(_("Replace space by plus")) 58 | self.checkbutton.set_active(False) 59 | 60 | button = Gtk.Button() 61 | button.set_label(_("Go")) 62 | button.set_tooltip_text(_("Go")) 63 | image = Gtk.Image() 64 | image.set_from_stock(Gtk.STOCK_APPLY, Gtk.IconSize.BUTTON) 65 | button.set_image(image) 66 | 67 | button_cancel = Gtk.Button.new_from_stock(Gtk.STOCK_CANCEL) 68 | button_cancel.connect("clicked",self.do_destroy) 69 | 70 | print module, name 71 | if iter is None: 72 | button.connect("clicked",self.do_clicked,module,name,store) 73 | else: 74 | self.entry1.set_text(store[iter][0]) 75 | linker = store[iter][3] 76 | spacebyplus = store[iter][4] 77 | self.entry2.set_text(linker) 78 | 79 | if spacebyplus == '1': 80 | self.checkbutton.set_active(True) 81 | button.connect("clicked",self.do_modify,store[iter][3],store,iter) 82 | 83 | self.grid.attach(label1,0,0,11,1) 84 | self.grid.attach(self.entry1,11,0,4,1) 85 | self.grid.attach(label2,0,1,11,1) 86 | self.grid.attach(self.entry2,11,1,4,1) 87 | self.grid.attach(label3,0,2,14,1) 88 | self.grid.attach(self.checkbutton,14,2,1,1) 89 | self.grid.attach(ll,0,3,15,1) 90 | self.grid.attach(button_cancel,13,4,1,1) 91 | self.grid.attach(button,14,4,1,1) 92 | self.grid.show_all() 93 | 94 | def do_destroy(self,button): 95 | self.grid.destroy() 96 | 97 | def get_grid(self): 98 | return self.grid 99 | 100 | def do_clicked(self,button,module,name,store): 101 | """ 102 | @description: callback function called when the user want to finish 103 | the configuration of the module. If everything is ok then the config 104 | file is written at the right place 105 | """ 106 | key = self.entry1.get_text() 107 | linker = self.entry2.get_text() 108 | if self.checkbutton.get_active(): 109 | spacebyplus='1' 110 | else: 111 | spacebyplus='0' 112 | 113 | if linker is not '': 114 | try: 115 | # folder = name.split('.')[0] 116 | module_path=expanduser('~')+'/.config/google2ubuntu/modules/' 117 | 118 | os.system('cp '+module+' '+module_path) 119 | print 'key', key 120 | print 'name', name 121 | print 'module', module_path+name 122 | print 'linker', linker 123 | print 'spacebyplus', spacebyplus 124 | store.append([key,name,'modules',linker,spacebyplus]) 125 | #save the store 126 | self.saveTree(store) 127 | except IOError: 128 | "Unable to open the file" 129 | 130 | self.grid.destroy() 131 | 132 | def do_modify(self,button,argsfile,store,iter): 133 | if self.checkbutton.get_active(): 134 | spacebyplus = 1 135 | else: 136 | spacebyplus = 0 137 | 138 | # modifying the store 139 | store[iter][0] = self.entry1.get_text() 140 | store[iter][3] = self.entry2.get_text() 141 | store[iter][4] = str(spacebyplus) 142 | 143 | #save the store 144 | self.saveTree(store) 145 | self.grid.destroy() 146 | 147 | def saveTree(self,store): 148 | """ 149 | @description: save the treeview in the google2ubuntu.xml file 150 | 151 | @param: store 152 | the listStore attach to the treeview 153 | """ 154 | # if there is still an entry in the model 155 | config = expanduser('~') +'/.config/google2ubuntu/google2ubuntu.xml' 156 | try: 157 | if not os.path.exists(os.path.dirname(config)): 158 | os.makedirs(os.path.dirname(config)) 159 | 160 | root = ET.Element("data") 161 | if len(store) != 0: 162 | for i in range(len(store)): 163 | iter = store.get_iter(i) 164 | if store[iter][0] != '' and store[iter][1] != '': 165 | for s in store[iter][0].split('|'): 166 | s = s.lower() 167 | s = s.replace('*',' ') 168 | Type = ET.SubElement(root, "entry") 169 | Type.set("name",unicode(store[iter][2],"utf-8")) 170 | Key = ET.SubElement(Type, "key") 171 | Key.text = unicode(s,"utf-8") 172 | Command = ET.SubElement(Type, "command") 173 | Command.text = unicode(store[iter][1],"utf-8") 174 | Linker = ET.SubElement(Type, "linker") 175 | Spacebyplus = ET.SubElement(Type, "spacebyplus") 176 | if store[iter][3] is not None or store[iter][4] is not None: 177 | Linker.text = unicode(store[iter][3],"utf-8") 178 | Spacebyplus.text = unicode(store[iter][4],"utf-8") 179 | 180 | tree = ET.ElementTree(root).write(config,encoding="utf-8",xml_declaration=True) 181 | 182 | except IOError: 183 | print "Unable to write the file" 184 | -------------------------------------------------------------------------------- /librairy/Googletts.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from os.path import expanduser 4 | from localehelper import LocaleHelper 5 | import urllib, urllib2, time, re, unicodedata, os, sys, locale 6 | 7 | class tts(): 8 | """ 9 | @description: Let google2ubuntu to use the Google tts API 10 | 11 | @param: the text to read to the user 12 | """ 13 | def __init__(self,text): 14 | # need to put this line 15 | locale.setlocale(locale.LC_ALL, '') 16 | 17 | # make the program able to switch language 18 | p = os.path.dirname(os.path.abspath(__file__)).strip('librairy') 19 | localeHelper = LocaleHelper() 20 | lc = localeHelper.getLocale() 21 | text = unicodedata.normalize('NFKD', unicode(text,"utf-8")) 22 | text=text.encode("utf8") 23 | text = text.replace('\n',' ') 24 | text_list = re.split('(\,|\.)', text) 25 | combined_text = [] 26 | output=open('/tmp/tts.mp3',"w") 27 | 28 | for idx, val in enumerate(text_list): 29 | if idx % 2 == 0: 30 | combined_text.append(val) 31 | else: 32 | joined_text = ''.join((combined_text.pop(),val)) 33 | if len(joined_text) < 100: 34 | combined_text.append(joined_text) 35 | else: 36 | subparts = re.split('( )', joined_text) 37 | temp_string = "" 38 | temp_array = [] 39 | for part in subparts: 40 | temp_string = temp_string + part 41 | if len(temp_string) > 80: 42 | temp_array.append(temp_string) 43 | temp_string = "" 44 | #append final part 45 | temp_array.append(temp_string) 46 | combined_text.extend(temp_array) 47 | #download chunks and write them to the output file 48 | for idx, val in enumerate(combined_text): 49 | mp3url = "http://translate.google.com/translate_tts?ie=UTF-8&tl=%s&q=%s&total=%s&idx=%s" % (lc, urllib.quote(val), len(combined_text), idx) 50 | print mp3url 51 | headers = {"Host":"translate.google.com", 52 | "Referer":"http://www.gstatic.com/translate/sound_player2.swf", 53 | "User-Agent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_3) AppleWebKit/535.19 (KHTML, like Gecko) Chrome/18.0.1025.163 Safari/535.19"} 54 | req = urllib2.Request(mp3url, '', headers) 55 | sys.stdout.write('.') 56 | sys.stdout.flush() 57 | if len(val) > 0: 58 | try: 59 | response = urllib2.urlopen(req) 60 | output.write(response.read()) 61 | time.sleep(.5) 62 | except urllib2.HTTPError as e: 63 | print ('%s' % e) 64 | output.close() 65 | 66 | 67 | os.system("play /tmp/tts.mp3 &") 68 | -------------------------------------------------------------------------------- /librairy/HelpWindow.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Notify 5 | from gi.repository import Gdk 6 | from gi.repository import Gio 7 | from os.path import expanduser 8 | import os, sys, subprocess, gettext 9 | 10 | # gère l'apparition de le fenêtre d'aide 11 | class HelpWindow(): 12 | """ 13 | @description: Diaplay an help window 14 | """ 15 | def __init__(self): 16 | #a Gtk.AboutDialog 17 | self.aboutdialog = Gtk.AboutDialog() 18 | 19 | # lists of authors and documenters (will be used later) 20 | authors = ["Franquet Benoit"] 21 | documenters = ["Franquet Benoit"] 22 | translators = "Franquet Benoit \n" 23 | translators += "Tectas\n" 24 | translators += "Daniele Scasciafratte \n" 25 | translators += "Leor \n" 26 | translators += "Ladios\n" 27 | translators += "Franck Claessen" 28 | 29 | # we fill in the aboutdialog 30 | self.aboutdialog.set_program_name(_("Help Google2Ubuntu")) 31 | self.aboutdialog.set_copyright("Copyright \xc2\xa9 2014 Franquet Benoit") 32 | self.aboutdialog.set_authors(authors) 33 | self.aboutdialog.set_translator_credits(translators) 34 | self.aboutdialog.set_documenters(documenters) 35 | self.aboutdialog.set_version("1.1.1") 36 | self.aboutdialog.set_license_type (Gtk.License.GPL_3_0,) 37 | self.aboutdialog.set_website("https://github.com/benoitfragit/google2ubuntu") 38 | self.aboutdialog.set_website_label("https://github.com/benoitfragit/google2ubuntu") 39 | 40 | # we do not want to show the title, which by default would be "About AboutDialog Example" 41 | # we have to reset the title of the messagedialog window after setting the program name 42 | self.aboutdialog.set_title("") 43 | 44 | # to close the aboutdialog when "close" is clicked we connect the 45 | # "response" signal to on_close 46 | self.aboutdialog.connect("response", self.on_close) 47 | # show the aboutdialog 48 | self.aboutdialog.show() 49 | 50 | # destroy the aboutdialog 51 | def on_close(self, action, parameter): 52 | """ 53 | @description: function called when the user wants to close the window 54 | 55 | @param: action 56 | the window to close 57 | """ 58 | action.destroy() 59 | -------------------------------------------------------------------------------- /librairy/MainWindow.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Notify 5 | from gi.repository import Gdk 6 | from gi.repository import Gio 7 | from os.path import expanduser 8 | from add_window import add_window 9 | from SetupWindow import * 10 | import os 11 | import sys 12 | import subprocess 13 | import gettext 14 | 15 | # Classe MyWindow gere l'apparition de la fenetre principale 16 | class MainWindow(Gtk.ApplicationWindow): 17 | """ 18 | @description: This class display the main window that the user will 19 | see when he wants to manage his commands 20 | """ 21 | def __init__(self,app): 22 | Gtk.Window.__init__(self, title="google2ubuntu-manager",application=app) 23 | self.set_default_size(800, 400) 24 | self.set_resizable(True) 25 | self.set_border_width(0) 26 | self.get_focus() 27 | self.set_position(Gtk.WindowPosition.CENTER) 28 | path = os.path.dirname(os.path.abspath(__file__)).strip('librairy') 29 | self.set_default_icon_from_file(path+'/resources/icons.png') 30 | 31 | # get two button to switch between view 32 | button_config = Gtk.ToolButton.new_from_stock(Gtk.STOCK_PREFERENCES) 33 | button_config.set_label(_("Setup")) 34 | button_config.set_is_important(True) 35 | button_config.set_tooltip_text(_('Open setup window')) 36 | button_config.show() 37 | button_config.connect("clicked",self.change_page,1) 38 | 39 | button_back = Gtk.Button.new_from_stock(Gtk.STOCK_OK) 40 | button_back.connect("clicked",self.change_page,0) 41 | button_cancel = Gtk.Button.new_from_stock(Gtk.STOCK_CANCEL) 42 | button_cancel.connect("clicked",self.change_page,0) 43 | 44 | # get the main view 45 | content = add_window(button_config) 46 | label_main = Gtk.Label("main") 47 | config = SetupWindow(button_back,button_cancel) 48 | label_config = Gtk.Label("config") 49 | 50 | # create a Gtk.Notebook to store both page 51 | self.notebook = Gtk.Notebook.new() 52 | self.notebook.set_show_tabs(False) 53 | self.notebook.append_page(content.get_grid(),label_main) 54 | self.notebook.append_page(config.getGrid(),label_config) 55 | 56 | # show 57 | self.add(self.notebook) 58 | self.show_all() 59 | 60 | def change_page(self,button,page): 61 | self.notebook.set_current_page(page) 62 | -------------------------------------------------------------------------------- /librairy/SetupWindow.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Notify 5 | from gi.repository import Gdk 6 | from gi.repository import Gio 7 | from os.path import expanduser 8 | from localehelper import LocaleHelper 9 | import os, sys, gettext 10 | 11 | class SetupWindow(): 12 | def __init__(self,button_back, button_cancel): 13 | # class variables 14 | localeHelper = LocaleHelper('en_EN') 15 | self.locale = localeHelper.getLocale() 16 | self.recording_time = 5 17 | self.player_pause = '' 18 | self.player_play = '' 19 | self.dictation = False 20 | self.config = expanduser('~')+'/.config/google2ubuntu/google2ubuntu.conf' 21 | self.threshold = 5 22 | self.key = '' 23 | self.hotword = _('ok start') 24 | 25 | # looking for the configuration file 26 | self.__loadconfig() 27 | 28 | label0=Gtk.Label(_('Set Google Api Key')) 29 | label0.set_justify(Gtk.Justification.LEFT) 30 | label0.set_halign(Gtk.Align.START) 31 | label1=Gtk.Label(_('Select your language')) 32 | label1.set_justify(Gtk.Justification.LEFT) 33 | label1.set_halign(Gtk.Align.START) 34 | label1.set_hexpand(True) 35 | label2=Gtk.Label(_('Set the recording time (seconds)')) 36 | label2.set_justify(Gtk.Justification.LEFT) 37 | label2.set_halign(Gtk.Align.START) 38 | label3=Gtk.Label(_("Set the music player's play command")) 39 | label3.set_justify(Gtk.Justification.LEFT) 40 | label3.set_halign(Gtk.Align.START) 41 | label4=Gtk.Label(_("Set the music player's pause command")) 42 | label4.set_justify(Gtk.Justification.LEFT) 43 | label4.set_halign(Gtk.Align.START) 44 | label5=Gtk.Label(_('Hotword mode')) 45 | label5.set_justify(Gtk.Justification.LEFT) 46 | label5.set_halign(Gtk.Align.START) 47 | label6=Gtk.Label(_('Set the noise threshold')) 48 | label6.set_justify(Gtk.Justification.LEFT) 49 | label6.set_halign(Gtk.Align.START) 50 | label7 = Gtk.Label(_('Set the hotword')) 51 | label7.set_justify(Gtk.Justification.LEFT) 52 | label7.set_halign(Gtk.Align.START) 53 | 54 | combo = self.__get_combobox() 55 | 56 | self.scale = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL,1,10,1) 57 | self.scale.set_value(self.recording_time) 58 | self.scale.connect("value-changed", self.scale_moved) 59 | self.scale.set_tooltip_text(_('Change the recording time')) 60 | 61 | self.entry0 = Gtk.Entry() 62 | self.entry0.set_text(self.key) 63 | self.entry0.set_tooltip_text(_('Set the Google Api Key')); 64 | 65 | self.entry1 = Gtk.Entry() 66 | self.entry1.set_text(self.player_play) 67 | self.entry1.set_tooltip_text(_('Set the play command')) 68 | 69 | 70 | self.entry2 = Gtk.Entry() 71 | self.entry2.set_text(self.player_pause) 72 | self.entry2.set_tooltip_text(_('Set the pause command')) 73 | 74 | switch_active = Gtk.Switch() 75 | switch_active.set_active(False) 76 | switch_active.set_hexpand(False) 77 | if os.path.exists('/tmp/hotword'): 78 | switch_active.set_active(True) 79 | 80 | switch_active.set_tooltip_text(_('Put the hotword mode ON or OFF')) 81 | switch_active.connect("notify::active", self.active_hotword) 82 | 83 | self.scale_threshold = Gtk.Scale.new_with_range(Gtk.Orientation.HORIZONTAL,1,20,0.5) 84 | self.scale_threshold.set_value(self.threshold) 85 | self.scale_threshold.connect("value-changed",self.threshold_changed) 86 | self.scale_threshold.set_tooltip_text(_('Set the sound level in % under which sound is considerated as noise')) 87 | 88 | self.entry3 = Gtk.Entry() 89 | self.entry3.set_text(self.hotword) 90 | self.entry3.set_tooltip_text(_('Set the hotword to start effective recording')) 91 | 92 | button_back.connect("clicked",self.on_clicked) 93 | 94 | # an invisble widget to fill the window 95 | ll = Gtk.Label() 96 | ll.set_vexpand(True) 97 | 98 | self.grid = Gtk.Grid() 99 | self.grid.set_border_width(10) 100 | self.grid.set_row_spacing(15) 101 | self.grid.set_vexpand(True) 102 | self.grid.set_hexpand(True) 103 | self.grid.set_column_spacing(2) 104 | self.grid.set_column_homogeneous(False) 105 | self.grid.attach(label1,0,0,14,1) 106 | self.grid.attach(combo,14,0,1,1) 107 | self.grid.attach(label2,0,1,11,1) 108 | self.grid.attach(self.scale, 11,1,4,1) 109 | self.grid.attach(label3,0,2,11,1) 110 | self.grid.attach(self.entry1,11,2,4,1) 111 | self.grid.attach(label4,0,3,11,1) 112 | self.grid.attach(self.entry2,11,3,4,1) 113 | self.grid.attach(label5,0,4,14,1) 114 | self.grid.attach(switch_active,14,4,1,1) 115 | self.grid.attach(label7,0,5,11,1) 116 | self.grid.attach(self.entry3,11,5,4,1) 117 | self.grid.attach(label6,0,6,11,1) 118 | self.grid.attach(self.scale_threshold,11,6,4,1) 119 | self.grid.attach(label0, 0, 7, 11, 1) 120 | self.grid.attach(self.entry0, 11, 7, 4, 1) 121 | self.grid.attach(ll,0,8,15,1) 122 | self.grid.attach(button_cancel,13,9,1,1) 123 | self.grid.attach(button_back,14,9,1,1) 124 | 125 | # load the config 126 | def __loadconfig(self): 127 | # if a config file is available 128 | if os.path.exists(self.config): 129 | try: 130 | # here we load 131 | with open(self.config,"r") as f: 132 | for line in f.readlines(): 133 | line = line.strip('\n') 134 | #get the field 135 | field = line.split('=') 136 | if len(field) >= 2: 137 | if field[0] == 'recording': 138 | self.recording_time=int(field[1]) 139 | elif field[0] == 'pause': 140 | self.player_pause = field[1].replace('"','') 141 | elif field[0] == 'play': 142 | self.player_play = field[1].replace('"','') 143 | elif field[0] == 'hotword': 144 | self.hotword = field[1].replace('"','') 145 | elif field[0] == 'threshold': 146 | self.threshold = int(field[1]) 147 | elif field[0] == 'key': 148 | self.key = field[1].replace('"','') 149 | 150 | # here we check mode 151 | if os.path.exists('/tmp/g2u_dictation'): 152 | self.dictation = True 153 | except Exception: 154 | print 'Config file', self.config 155 | print 'missing...' 156 | 157 | # record the config 158 | def __recordconfig(self): 159 | try: 160 | with open(self.config, "w") as f: 161 | f.write('recording='+str(self.recording_time)+'\n') 162 | f.write('pause="'+self.entry2.get_text()+'"\n') 163 | f.write('play="'+self.entry1.get_text()+'"\n') 164 | f.write('locale='+self.locale+'\n') 165 | f.write('hotword="'+self.entry3.get_text()+'"\n') 166 | f.write('threshold='+str(self.threshold)+'\n') 167 | f.write('key="'+self.entry0.get_text()+'"\n') 168 | f.close() 169 | except Exception: 170 | print 'Config file', self.config 171 | print 'Unable to write' 172 | 173 | # get the grid 174 | def getGrid(self): 175 | return self.grid 176 | 177 | def scale_moved(self,event): 178 | self.recording_time = int(self.scale.get_value()) 179 | self.__recordconfig() 180 | 181 | def threshold_changed(self,event): 182 | self.threshold = int(self.scale_threshold.get_value()) 183 | self.__recordconfig() 184 | 185 | def active_hotword(self,button,active): 186 | if button.get_active(): 187 | p = os.path.dirname(os.path.abspath(__file__)).strip('librairy') 188 | os.system('bash '+p + 'listen.sh &') 189 | else: 190 | if os.path.exists('/tmp/hotword'): 191 | os.remove('/tmp/hotword') 192 | 193 | def dictation_state(self,button,active): 194 | if button.get_active() : 195 | f=open('/tmp/g2u_dictation',"w") 196 | f.close() 197 | else: 198 | if os.path.exists('/tmp/g2u_dictation'): 199 | os.remove('/tmp/g2u_dictation') 200 | 201 | def on_clicked(self,button): 202 | self.__recordconfig() 203 | #self.w.destroy() 204 | 205 | # return a combobox to add to the toolbar 206 | def __get_combobox(self): 207 | """ 208 | @description: get the combobox of the toolbar 209 | 210 | @return: a Gtk.Combobox 211 | """ 212 | # the data in the model, of type string 213 | locale_path = os.path.dirname(os.path.abspath(__file__))+'/../i18n' 214 | listmodel = Gtk.ListStore(str) 215 | # append the data in the model 216 | selected=0 217 | i=0 218 | self.LANG = {} 219 | for language in os.listdir(locale_path): 220 | if os.path.isdir(locale_path+'/'+language+'/LC_MESSAGES'): 221 | listmodel.append([language]) 222 | self.LANG[i] = language 223 | if language == self.locale: 224 | selected = i 225 | i+=1 226 | 227 | # a combobox to see the data stored in the model 228 | combobox = Gtk.ComboBox(model=listmodel) 229 | combobox.set_tooltip_text(_("What language to choose")+'?') 230 | 231 | # a cellrenderer to render the text 232 | cell = Gtk.CellRendererText() 233 | 234 | # pack the cell into the beginning of the combobox, allocating 235 | # no more space than needed 236 | combobox.pack_start(cell, False) 237 | # associate a property ("text") of the cellrenderer (cell) to a column (column 0) 238 | # in the model used by the combobox 239 | combobox.add_attribute(cell, "text", 0) 240 | 241 | # the first row is the active one by default at the beginning 242 | combobox.set_active(selected) 243 | 244 | # connect the signal emitted when a row is selected to the callback function 245 | combobox.connect("changed", self.on_combochanged) 246 | return combobox 247 | 248 | def on_combochanged(self,combo): 249 | self.locale = str(self.LANG[combo.get_active()]) 250 | self.__recordconfig() 251 | -------------------------------------------------------------------------------- /librairy/basicCommands.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Gdk 5 | from subprocess import * 6 | from Googletts import tts 7 | import os, gettext, time, subprocess 8 | 9 | # Permet de faire appel aux fonctions basiques 10 | class basicCommands(): 11 | """ 12 | @description: Called when the user wants to start an internal command 13 | for the moment there is 3 internal commands: 14 | 15 | * time 16 | * clipboard 17 | * hour 18 | 19 | @param text 20 | name of the function to launch 21 | 22 | @param PID 23 | the program's pid to synchronize osd notification 24 | """ 25 | def __init__(self,text,PID): 26 | # suivant le paramètre reçu, on exécute une action 27 | self.pid = PID 28 | if text == _('time'): 29 | self.getTime() 30 | elif text == _('power'): 31 | self.getPower() 32 | elif text == _('clipboard'): 33 | self.read_clipboard() 34 | elif text == _('dictation mode'): 35 | f=open('/tmp/g2u_dictation',"w") 36 | f.close() 37 | elif text == _('exit dictation mode'): 38 | os.remove('/tmp/g2u_dictation') 39 | else: 40 | print "no action found" 41 | 42 | def read_clipboard(self): 43 | """ 44 | @description: A function to make google2ubuntu reads the selected 45 | text 46 | """ 47 | clipboard = Gtk.Clipboard.get(Gdk.SELECTION_PRIMARY) 48 | 49 | text = clipboard.wait_for_text() 50 | if text != None: 51 | text=text.replace("'",' ') 52 | print "read:", text 53 | tts(text) 54 | else: 55 | tts(_('Nothing in the clipboard')) 56 | 57 | def getTime(self): 58 | """ 59 | @description: a function that let google2ubuntu read and display 60 | the current timme 61 | """ 62 | var=time.strftime('%H:%M',time.localtime()) 63 | hour=var.split(':')[0] 64 | minute=var.split(':')[1] 65 | 66 | message = _('it is')+' '+hour+' '+_('hour')+' '+minute+' '+_('minute') 67 | os.system('echo "'+var+'" > /tmp/g2u_display_'+self.pid) 68 | print message 69 | tts(message) 70 | 71 | def getPower(self): 72 | """ 73 | @description: a function that let google2ubuntu read and display 74 | the current power state 75 | """ 76 | command = "acpi -b" 77 | process = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 78 | output,error = process.communicate() 79 | #parsing output 80 | if output.count('Battery') > 0: 81 | pcent = output.split(' ')[3] 82 | rtime = output.split(' ')[4] 83 | 84 | if output.count('Charging') > 0: 85 | message = _('Charging')+': '+pcent+'\n'+rtime+' '+_('before charging') 86 | else: 87 | message = _('Discharging')+': '+pcent+'\n'+rtime+' '+_('remaining') 88 | else: 89 | message = _('battery is not plugged') 90 | 91 | os.system('echo "'+message+'" > /tmp/g2u_display_'+self.pid) 92 | tts(message) 93 | -------------------------------------------------------------------------------- /librairy/externalWindow.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Notify 5 | from gi.repository import Gdk 6 | from gi.repository import Gio 7 | from os.path import expanduser 8 | import os, sys, subprocess, gettext, locale 9 | import xml.etree.ElementTree as ET 10 | 11 | class externalWindow(): 12 | def __init__(self,store,iter=None): 13 | self.grid = Gtk.Grid() 14 | self.grid.set_border_width(5) 15 | self.grid.set_row_spacing(5) 16 | self.grid.set_vexpand(True) 17 | self.grid.set_hexpand(True) 18 | self.grid.set_column_spacing(2) 19 | self.grid.set_column_homogeneous(False) 20 | label1 = Gtk.Label(_('key sentence')) 21 | label1.set_hexpand(True) 22 | label1.set_justify(Gtk.Justification.LEFT) 23 | label1.set_halign(Gtk.Align.START) 24 | label2 = Gtk.Label(_('your command')) 25 | label2.set_justify(Gtk.Justification.LEFT) 26 | label2.set_halign(Gtk.Align.START) 27 | ll = Gtk.Label() 28 | ll.set_vexpand(True) 29 | self.entry1 = Gtk.Entry() 30 | self.entry2 = Gtk.Entry() 31 | 32 | if iter is not None: 33 | self.entry1.set_text(store[iter][0]) 34 | self.entry2.set_text(store[iter][1]) 35 | 36 | button = Gtk.Button.new_from_stock(Gtk.STOCK_OK) 37 | button.connect("clicked",self.button_clicked,store,iter) 38 | button_cancel = Gtk.Button.new_from_stock(Gtk.STOCK_CANCEL) 39 | button_cancel.connect("clicked",self.do_destroy) 40 | 41 | self.grid.attach(label1,0,0,11,1) 42 | self.grid.attach(self.entry1,11,0,4,1) 43 | self.grid.attach(label2,0,1,11,1) 44 | self.grid.attach(self.entry2,11,1,4,1) 45 | self.grid.attach(ll,0,2,15,1) 46 | self.grid.attach(button_cancel,13,3,1,1) 47 | self.grid.attach(button,14,3,1,1) 48 | self.grid.show_all() 49 | 50 | def do_destroy(self,button): 51 | self.grid.destroy() 52 | 53 | def get_grid(self): 54 | return self.grid 55 | 56 | def button_clicked(self,button,store,iter): 57 | if iter is None: 58 | if self.entry1.get_text() is not '' and self.entry2.get_text() is not '': 59 | store.append([self.entry1.get_text(),self.entry2.get_text(),_('external'), ' ',' ']) 60 | self.saveTree(store) 61 | elif iter is not None: 62 | store[iter][0] = str(self.entry1.get_text()) 63 | store[iter][1] = str(self.entry2.get_text()) 64 | self.saveTree(store) 65 | 66 | self.grid.destroy() 67 | 68 | def saveTree(self,store): 69 | """ 70 | @description: save the treeview in the google2ubuntu.xml file 71 | 72 | @param: store 73 | the listStore attach to the treeview 74 | """ 75 | # if there is still an entry in the model 76 | config = expanduser('~') +'/.config/google2ubuntu/google2ubuntu.xml' 77 | try: 78 | if not os.path.exists(os.path.dirname(config)): 79 | os.makedirs(os.path.dirname(config)) 80 | 81 | root = ET.Element("data") 82 | if len(store) != 0: 83 | for i in range(len(store)): 84 | iter = store.get_iter(i) 85 | if store[iter][0] != '' and store[iter][1] != '': 86 | for s in store[iter][0].split('|'): 87 | s = s.lower() 88 | s = s.replace('*',' ') 89 | Type = ET.SubElement(root, "entry") 90 | Type.set("name",unicode(store[iter][2],"utf-8")) 91 | Key = ET.SubElement(Type, "key") 92 | Key.text = unicode(s,"utf-8") 93 | Command = ET.SubElement(Type, "command") 94 | Command.text = unicode(store[iter][1],"utf-8") 95 | Linker = ET.SubElement(Type, "linker") 96 | Spacebyplus = ET.SubElement(Type, "spacebyplus") 97 | if store[iter][3] is not None and store[iter][4] is not None: 98 | Linker.text = unicode(store[iter][3],"utf-8") 99 | Spacebyplus.text = unicode(store[iter][4],"utf-8") 100 | 101 | 102 | tree = ET.ElementTree(root).write(config,encoding="utf-8",xml_declaration=True) 103 | 104 | except IOError: 105 | print "Unable to write the file" 106 | -------------------------------------------------------------------------------- /librairy/interface.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from subprocess import * 4 | from os.path import expanduser 5 | import sys, subprocess, os, json, urllib2, unicodedata, time, gettext, locale 6 | 7 | from Googletts import tts 8 | from stringParser import stringParser 9 | from localehelper import LocaleHelper 10 | 11 | # La classe interface permet de lancer l'enregistrement et de communiquer 12 | # avec Google 13 | class interface(): 14 | """ 15 | @description: This class start the osd server, then start recording your voice before 16 | asking Google for the translation. Then, the result is parsing in order to 17 | execute the associated action 18 | """ 19 | def __init__(self, key): 20 | # make the program able to switch language 21 | self.p = os.path.dirname(os.path.abspath(__file__)).strip('librairy') 22 | 23 | localeHelper = LocaleHelper('en_EN') 24 | 25 | self.lang = localeHelper.getLocale() 26 | # this line can be remove if we modify the config/en_EN to config/en 27 | #self.lang = self.lang+'_'+self.lang.upper() 28 | 29 | # Initialisation des notifications 30 | self.PID = str(os.getpid()) 31 | os.system('rm /tmp/g2u_*_'+self.PID+' 2>/dev/null') 32 | os.system('python '+self.p+'librairy/osd.py '+self.PID+' &') 33 | 34 | # on joue un son pour signaler le démarrage 35 | os.system('play '+self.p+'resources/sound.wav &') 36 | os.system('> /tmp/g2u_start_'+self.PID) 37 | 38 | # On lance le script d'enregistrement pour acquérir la voix pdt 5s 39 | command =self.p+'record.sh ' + self.PID 40 | p = subprocess.Popen(command, stdout=subprocess.PIPE, stderr=subprocess.PIPE, shell=True) 41 | output,error = p.communicate() 42 | # return to 16kHz 43 | os.system(self.p+'convert.sh '+self.PID) 44 | self.sendto(key) 45 | 46 | def sendto(self, key): 47 | """ 48 | @function: Send the flac file to Google and start the parser 49 | """ 50 | # lecture du fichier audio 51 | filename='/tmp/voix_'+self.PID+'.flac' 52 | f = open(filename) 53 | data = f.read() 54 | f.close() 55 | 56 | # suppression du fichier audio 57 | if os.path.exists('/tmp/voix_'+self.PID+'.flac'): 58 | os.system('rm /tmp/voix_'+self.PID+'.flac') 59 | 60 | # fichier de configuration 61 | config = expanduser('~') + '/.config/google2ubuntu/google2ubuntu.xml' 62 | default = self.p +'config/'+self.lang+'/default.xml' 63 | 64 | if os.path.exists(config): 65 | config_file = config 66 | else: 67 | if os.path.exists(expanduser('~') +'/.config/google2ubuntu') == False: 68 | os.makedirs(expanduser('~') +'/.config/google2ubuntu') 69 | if os.path.exists(expanduser('~') +'/.config/google2ubuntu/modules') == False: 70 | os.system('cp -r '+self.p+'/modules '+expanduser('~') +'/.config/google2ubuntu') 71 | if os.path.exists(default) == False: 72 | default = self.p+'config/en_EN/default.xml' 73 | 74 | config_file = default 75 | 76 | print 'config file:', config_file 77 | print key 78 | try: 79 | # envoie une requête à Google 80 | #req = urllib2.Request('https://www.google.com/speech-api/v2/recognize?output=json&lang='+self.lang+'&key=AIzaSyBOti4mM-6x9WDnZIjIeyEU21OpBXqWBgw&client=chromium', data=data, headers={'Content-type': 'audio/x-flac; rate=16000'}) 81 | req = urllib2.Request('https://www.google.com/speech-api/v2/recognize?output=json&lang='+self.lang+'&key='+key+'&client=chromium', data=data, headers={'Content-type': 'audio/x-flac; rate=16000'}) 82 | # retour de la requête 83 | ret = urllib2.urlopen(req) 84 | response = ret.read() 85 | response = response.split('\n', 1)[1] 86 | text = response.split('"transcript":"',2)[1].split('"',2)[0] 87 | # parsing du retour 88 | #text=json.load(response) 89 | os.system('echo "'+text.encode("utf-8")+'" > /tmp/g2u_result_'+self.PID) 90 | 91 | # parsing du résultat pour trouver l'action 92 | sp = stringParser(text,config_file,self.PID) 93 | except Exception: 94 | message = _('unable to translate') 95 | os.system('echo "'+message+'" > /tmp/g2u_error_'+self.PID) 96 | sys.exit(1) 97 | -------------------------------------------------------------------------------- /librairy/internalWindow.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Notify 5 | from gi.repository import Gdk 6 | from gi.repository import Gio 7 | from os.path import expanduser 8 | import os, sys, subprocess, gettext, locale 9 | import xml.etree.ElementTree as ET 10 | 11 | class internalWindow(): 12 | def __init__(self,store,iter=None): 13 | self.grid = Gtk.Grid() 14 | self.grid.set_border_width(5) 15 | self.grid.set_row_spacing(5) 16 | self.grid.set_vexpand(True) 17 | self.grid.set_hexpand(True) 18 | self.grid.set_column_spacing(2) 19 | self.grid.set_column_homogeneous(False) 20 | self.grid.set_row_homogeneous(False) 21 | 22 | label1 = Gtk.Label(_('key sentence')) 23 | label1.set_justify(Gtk.Justification.LEFT) 24 | label1.set_halign(Gtk.Align.START) 25 | label1.set_hexpand(True) 26 | label2 = Gtk.Label(_('your command')) 27 | label2.set_justify(Gtk.Justification.LEFT) 28 | label2.set_halign(Gtk.Align.START) 29 | ll = Gtk.Label() 30 | ll.set_vexpand(True) 31 | self.entry1 = Gtk.Entry() 32 | if iter is not None: 33 | self.entry1.set_text(store[iter][0]) 34 | 35 | self.combo = self.__get_combobox(store,iter) 36 | button = Gtk.Button.new_from_stock(Gtk.STOCK_OK) 37 | button.connect("clicked",self.button_clicked,store,iter) 38 | button_cancel = Gtk.Button.new_from_stock(Gtk.STOCK_CANCEL) 39 | button_cancel.connect("clicked",self.do_destroy) 40 | 41 | 42 | self.grid.attach(label1,0,0,11,1) 43 | self.grid.attach(self.entry1,11,0,4,1) 44 | self.grid.attach(label2,0,1,11,1) 45 | self.grid.attach(self.combo,11,1,4,1) 46 | self.grid.attach(ll,0,2,15,1) 47 | self.grid.attach(button_cancel,13,3,1,1) 48 | self.grid.attach(button,14,3,1,1) 49 | self.grid.show_all() 50 | 51 | def do_destroy(self,button): 52 | self.grid.destroy() 53 | 54 | def get_grid(self): 55 | return self.grid 56 | 57 | def button_clicked(self,button,store,iter): 58 | if iter is None: 59 | if self.entry1.get_text() is not '': 60 | store.append([self.entry1.get_text(),str(self.dic[self.combo.get_active()]),_('internal'),' ',' ']) 61 | self.saveTree(store) 62 | else: 63 | store[iter][0] = str(self.entry1.get_text()) 64 | store[iter][1] = str(self.dic[self.combo.get_active()]) 65 | self.saveTree(store) 66 | 67 | self.grid.destroy() 68 | 69 | # return a combobox to add to the toolbar 70 | def __get_combobox(self,store,iter): 71 | """ 72 | @description: get the combobox of the toolbar 73 | 74 | @return: a Gtk.Combobox 75 | """ 76 | # the data in the model, of type string 77 | listmodel = Gtk.ListStore(str) 78 | # append the data in the model 79 | self.dic = {} 80 | self.dic[0] = _('time') 81 | listmodel.append([_('time')]) 82 | self.dic[1] = _('power') 83 | listmodel.append([_('power')]) 84 | self.dic[2] = _('clipboard') 85 | listmodel.append([_('clipboard')]) 86 | self.dic[3] = _('dictation mode') 87 | listmodel.append([_('dictation mode')]) 88 | self.dic[4] = _('exit dictation mode') 89 | listmodel.append([_('exit dictation mode')]) 90 | 91 | selected = 0 92 | if iter is not None: 93 | for i in range(len(self.dic)): 94 | if self.dic[i] == store[iter][1]: 95 | selected = i 96 | 97 | # a combobox to see the data stored in the model 98 | combobox = Gtk.ComboBox(model=listmodel) 99 | combobox.set_tooltip_text(_("Which internal command to choose")+'?') 100 | 101 | # a cellrenderer to render the text 102 | cell = Gtk.CellRendererText() 103 | 104 | # pack the cell into the beginning of the combobox, allocating 105 | # no more space than needed 106 | combobox.pack_start(cell, False) 107 | # associate a property ("text") of the cellrenderer (cell) to a column (column 0) 108 | # in the model used by the combobox 109 | combobox.add_attribute(cell, "text", 0) 110 | 111 | # the first row is the active one by default at the beginning 112 | combobox.set_active(selected) 113 | 114 | return combobox 115 | 116 | def saveTree(self,store): 117 | """ 118 | @description: save the treeview in the google2ubuntu.xml file 119 | 120 | @param: store 121 | the listStore attach to the treeview 122 | """ 123 | # if there is still an entry in the model 124 | config = expanduser('~') +'/.config/google2ubuntu/google2ubuntu.xml' 125 | try: 126 | if not os.path.exists(os.path.dirname(config)): 127 | os.makedirs(os.path.dirname(config)) 128 | 129 | root = ET.Element("data") 130 | if len(store) != 0: 131 | for i in range(len(store)): 132 | iter = store.get_iter(i) 133 | if store[iter][0] != '' and store[iter][1] != '': 134 | for s in store[iter][0].split('|'): 135 | s = s.lower() 136 | s = s.replace('*',' ') 137 | Type = ET.SubElement(root, "entry") 138 | Type.set("name",unicode(store[iter][2],"utf-8")) 139 | Key = ET.SubElement(Type, "key") 140 | Key.text = unicode(s,"utf-8") 141 | Command = ET.SubElement(Type, "command") 142 | Command.text = unicode(store[iter][1],"utf-8") 143 | Linker = ET.SubElement(Type, "linker") 144 | Spacebyplus = ET.SubElement(Type, "spacebyplus") 145 | if store[iter][3] is not None and store[iter][4] is not None: 146 | Linker.text = unicode(store[iter][3],"utf-8") 147 | Spacebyplus.text = unicode(store[iter][4],"utf-8") 148 | 149 | tree = ET.ElementTree(root).write(config,encoding="utf-8",xml_declaration=True) 150 | 151 | except IOError: 152 | print "Unable to write the file" 153 | -------------------------------------------------------------------------------- /librairy/localehelper.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from os.path import expanduser 4 | import locale 5 | import os 6 | 7 | RELATIVE_LOCALE_CONFIG_PATH = '/.config/google2ubuntu/google2ubuntu.conf' 8 | 9 | class LocaleHelper: 10 | def __init__(self, defaultLocale='en_EN', languageFolder=os.path.dirname(os.path.abspath(__file__)) + '/../i18n/'): 11 | systemLocale = locale.getlocale() 12 | 13 | self.__systemLocale = None 14 | 15 | if systemLocale is not None and len(systemLocale) > 0: 16 | if systemLocale[0] is not None and len(systemLocale[0]) > 0: 17 | self.__systemLocale = systemLocale[0] 18 | 19 | self.__languageFolder = languageFolder 20 | self.__defaultLocale = defaultLocale 21 | self.__localeConfPath = expanduser('~') + RELATIVE_LOCALE_CONFIG_PATH 22 | 23 | def __getSystemLocale(self): 24 | if self.__checkIfLocalePresent(self.__systemLocale): 25 | return self.__systemLocale 26 | else: 27 | fallback = self.__getLocaleFallbackValue(self.__systemLocale) 28 | if self.__checkIfLocalePresent(fallback): 29 | return fallback 30 | else: 31 | return self.__defaultLocale 32 | 33 | def __readSingleLine(self, filePath): 34 | fileHandle = None 35 | line = None 36 | try: 37 | fileHandle = open(filePath, 'r') 38 | line = fileHandle.readline().strip('\n') 39 | except: 40 | pass 41 | finally: 42 | if fileHandle: 43 | fileHandle.close() 44 | return line 45 | 46 | def __getLocaleConfigValue(self): 47 | fileHandle = None 48 | lc = None 49 | try: 50 | fileHandle = open(self.__localeConfPath, 'r') 51 | for ligne in fileHandle.readlines(): 52 | ligne = ligne.strip('\n') 53 | field=ligne.split('=') 54 | if field[0] == 'locale': 55 | lc = field[1] 56 | 57 | except: 58 | pass 59 | finally: 60 | if fileHandle: 61 | fileHandle.close() 62 | if self.__checkIfLocalePresent(lc): 63 | return lc 64 | else: 65 | return self.__getSystemLocale() 66 | 67 | def __getLocaleFallbackValue(self, lang): 68 | if lang is not None and lang != '': 69 | return self.__readSingleLine(self.__languageFolder + lang + '/fallback') 70 | return None 71 | 72 | def __checkIfLocalePresent(self, lang): 73 | if lang is not None: 74 | if lang.strip() != '' and os.path.isdir(self.__languageFolder + lang + '/LC_MESSAGES') == True: 75 | return True 76 | 77 | return False 78 | 79 | def getFormatedLocaleString(self, localeString, longFormat=True): 80 | if localeString is None: 81 | return None 82 | elif localeString.strip() == '': 83 | return None 84 | 85 | localeString = localeString.replace(' ', '') 86 | 87 | if '_' not in localeString and longFormat == True: 88 | localeString = localeString + '_' + localeString.upper() 89 | elif '_' in localeString and longFormat == False: 90 | localeString = localeString.split('_')[0] 91 | 92 | return localeString 93 | 94 | def getLocale(self, longFormat=True): 95 | return self.getFormatedLocaleString(self.__getLocaleConfigValue(), longFormat) 96 | -------------------------------------------------------------------------------- /librairy/moduleSelection.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Notify 5 | from gi.repository import Gdk 6 | from gi.repository import Gio 7 | from os.path import expanduser 8 | import os, sys, subprocess, gettext 9 | 10 | # gère l'apparition de la fenêtre de choix du module 11 | class moduleSelection(): 12 | """ 13 | @description: This class display an fileChooserDialog when the user 14 | wants to add a new module from the menu of the main window 15 | """ 16 | def __init__(self): 17 | w=Gtk.Window() 18 | dialog = Gtk.FileChooserDialog(_("Choose a file"), w,Gtk.FileChooserAction.OPEN,(Gtk.STOCK_CANCEL, Gtk.ResponseType.CANCEL,Gtk.STOCK_OPEN, Gtk.ResponseType.OK)) 19 | dialog.set_default_size(800, 400) 20 | 21 | response = dialog.run() 22 | self.module = '-1' 23 | if response == Gtk.ResponseType.OK: 24 | self.module=dialog.get_filename() 25 | elif response == Gtk.ResponseType.CANCEL: 26 | print("Cancel clicked") 27 | 28 | dialog.destroy() 29 | 30 | def getModule(self): 31 | """ 32 | @description: return the module selected 33 | 34 | @return: return the path to the executable of the module 35 | """ 36 | return self.module 37 | -------------------------------------------------------------------------------- /librairy/osd.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from gi.repository import Gtk 4 | from gi.repository import Gdk 5 | from gi.repository import Notify 6 | from os.path import expanduser 7 | from localehelper import LocaleHelper 8 | import time, os, gettext, sys, locale 9 | 10 | path = os.path.dirname(os.path.abspath(__file__)).strip('librairy') 11 | localeHelper = LocaleHelper() 12 | lang = localeHelper.getLocale() 13 | t=gettext.translation('google2ubuntu',path+'i18n/',languages=[lang]) 14 | t.install() 15 | 16 | #keep the old way for the moment 17 | #gettext.install('google2ubuntu',path+'/i18n/') 18 | RESULT = False 19 | path += 'resources' 20 | 21 | 22 | if len(sys.argv) >= 2: 23 | PID = sys.argv[1] 24 | # nom des fichiers 25 | start='/tmp/g2u_start_'+PID 26 | stop='/tmp/g2u_stop_'+PID 27 | result='/tmp/g2u_result_'+PID 28 | cmd='/tmp/g2u_cmd_'+PID 29 | error='/tmp/g2u_error_'+PID 30 | display='/tmp/g2u_display_'+PID 31 | 32 | 33 | # initialisation 34 | Notify.init("google2ubuntu") 35 | n = Notify.Notification.new('google2ubuntu',_('Ready'),path+"/icons.png") 36 | n.set_urgency(Notify.Urgency.CRITICAL) 37 | n.show() 38 | 39 | while os.path.exists(start) == False: 40 | n.update('google2ubuntu',_('Ready'), path+"/icons.png") 41 | n.show() 42 | time.sleep(0.5) 43 | 44 | i = 0 45 | delay=0.1 46 | while os.path.exists(stop) == False: 47 | if os.path.exists(error): 48 | f = open(error,"r") 49 | title = _('Error') 50 | body = f.readline().rstrip('\n') 51 | f.close 52 | n.update(title, body,icon = path+"/error.png") 53 | n.show() 54 | time.sleep(2) 55 | n.close() 56 | os.system('rm /tmp/g2u_*_'+PID+' 2>/dev/null') 57 | sys.exit(1) 58 | 59 | if os.path.exists(result) and RESULT == False: 60 | f = open(result,"r") 61 | title=_('Recognition result') 62 | body = f.readline().rstrip('\n') 63 | icon = path+"/icons.png" 64 | f.close() 65 | delay = 2 66 | RESULT = True 67 | elif os.path.exists(cmd) and RESULT == True: 68 | if os.path.exists(result): 69 | os.system('rm '+result) 70 | f = open(cmd,"r") 71 | title = _('Calling command') 72 | body = f.readline().rstrip('\n') 73 | icon = path+"/icons.png" 74 | delay = 2 75 | f.close() 76 | elif os.path.exists(display): 77 | f = open(display,"r") 78 | title = _('Information') 79 | body = f.readline().rstrip('\n') 80 | f.close 81 | icon = path+"/icons.png" 82 | delay=3 83 | else: 84 | title = _('Performing recording') 85 | body = _('Please speak') 86 | icon = path+"/Waiting/wait-"+str(i)+".png" 87 | 88 | n.update(title, body, icon) 89 | n.show() 90 | time.sleep(delay) 91 | i += 1; 92 | if i > 17: 93 | i = 0 94 | 95 | n.update("google2ubuntu",_('Done'),path+"/icons.png") 96 | n.show() 97 | time.sleep(1) 98 | n.close() 99 | os.system('rm /tmp/g2u_*_'+PID+' 2>/dev/null') 100 | -------------------------------------------------------------------------------- /librairy/stringParser.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from os.path import expanduser 4 | from workWithModule import workWithModule 5 | from basicCommands import basicCommands 6 | from Googletts import tts 7 | import xml.etree.ElementTree as ET 8 | import os, gettext, time, sys, subprocess 9 | 10 | # Permet d'exécuter la commande associée à un mot prononcé 11 | class stringParser(): 12 | """ 13 | @description: This class parses the text retrieve by Google in order 14 | to distinguish external commands, internal commands and modules 15 | """ 16 | def __init__(self,text,File,PID): 17 | # read configuration files 18 | self.pid=PID 19 | try: 20 | max = 0 21 | text=text.lower() 22 | tree = ET.parse(File) 23 | root = tree.getroot() 24 | tp = '' 25 | # si le mode dictée est activé 26 | if os.path.exists('/tmp/g2u_dictation'): 27 | for entry in root.findall('entry'): 28 | if entry.get('name') == _('internal') and entry.find('command').text == unicode(_('exit dictation mode'),"utf8"): 29 | score = 0 30 | Type=entry.get('name') 31 | Key=entry.find('key').text 32 | Command=entry.find('command').text 33 | key=Key.split(' ') 34 | for j in range(len(key)): 35 | score += text.count(key[j]) 36 | 37 | if score == len(key): 38 | do = Command 39 | tp = Type 40 | else: 41 | do = text 42 | else: 43 | for entry in root.findall('entry'): 44 | score = 0 45 | Type=entry.get('name') 46 | Key=entry.find('key').text 47 | Command=entry.find('command').text 48 | Linker = entry.find('linker').text 49 | Spacebyplus = entry.find('spacebyplus').text 50 | 51 | key=Key.split(' ') 52 | for j in range(len(key)): 53 | score += text.count(key[j]) 54 | 55 | if max < score: 56 | max = score 57 | do = Command 58 | tp = Type 59 | linker = Linker 60 | spacebyplus = Spacebyplus 61 | 62 | do = do.encode('utf8') 63 | tp = tp.encode('utf8') 64 | 65 | print 'key', tp 66 | print 'command', do 67 | 68 | os.system('echo "'+do+'" > /tmp/g2u_cmd_'+self.pid) 69 | if _('modules') in tp: 70 | # si on trouve le mot "modules", on instancie une classe workWithModule et on lui passe 71 | # le dossier ie weather, search,...; le nom du module ie weather.sh, search.sh et le texte prononcé 72 | linker = linker.encode('utf8') 73 | spacebyplus = spacebyplus.encode('utf8') 74 | wm = workWithModule(do,text,linker,spacebyplus,self.pid) 75 | elif _('internal') in tp: 76 | # on execute une commande intene, la commande est configurée 77 | # ainsi interne/batterie, on envoie batterie à la fonction 78 | b = basicCommands(do,self.pid) 79 | elif _('external') in tp: 80 | os.system(do+' &') 81 | else: 82 | os.system('xdotool type "'+do+'"') 83 | 84 | os.system('> /tmp/g2u_stop_'+self.pid) 85 | 86 | 87 | except Exception as e: 88 | message = _('Setup file missing') 89 | os.system('echo "'+message+'" > /tmp/g2u_error_'+self.pid) 90 | sys.exit(1) 91 | -------------------------------------------------------------------------------- /librairy/workWithModule.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from os.path import expanduser 4 | from subprocess import * 5 | from Googletts import tts 6 | import os, gettext, time, subprocess, unicodedata 7 | 8 | gettext.install('google2ubuntu',os.path.dirname(os.path.abspath(__file__))+'/i18n/') 9 | 10 | # Permet de faire appel aux modules 11 | class workWithModule(): 12 | """ 13 | @description: This class allows you to call external modules. If a call 14 | for an external module is detected by the parser then this class check 15 | the module's config file before extracting modules's parameter from the 16 | text you have pronounced 17 | """ 18 | def __init__(self,module_name,text,linker,plus,PID): 19 | self.pid = PID 20 | 21 | try: 22 | # on utilise un mot de liaison pour séparer l'appel du module 23 | # des arguments à lui envoyer 24 | # ex: Quelle est la météo à Paris 25 | # Quelle est la météo à Issy les moulineaux 26 | # 27 | # Le mot de liaison peut être " à " 28 | sentence=text.lower() 29 | # oblige to put this .encode('ASCII', 'ignore') for french 30 | print sentence 31 | sentence = unicodedata.normalize('NFKD', sentence) 32 | print sentence 33 | sentence=sentence.encode('ASCII', 'ignore') 34 | print sentence 35 | sentence=sentence.lower() 36 | 37 | if sentence.count(linker) > 0: 38 | param =(sentence.split(linker,1)[1]).encode("utf-8") 39 | 40 | # on regarde si l'utilisateur veut transformer les ' ' en + 41 | if plus == '1': 42 | param=param.replace(' ','+') 43 | print param 44 | # commande qui sera exécutée 45 | execute = expanduser('~')+'/.config/google2ubuntu/modules/'+module_name+' '+'"'+param+'" &' 46 | os.system(execute) 47 | else: 48 | message=_("you didn't say the linking word") 49 | os.system('echo "'+message+'" > /tmp/g2u_error_'+self.pid) 50 | 51 | except IOError: 52 | message = _('args file missing') 53 | os.system('echo "'+message+'" > /tmp/g2u_error_'+self.pid) 54 | sys.exit(1) 55 | -------------------------------------------------------------------------------- /listen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # Okay Google hotword activation script 3 | # Josh Chen, 14 Feb 2014 4 | # Feel free to modify as you need 5 | # configuration file 6 | CONFIGURATION="$HOME/.config/google2ubuntu/google2ubuntu.conf" 7 | BASEDIR=$(dirname $0) 8 | cd $BASEDIR 9 | 10 | # default recording time 11 | threshold=5 12 | 13 | > "/tmp/hotword" 14 | while [ -f "/tmp/hotword" ]; do 15 | # load the config every time, let the user setup the treshold and the hotword 16 | if [ -f "$CONFIGURATION" ]; 17 | then 18 | { 19 | # load the configuration 20 | . "$CONFIGURATION" 21 | 22 | # small security test 23 | if [ "$threshold" = "" ]; 24 | then 25 | threshold=5 26 | fi 27 | } 28 | fi 29 | 30 | # Initialize 31 | killall rec 2>/dev/null 32 | rm /tmp/pingvox.flac 2>/dev/null 33 | touch /tmp/pingvox.flac 34 | 35 | # If voice detected, record for 2.5s interval 36 | # Listen and record only when sound levels are over 17% (on razor optimal alsamixer settings seem to be 100 Internal mic, 28 Internal mic B) 37 | 38 | # >> MIC CONFIGURATION HERE << 39 | ( rec /tmp/pingvox.flac rate 16000 silence 1 0.1 "$threshold"% ) & pid=$! 40 | 41 | while [ "$(stat -c%s /tmp/pingvox.flac)" == "0" ]; do 42 | if [ ! -f "/tmp/hotword" ]; then 43 | { 44 | killall rec 45 | exit 0 46 | } 47 | fi 48 | done 49 | ( sleep 2s && kill -HUP $pid ) 2>/dev/null & watcher=$! 50 | wait $pid 2>/dev/null && pkill -HUP -P $watcher 51 | 52 | echo 53 | echo 'Voice detected, launching listener.py' 54 | 55 | # Call script that checks for hotword 56 | python listener.py 57 | wait 58 | 59 | done 60 | 61 | exit 0; 62 | -------------------------------------------------------------------------------- /listener.py: -------------------------------------------------------------------------------- 1 | # Okay Google hotword activation script 2 | # Josh Chen, 14 Feb 2014 3 | # Feel free to modify as you need 4 | 5 | #!/usr/bin/env python 6 | # -*- coding: utf-8 -*- 7 | from subprocess import * 8 | from os.path import expanduser 9 | import sys, subprocess, os, json, urllib2, unicodedata, time, gettext, locale, gettext 10 | 11 | p = os.path.dirname(os.path.abspath(__file__)) 12 | 13 | sys.path.append( p +'/librairy') 14 | from localehelper import LocaleHelper 15 | 16 | localeHelper = LocaleHelper() 17 | lang = localeHelper.getLocale() 18 | 19 | t=gettext.translation('google2ubuntu',p +'/i18n/',languages=[lang]) 20 | t.install() 21 | 22 | hotword = _('ok start') 23 | config_file = expanduser('~') + '/.config/google2ubuntu/google2ubuntu.conf' 24 | try: 25 | if os.path.exists(config_file): 26 | f=open(config_file,'r') 27 | for line in f.readlines(): 28 | line = line.strip('\n') 29 | field = line.split('=') 30 | if field[0] == 'hotword': 31 | hotword = field[1].replace('"','') 32 | f.close() 33 | except Exception: 34 | print "Error loading", config_file 35 | sys.exit(1) 36 | 37 | 38 | # lecture du fichier audio 39 | filename='/tmp/pingvox.flac' 40 | f = open(filename) 41 | data = f.read() 42 | f.close() 43 | 44 | try: 45 | # Send request to Google 46 | fail = 'req' 47 | req = urllib2.Request('https://www.google.com/speech-api/v1/recognize?xjerr=1&client=chromium&lang='+lang, data=data, headers={'Content-type': 'audio/x-flac; rate=16000'}) 48 | 49 | fail = 'ret' 50 | # Return request 51 | ret = urllib2.urlopen(req) 52 | 53 | # Google translate API sometimes returns lists of phrases. We'll join them all up into a single phrase again 54 | phrase = '' 55 | t = ret.read().split('\n') 56 | t.remove('') 57 | for i in t: 58 | s = json.loads(i) 59 | if len(s['hypotheses']) > 0: 60 | phrase = phrase + s['hypotheses'][0]['utterance'] + ' ' 61 | print "Recognition: "+phrase 62 | 63 | fail = 'parse' 64 | # Parse 65 | #text=json.loads(d)['hypotheses'][0]['utterance'] 66 | 67 | print "hotword:", hotword 68 | print "detected:", phrase 69 | if phrase.lower().count(hotword.lower()) > 0: 70 | os.system('python ' + p + '/google2ubuntu.py') 71 | 72 | except Exception: 73 | os.system('echo Fail:'+fail) # for debugging 74 | #message = _('unable to translate') 75 | if fail == 'req': 76 | message = _('Cannot connect to Google Translate') 77 | elif fail == 'parse': 78 | message = _('Phrase parsing failed') 79 | elif fail == 'ret': 80 | message = _('Error processing value returned by Google Translate') 81 | 82 | print message 83 | sys.exit(1) 84 | -------------------------------------------------------------------------------- /modules/google.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | CONTENU="$1" 3 | CONTENU=$(echo $CONTENU | sed "s/ /+/g") 4 | echo $CONTENU 5 | xdg-open http://www.google.com/search?q="$CONTENU" & 6 | 7 | exit 0 8 | -------------------------------------------------------------------------------- /modules/goto.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | 4 | import sys,os, re 5 | 6 | if len(sys.argv) >= 2: 7 | web = sys.argv[1] 8 | web = web.replace(' ','+') 9 | web = web.lower() 10 | 11 | url = 'www.'+web 12 | os.system('xdg-open '+url+' &') 13 | -------------------------------------------------------------------------------- /modules/meaning.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python 2 | # -*- coding: utf-8 -*- 3 | from subprocess import * 4 | from os.path import expanduser 5 | import sys, subprocess, os, json, unicodedata, time, locale 6 | from urllib2 import urlopen 7 | 8 | locale.setlocale(locale.LC_ALL, '') 9 | lang = locale.getdefaultlocale()[0] 10 | lang=lang.split('_')[0] 11 | 12 | sys.path.append('/usr/share/google2ubuntu/librairy') 13 | from Googletts import tts 14 | 15 | if len(sys.argv) >= 2: 16 | null = None 17 | keyword = sys.argv[1] 18 | #keyword = keyword.replace(' ','+') 19 | print keyword 20 | data = urlopen("http://www.google.com/dictionary/json?callback=dict_api.callbacks.id100&q="+keyword+"&sl="+lang+"&tl="+lang+"&restrict=pr%2Cde&client=te").read()[25:-1] 21 | 22 | d = eval('('+data+')') 23 | if d[1] == 200: 24 | result = d[0] 25 | 26 | if 'webDefinitions' in result: 27 | webd = result.get('webDefinitions')[0] 28 | entries = webd.get('entries') 29 | entry=entries[0] 30 | for term in entry.get('terms'): 31 | if term.get('type') == 'text': 32 | tts(term.get('text')) 33 | -------------------------------------------------------------------------------- /modules/weather.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | xdg-open "https://www.google.com/#q=weather+$1&hl=${LANG%%.*}&safe=off" & 4 | 5 | exit 0 6 | -------------------------------------------------------------------------------- /modules/wikipedia.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | CONTENU="$1" 3 | CONTENU=$(echo $CONTENU | sed "s/ /+/g") 4 | xdg-open http://en.wikipedia.org/w/index.php?search="$CONTENU" & 5 | 6 | exit 0 7 | -------------------------------------------------------------------------------- /modules/youtube.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | CONTENU="$1" 3 | CONTENU=$(echo $CONTENU | sed "s/ /+/g") 4 | echo $CONTENU 5 | xdg-open http://www.youtube.com/results?search_query="$CONTENU" & 6 | 7 | exit 0 8 | -------------------------------------------------------------------------------- /record.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | # configuration file 3 | CONFIGURATION="$HOME/.config/google2ubuntu/google2ubuntu.conf" 4 | 5 | # default recording time 6 | recording=5 7 | if [ -f "$CONFIGURATION" ]; 8 | then 9 | { 10 | # load the configuration 11 | . "$CONFIGURATION" 12 | 13 | # small security test 14 | if [ "$recording" = "" ]; 15 | then 16 | recording=5 17 | fi 18 | } 19 | fi 20 | 21 | # get the pid 22 | PID=$1 23 | # kill the previous instance of rec to cascade commands 24 | killall rec 2>/dev/null 25 | 26 | # record during fixed seconds 27 | ( rec -r 16000 -d /tmp/voix_$PID.flac ) & pid=$! 28 | ( sleep "$recording"s && kill -HUP $pid ) 2>/dev/null & watcher=$! 29 | wait $pid 2>/dev/null && pkill -HUP -P $watcher 30 | 31 | exit 0; 32 | -------------------------------------------------------------------------------- /resources/Waiting/wait-0.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-0.png -------------------------------------------------------------------------------- /resources/Waiting/wait-1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-1.png -------------------------------------------------------------------------------- /resources/Waiting/wait-10.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-10.png -------------------------------------------------------------------------------- /resources/Waiting/wait-11.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-11.png -------------------------------------------------------------------------------- /resources/Waiting/wait-12.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-12.png -------------------------------------------------------------------------------- /resources/Waiting/wait-13.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-13.png -------------------------------------------------------------------------------- /resources/Waiting/wait-14.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-14.png -------------------------------------------------------------------------------- /resources/Waiting/wait-15.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-15.png -------------------------------------------------------------------------------- /resources/Waiting/wait-16.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-16.png -------------------------------------------------------------------------------- /resources/Waiting/wait-17.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-17.png -------------------------------------------------------------------------------- /resources/Waiting/wait-2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-2.png -------------------------------------------------------------------------------- /resources/Waiting/wait-3.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-3.png -------------------------------------------------------------------------------- /resources/Waiting/wait-4.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-4.png -------------------------------------------------------------------------------- /resources/Waiting/wait-5.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-5.png -------------------------------------------------------------------------------- /resources/Waiting/wait-6.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-6.png -------------------------------------------------------------------------------- /resources/Waiting/wait-7.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-7.png -------------------------------------------------------------------------------- /resources/Waiting/wait-8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-8.png -------------------------------------------------------------------------------- /resources/Waiting/wait-9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/Waiting/wait-9.png -------------------------------------------------------------------------------- /resources/error.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/error.png -------------------------------------------------------------------------------- /resources/icons.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/icons.png -------------------------------------------------------------------------------- /resources/sound.wav: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/benoitfragit/google2ubuntu/fb58b7b71f9311155c214d29986273090fc24aa1/resources/sound.wav --------------------------------------------------------------------------------