Gettext support
This commit is contained in:
parent
d8881c4b16
commit
9bc83539d1
|
@ -36,6 +36,7 @@ set_path(DESKTOP_FILE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/applications" "Instal
|
|||
set_path(ICON_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/icons" "Installation directory for icons")
|
||||
set_path(INCLUDE_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/include" "Installation directory for C header files")
|
||||
set_path(LIB_INSTALL_DIR "${EXEC_INSTALL_PREFIX}/${LIBDIR_NAME}" "Installation directory for object code libraries")
|
||||
set_path(LOCALE_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/locale" "Installation directory for locale files")
|
||||
set_path(PLUGIN_INSTALL_DIR "${LIB_INSTALL_DIR}/dino/plugins" "Installation directory for dino plugin object code files")
|
||||
set_path(VAPI_INSTALL_DIR "${SHARE_INSTALL_PREFIX}/vala/vapi" "Installation directory for Vala API files")
|
||||
|
||||
|
|
18
cmake/FindGettext.cmake
Normal file
18
cmake/FindGettext.cmake
Normal file
|
@ -0,0 +1,18 @@
|
|||
find_program(XGETTEXT_EXECUTABLE xgettext)
|
||||
find_program(MSGMERGE_EXECUTABLE msgmerge)
|
||||
find_program(MSGFMT_EXECUTABLE msgfmt)
|
||||
find_program(MSGCAT_EXECUTABLE msgcat)
|
||||
|
||||
if(XGETTEXT_EXECUTABLE)
|
||||
execute_process(COMMAND ${XGETTEXT_EXECUTABLE} "--version"
|
||||
OUTPUT_VARIABLE GETTEXT_VERSION
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
string(REGEX REPLACE "xgettext \\(GNU gettext-tools\\) ([0-9\\.]*).*" "\\1" GETTEXT_VERSION "${GETTEXT_VERSION}")
|
||||
endif(XGETTEXT_EXECUTABLE)
|
||||
|
||||
include(FindPackageHandleStandardArgs)
|
||||
find_package_handle_standard_args(Gettext
|
||||
REQUIRED_VARS XGETTEXT_EXECUTABLE MSGMERGE_EXECUTABLE MSGFMT_EXECUTABLE MSGCAT_EXECUTABLE
|
||||
VERSION_VAR GETTEXT_VERSION)
|
||||
|
||||
set(GETTEXT_USE_FILE "${CMAKE_CURRENT_LIST_DIR}/UseGettext.cmake")
|
28
cmake/UseGettext.cmake
Normal file
28
cmake/UseGettext.cmake
Normal file
|
@ -0,0 +1,28 @@
|
|||
function(_gettext_mkdir_for_file file)
|
||||
get_filename_component(dir "${file}" DIRECTORY)
|
||||
file(MAKE_DIRECTORY "${dir}")
|
||||
endfunction()
|
||||
|
||||
function(gettext_compile project_name)
|
||||
cmake_parse_arguments(ARGS "" "MO_FILES_NAME;TARGET_NAME;SOURCE_DIR;PROJECT_NAME" "" ${ARGN})
|
||||
|
||||
if(NOT ARGS_SOURCE_DIR)
|
||||
set(ARGS_SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR})
|
||||
endif(NOT ARGS_SOURCE_DIR)
|
||||
file(STRINGS "${ARGS_SOURCE_DIR}/LINGUAS" LINGUAS)
|
||||
set(target_files)
|
||||
foreach(lang ${LINGUAS})
|
||||
set(source_file ${ARGS_SOURCE_DIR}/${lang}.po)
|
||||
set(target_file ${CMAKE_BINARY_DIR}/locale/${lang}/LC_MESSAGES/${project_name}.mo)
|
||||
_gettext_mkdir_for_file(${target_file})
|
||||
list(APPEND target_files ${target_file})
|
||||
add_custom_command(OUTPUT ${target_file} COMMAND ${MSGFMT_EXECUTABLE} -o ${target_file} ${source_file} DEPENDS ${source_file})
|
||||
install(FILES ${target_file} DESTINATION ${LOCALE_INSTALL_DIR}/${lang}/LC_MESSAGES)
|
||||
endforeach(lang)
|
||||
if(ARGS_MO_FILES_NAME)
|
||||
set(${ARGS_MO_FILES_NAME} ${target_files} PARENT_SCOPE)
|
||||
endif(ARGS_MO_FILES_NAME)
|
||||
if(ARGS_TARGET_NAME)
|
||||
add_custom_target(${ARGS_TARGET_NAME} DEPENDS ${target_files})
|
||||
endif(ARGS_TARGET_NAME)
|
||||
endfunction(gettext_compile)
|
|
@ -42,6 +42,7 @@ SOURCES
|
|||
src/service/util.vala
|
||||
|
||||
src/settings.vala
|
||||
src/util.vala
|
||||
CUSTOM_VAPIS
|
||||
"${CMAKE_BINARY_DIR}/exports/xmpp-vala.vapi"
|
||||
"${CMAKE_BINARY_DIR}/exports/qlite.vapi"
|
||||
|
@ -56,8 +57,17 @@ GENERATE_HEADER
|
|||
dino
|
||||
)
|
||||
|
||||
add_custom_command(OUTPUT "${CMAKE_BINARY_DIR}/exports/dino_i18n.h"
|
||||
COMMAND
|
||||
cp "${CMAKE_CURRENT_SOURCE_DIR}/src/dino_i18n.h" "${CMAKE_BINARY_DIR}/exports/dino_i18n.h"
|
||||
DEPENDS
|
||||
"${CMAKE_CURRENT_SOURCE_DIR}/src/dino_i18n.h"
|
||||
COMMENT
|
||||
Copy header file dino_i18n.h
|
||||
)
|
||||
|
||||
add_definitions(${VALA_CFLAGS} -DDINO_PLUGINS_SYSTEM_PLUGIN_DIR="${PLUGIN_INSTALL_DIR}" -DDINO_PLUGINS_SYSTEM_LIBDIR_NAME="${LIBDIR_NAME}")
|
||||
add_library(libdino SHARED ${LIBDINO_VALA_C})
|
||||
add_library(libdino SHARED ${LIBDINO_VALA_C} ${CMAKE_BINARY_DIR}/exports/dino_i18n.h)
|
||||
add_dependencies(libdino xmpp-vala-vapi qlite-vapi)
|
||||
target_link_libraries(libdino xmpp-vala qlite ${LIBDINO_PACKAGES} m)
|
||||
set_target_properties(libdino PROPERTIES PREFIX "" VERSION 0.0 SOVERSION 0)
|
||||
|
|
|
@ -7,6 +7,7 @@ public class Dino.Application : Gtk.Application {
|
|||
public Database db;
|
||||
public StreamInteractor stream_interaction;
|
||||
public Plugins.Registry plugin_registry = new Plugins.Registry();
|
||||
public SearchPathGenerator? search_path_generator { get; set; }
|
||||
|
||||
static string print_xmpp;
|
||||
|
||||
|
|
8
libdino/src/dino_i18n.h
Normal file
8
libdino/src/dino_i18n.h
Normal file
|
@ -0,0 +1,8 @@
|
|||
#ifndef __DINO_I18N_H__
|
||||
#define __DINO_I18N_H__
|
||||
|
||||
#include<libintl.h>
|
||||
|
||||
#define dino_gettext(String) ((char *) dgettext (GETTEXT_PACKAGE, String))
|
||||
|
||||
#endif
|
37
libdino/src/util.vala
Normal file
37
libdino/src/util.vala
Normal file
|
@ -0,0 +1,37 @@
|
|||
namespace Dino {
|
||||
|
||||
public class SearchPathGenerator {
|
||||
|
||||
public string? exec_path { get; private set; }
|
||||
|
||||
public SearchPathGenerator(string? exec_path) {
|
||||
this.exec_path = exec_path;
|
||||
}
|
||||
|
||||
public string get_locale_path(string gettext_package, string locale_install_dir) {
|
||||
string? locale_dir = null;
|
||||
if (Path.get_dirname(exec_path).contains("dino") || Path.get_dirname(exec_path) == "." || Path.get_dirname(exec_path).contains("build")) {
|
||||
string exec_locale = Path.build_filename(Path.get_dirname(exec_path), "locale");
|
||||
if (FileUtils.test(Path.build_filename(exec_locale, "en", "LC_MESSAGES", gettext_package + ".mo"), FileTest.IS_REGULAR)) {
|
||||
locale_dir = exec_locale;
|
||||
}
|
||||
}
|
||||
return locale_dir ?? locale_install_dir;
|
||||
}
|
||||
}
|
||||
|
||||
[CCode (cname = "dino_gettext", cheader_filename = "dino_i18n.h")]
|
||||
public static extern unowned string _(string s);
|
||||
|
||||
[CCode (cname = "bindtextdomain", cheader_filename = "libintl.h")]
|
||||
private static extern unowned string? bindtextdomain(string domainname, string? dirname);
|
||||
|
||||
[CCode (cname = "bind_textdomain_codeset", cheader_filename = "libintl.h")]
|
||||
private static extern unowned string? bind_textdomain_codeset(string domainname, string? codeset);
|
||||
|
||||
public static void internationalize(string gettext_package, string locales_dir) {
|
||||
Intl.bind_textdomain_codeset(gettext_package, "UTF-8");
|
||||
Intl.bindtextdomain(gettext_package, locales_dir);
|
||||
}
|
||||
|
||||
}
|
|
@ -1,3 +1,8 @@
|
|||
set(GETTEXT_PACKAGE "dino")
|
||||
find_package(Gettext)
|
||||
include(${GETTEXT_USE_FILE})
|
||||
gettext_compile(${GETTEXT_PACKAGE} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/po TARGET_NAME ${GETTEXT_PACKAGE}-translations)
|
||||
|
||||
find_packages(MAIN_PACKAGES REQUIRED
|
||||
Gee
|
||||
GLib>=2.38
|
||||
|
@ -106,9 +111,9 @@ GRESOURCES
|
|||
${MAIN_GRESOURCES_XML}
|
||||
)
|
||||
|
||||
add_definitions(${VALA_CFLAGS})
|
||||
add_definitions(${VALA_CFLAGS} -DGETTEXT_PACKAGE=\"${GETTEXT_PACKAGE}\" -DLOCALE_INSTALL_DIR=\"${LOCALE_INSTALL_DIR}\")
|
||||
add_executable(dino ${MAIN_VALA_C} ${MAIN_GRESOURCES_TARGET})
|
||||
add_dependencies(dino dino-vapi dino-gsettings-schema-compiled)
|
||||
add_dependencies(dino dino-vapi dino-gsettings-schema-compiled ${GETTEXT_PACKAGE}-translations)
|
||||
target_link_libraries(dino libdino ${MAIN_PACKAGES})
|
||||
|
||||
if(WIN32)
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="cancel_button">
|
||||
<property name="label">Cancel</property>
|
||||
<property name="label" translatable="yes">Cancel</property>
|
||||
<property name="sensitive">True</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -20,7 +20,7 @@
|
|||
<object class="GtkButton" id="ok_button">
|
||||
<property name="has_default">True</property>
|
||||
<property name="can_default">True</property>
|
||||
<property name="label">Add</property>
|
||||
<property name="label" translatable="yes">Add</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
|
@ -45,7 +45,7 @@
|
|||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Account</property>
|
||||
<property name="label" translatable="yes">Account</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -98,7 +98,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Alias</property>
|
||||
<property name="label" translatable="yes">Alias</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -126,7 +126,7 @@
|
|||
<child>
|
||||
<object class="GtkCheckButton" id="subscribe_checkbutton">
|
||||
<property name="active">True</property>
|
||||
<property name="label">Request presence updates</property>
|
||||
<property name="label" translatable="yes">Request presence updates</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
|
|
@ -8,7 +8,7 @@
|
|||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkButton" id="cancel_button">
|
||||
<property name="label">Cancel</property>
|
||||
<property name="label" translatable="yes">Cancel</property>
|
||||
<property name="sensitive">True</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -46,7 +46,7 @@
|
|||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Account</property>
|
||||
<property name="label" translatable="yes">Account</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -117,7 +117,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Nick</property>
|
||||
<property name="label" translatable="yes">Nick</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -144,7 +144,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Password</property>
|
||||
<property name="label" translatable="yes">Password</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -173,7 +173,7 @@
|
|||
<child>
|
||||
<object class="GtkCheckButton" id="autojoin_checkbutton">
|
||||
<property name="active">False</property>
|
||||
<property name="label">Join on startup</property>
|
||||
<property name="label" translatable="yes">Join on startup</property>
|
||||
<property name="xalign">0</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -186,7 +186,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel" id="alias_label">
|
||||
<property name="label">Alias</property>
|
||||
<property name="label" translatable="yes">Alias</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
|
|
@ -13,7 +13,7 @@
|
|||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Account</property>
|
||||
<property name="label" translatable="yes">Account</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
|
@ -117,7 +117,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Nick</property>
|
||||
<property name="label" translatable="yes">Nick</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
|
@ -169,7 +169,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Password</property>
|
||||
<property name="label" translatable="yes">Password</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
|
|
|
@ -18,7 +18,7 @@
|
|||
<child>
|
||||
<object class="GtkButton" id="ok_button">
|
||||
<property name="can_default">True</property>
|
||||
<property name="label">Save</property>
|
||||
<property name="label" translatable="yes">Save</property>
|
||||
<property name="sensitive">False</property>
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
|
@ -70,7 +70,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Password</property>
|
||||
<property name="label" translatable="yes">Password</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -99,7 +99,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Local alias</property>
|
||||
<property name="label" translatable="yes">Local alias</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
|
|
@ -6,7 +6,7 @@
|
|||
<property name="visible">True</property>
|
||||
<child type="titlebar">
|
||||
<object class="GtkHeaderBar">
|
||||
<property name="title">Accounts</property>
|
||||
<property name="title" translatable="yes">Accounts</property>
|
||||
<property name="show_close_button">True</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -160,7 +160,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Password</property>
|
||||
<property name="label" translatable="yes">Password</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
|
@ -214,7 +214,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkLabel">
|
||||
<property name="label">Local alias</property>
|
||||
<property name="label" translatable="yes">Local alias</property>
|
||||
<property name="xalign">1</property>
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
|
@ -303,7 +303,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkButton" id="no_accounts_add">
|
||||
<property name="label">Add an account</property>
|
||||
<property name="label" translatable="yes">Add an account</property>
|
||||
<property name="halign">center</property>
|
||||
<property name="visible">True</property>
|
||||
<style>
|
||||
|
|
|
@ -3,17 +3,17 @@
|
|||
<section>
|
||||
<item>
|
||||
<attribute name="action">app.accounts</attribute>
|
||||
<attribute name="label">Accounts</attribute>
|
||||
<attribute name="label" translatable="yes">Accounts</attribute>
|
||||
</item>
|
||||
<item>
|
||||
<attribute name="action">app.settings</attribute>
|
||||
<attribute name="label">Settings</attribute>
|
||||
<attribute name="label" translatable="yes">Settings</attribute>
|
||||
</item>
|
||||
</section>
|
||||
<section>
|
||||
<item>
|
||||
<attribute name="action">app.quit</attribute>
|
||||
<attribute name="label">Quit</attribute>
|
||||
<attribute name="label" translatable="yes">Quit</attribute>
|
||||
</item>
|
||||
</section>
|
||||
</menu>
|
||||
|
|
|
@ -5,7 +5,7 @@
|
|||
<property name="visible">True</property>
|
||||
<child type="titlebar">
|
||||
<object class="GtkHeaderBar">
|
||||
<property name="title">Preferences</property>
|
||||
<property name="title" translatable="yes">Preferences</property>
|
||||
<property name="show_close_button">True</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
|
@ -20,7 +20,7 @@
|
|||
<property name="visible">True</property>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="marker_checkbutton">
|
||||
<property name="label">Send typing notifications and message marker</property>
|
||||
<property name="label" translatable="yes">Send typing notifications and message marker</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
@ -32,7 +32,7 @@
|
|||
</child>
|
||||
<child>
|
||||
<object class="GtkCheckButton" id="emoji_checkbutton">
|
||||
<property name="label">Convert smileys to emojis</property>
|
||||
<property name="label" translatable="yes">Convert smileys to emojis</property>
|
||||
<property name="visible">True</property>
|
||||
</object>
|
||||
<packing>
|
||||
|
|
2
main/po/LINGUAS
Normal file
2
main/po/LINGUAS
Normal file
|
@ -0,0 +1,2 @@
|
|||
de
|
||||
en
|
20
main/po/POTFILES.in
Normal file
20
main/po/POTFILES.in
Normal file
|
@ -0,0 +1,20 @@
|
|||
data/add_conversation/add_contact_dialog.ui
|
||||
data/add_conversation/add_groupchat_dialog.ui
|
||||
data/add_conversation/conference_details_fragment.ui
|
||||
data/conversation_selector/view.ui
|
||||
data/manage_accounts/add_account_dialog.ui
|
||||
data/manage_accounts/dialog.ui
|
||||
data/menu_add.ui
|
||||
data/menu_app.ui
|
||||
data/menu_conversation.ui
|
||||
data/menu_encryption.ui
|
||||
data/settings_dialog.ui
|
||||
src/ui/add_conversation/conference/add_groupchat_dialog.vala
|
||||
src/ui/add_conversation/conference/dialog.vala
|
||||
src/ui/conversation_summary/message_item.vala
|
||||
src/ui/conversation_summary/view.vala
|
||||
src/ui/manage_accounts/add_account_dialog.vala
|
||||
src/ui/manage_accounts/dialog.vala
|
||||
src/ui/occupant_menu/view.vala
|
||||
src/ui/notifications.vala
|
||||
src/ui/unified_window.vala
|
196
main/po/de.po
Normal file
196
main/po/de.po
Normal file
|
@ -0,0 +1,196 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dino-0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-10 15:10+0200\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:11
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:11
|
||||
#: src/ui/add_conversation/conference/dialog.vala:15
|
||||
#: src/ui/manage_accounts/dialog.vala:151
|
||||
msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:23
|
||||
#: src/ui/add_conversation/conference/add_groupchat_dialog.vala:28
|
||||
msgid "Add"
|
||||
msgstr "Hinzufügen"
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:48
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:49
|
||||
#: data/add_conversation/conference_details_fragment.ui:16
|
||||
msgid "Account"
|
||||
msgstr "Konto"
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:101
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:189
|
||||
msgid "Alias"
|
||||
msgstr "Alias"
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:129
|
||||
msgid "Request presence updates"
|
||||
msgstr "Online-Status erbitten"
|
||||
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:120
|
||||
#: data/add_conversation/conference_details_fragment.ui:120
|
||||
msgid "Nick"
|
||||
msgstr "Nick"
|
||||
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:147
|
||||
#: data/add_conversation/conference_details_fragment.ui:172
|
||||
#: data/manage_accounts/add_account_dialog.ui:73
|
||||
#: data/manage_accounts/dialog.ui:163
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:176
|
||||
msgid "Join on startup"
|
||||
msgstr "Beim Start beitreten"
|
||||
|
||||
#: data/conversation_selector/view.ui:16
|
||||
msgid "Search"
|
||||
msgstr "Suchen"
|
||||
|
||||
#: data/manage_accounts/add_account_dialog.ui:21
|
||||
#: src/ui/add_conversation/conference/add_groupchat_dialog.vala:42
|
||||
msgid "Save"
|
||||
msgstr "Speichern"
|
||||
|
||||
#: data/manage_accounts/add_account_dialog.ui:102
|
||||
#: data/manage_accounts/dialog.ui:217
|
||||
msgid "Local alias"
|
||||
msgstr "Lokaler Alias"
|
||||
|
||||
#: data/manage_accounts/dialog.ui:9 data/menu_app.ui:6
|
||||
msgid "Accounts"
|
||||
msgstr "Konten"
|
||||
|
||||
#: data/manage_accounts/dialog.ui:306
|
||||
msgid "Add an account"
|
||||
msgstr "Konto hinzufügen"
|
||||
|
||||
#: data/menu_add.ui:6
|
||||
msgid "Start Chat"
|
||||
msgstr "Chat starten"
|
||||
|
||||
#: data/menu_add.ui:12 src/ui/add_conversation/conference/dialog.vala:26
|
||||
#: src/ui/unified_window.vala:145
|
||||
msgid "Join Conference"
|
||||
msgstr "Konferenz beitreten"
|
||||
|
||||
#: data/menu_app.ui:10
|
||||
msgid "Settings"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#: data/menu_app.ui:16
|
||||
msgid "Quit"
|
||||
msgstr "Beenden"
|
||||
|
||||
#: data/menu_conversation.ui:5
|
||||
msgid "Contact Details"
|
||||
msgstr "Kontakt Details"
|
||||
|
||||
#: data/menu_encryption.ui:14
|
||||
msgid "Unencrypted"
|
||||
msgstr "Unverschlüsselt"
|
||||
|
||||
#: data/settings_dialog.ui:8
|
||||
msgid "Preferences"
|
||||
msgstr "Einstellungen"
|
||||
|
||||
#: data/settings_dialog.ui:23
|
||||
msgid "Send typing notifications and message marker"
|
||||
msgstr "Sende Tippbenachrichtigung und Empfangsbestätigung"
|
||||
|
||||
#: data/settings_dialog.ui:35
|
||||
msgid "Convert smileys to emojis"
|
||||
msgstr "Smileys zu Emojis umwandeln"
|
||||
|
||||
#: src/ui/add_conversation/conference/dialog.vala:45
|
||||
msgid "Next"
|
||||
msgstr "Weiter"
|
||||
|
||||
#: src/ui/add_conversation/conference/dialog.vala:60
|
||||
msgid "Join"
|
||||
msgstr "Beitreten"
|
||||
|
||||
#: src/ui/conversation_summary/message_item.vala:107
|
||||
msgid "Just now"
|
||||
msgstr "Gerade eben"
|
||||
|
||||
#: src/ui/conversation_summary/view.vala:120
|
||||
msgid "is typing..."
|
||||
msgstr "tippt gerade..."
|
||||
|
||||
#: src/ui/conversation_summary/view.vala:122
|
||||
msgid "has stopped typing"
|
||||
msgstr "hat aufgehört zu tippen"
|
||||
|
||||
#: src/ui/manage_accounts/add_account_dialog.vala:21
|
||||
msgid "Add Account"
|
||||
msgstr "Konto hinzufügen"
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:150
|
||||
msgid "Select avatar"
|
||||
msgstr "Kontaktbild auswählen"
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:152
|
||||
msgid "Select"
|
||||
msgstr "Auswählen"
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:251
|
||||
msgid "Connecting..."
|
||||
msgstr "Verbinden..."
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:253
|
||||
msgid "Connected"
|
||||
msgstr "Verbunden"
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:255
|
||||
msgid "Disconnected"
|
||||
msgstr "Nicht verbunden"
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:278
|
||||
msgid "Wrong password"
|
||||
msgstr "Passwort falsch"
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:281
|
||||
#: src/ui/manage_accounts/dialog.vala:283
|
||||
msgid "Error"
|
||||
msgstr "Fehler"
|
||||
|
||||
#: src/ui/occupant_menu/view.vala:48
|
||||
msgid "Start private conversation"
|
||||
msgstr "Private Konversation beginnen"
|
||||
|
||||
#: src/ui/notifications.vala:59
|
||||
msgid "Subscription request"
|
||||
msgstr "Kontaktanfrage"
|
||||
|
||||
#: src/ui/notifications.vala:61
|
||||
msgid "Accept"
|
||||
msgstr "Annehmen"
|
||||
|
||||
#: src/ui/notifications.vala:74
|
||||
msgid "Deny"
|
||||
msgstr "Ablehnen"
|
||||
|
||||
#: src/ui/unified_window.vala:135
|
||||
msgid "No accounts active"
|
||||
msgstr "Keine Konten aktiv"
|
||||
|
||||
#: src/ui/unified_window.vala:136
|
||||
msgid "Manage accounts"
|
||||
msgstr "Konten verwalten"
|
||||
|
||||
#: src/ui/unified_window.vala:143
|
||||
msgid "No conversation active"
|
||||
msgstr "Keine Konversation aktiv"
|
||||
|
||||
#: src/ui/unified_window.vala:144
|
||||
msgid "Add Chat"
|
||||
msgstr "Chat hinzufügen"
|
205
main/po/dino.pot
Normal file
205
main/po/dino.pot
Normal file
|
@ -0,0 +1,205 @@
|
|||
# SOME DESCRIPTIVE TITLE.
|
||||
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
|
||||
# This file is distributed under the same license as the PACKAGE package.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PACKAGE VERSION\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-10 15:10+0200\n"
|
||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=CHARSET\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:11
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:11
|
||||
#: src/ui/add_conversation/conference/dialog.vala:15
|
||||
#: src/ui/manage_accounts/dialog.vala:151
|
||||
msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:23
|
||||
#: src/ui/add_conversation/conference/add_groupchat_dialog.vala:28
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:48
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:49
|
||||
#: data/add_conversation/conference_details_fragment.ui:16
|
||||
msgid "Account"
|
||||
msgstr ""
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:101
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:189
|
||||
msgid "Alias"
|
||||
msgstr ""
|
||||
|
||||
#: data/add_conversation/add_contact_dialog.ui:129
|
||||
msgid "Request presence updates"
|
||||
msgstr ""
|
||||
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:120
|
||||
#: data/add_conversation/conference_details_fragment.ui:120
|
||||
msgid "Nick"
|
||||
msgstr ""
|
||||
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:147
|
||||
#: data/add_conversation/conference_details_fragment.ui:172
|
||||
#: data/manage_accounts/add_account_dialog.ui:73
|
||||
#: data/manage_accounts/dialog.ui:163
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: data/add_conversation/add_groupchat_dialog.ui:176
|
||||
msgid "Join on startup"
|
||||
msgstr ""
|
||||
|
||||
#: data/conversation_selector/view.ui:16
|
||||
msgid "Search"
|
||||
msgstr ""
|
||||
|
||||
#: data/manage_accounts/add_account_dialog.ui:21
|
||||
#: src/ui/add_conversation/conference/add_groupchat_dialog.vala:42
|
||||
msgid "Save"
|
||||
msgstr ""
|
||||
|
||||
#: data/manage_accounts/add_account_dialog.ui:102
|
||||
#: data/manage_accounts/dialog.ui:217
|
||||
msgid "Local alias"
|
||||
msgstr ""
|
||||
|
||||
#: data/manage_accounts/dialog.ui:9 data/menu_app.ui:6
|
||||
msgid "Accounts"
|
||||
msgstr ""
|
||||
|
||||
#: data/manage_accounts/dialog.ui:306
|
||||
msgid "Add an account"
|
||||
msgstr ""
|
||||
|
||||
#: data/menu_add.ui:6
|
||||
msgid "Start Chat"
|
||||
msgstr ""
|
||||
|
||||
#: data/menu_add.ui:12 src/ui/add_conversation/conference/dialog.vala:26
|
||||
#: src/ui/unified_window.vala:145
|
||||
msgid "Join Conference"
|
||||
msgstr ""
|
||||
|
||||
#: data/menu_app.ui:10
|
||||
msgid "Settings"
|
||||
msgstr ""
|
||||
|
||||
#: data/menu_app.ui:16
|
||||
msgid "Quit"
|
||||
msgstr ""
|
||||
|
||||
#: data/menu_conversation.ui:5
|
||||
msgid "Contact Details"
|
||||
msgstr ""
|
||||
|
||||
#: data/menu_encryption.ui:14
|
||||
msgid "Unencrypted"
|
||||
msgstr ""
|
||||
|
||||
#: data/settings_dialog.ui:8
|
||||
msgid "Preferences"
|
||||
msgstr ""
|
||||
|
||||
#: data/settings_dialog.ui:23
|
||||
msgid "Send typing notifications and message marker"
|
||||
msgstr ""
|
||||
|
||||
#: data/settings_dialog.ui:35
|
||||
msgid "Convert smileys to emojis"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/add_conversation/conference/dialog.vala:45
|
||||
msgid "Next"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/add_conversation/conference/dialog.vala:60
|
||||
msgid "Join"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/conversation_summary/message_item.vala:107
|
||||
msgid "Just now"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/conversation_summary/view.vala:120
|
||||
msgid "is typing..."
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/conversation_summary/view.vala:122
|
||||
msgid "has stopped typing"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/manage_accounts/add_account_dialog.vala:21
|
||||
msgid "Add Account"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:150
|
||||
msgid "Select avatar"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:152
|
||||
msgid "Select"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:251
|
||||
msgid "Connecting..."
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:253
|
||||
msgid "Connected"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:255
|
||||
msgid "Disconnected"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:278
|
||||
msgid "Wrong password"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/manage_accounts/dialog.vala:281
|
||||
#: src/ui/manage_accounts/dialog.vala:283
|
||||
msgid "Error"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/occupant_menu/view.vala:48
|
||||
msgid "Start private conversation"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/notifications.vala:59
|
||||
msgid "Subscription request"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/notifications.vala:61
|
||||
msgid "Accept"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/notifications.vala:74
|
||||
msgid "Deny"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/unified_window.vala:135
|
||||
msgid "No accounts active"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/unified_window.vala:136
|
||||
msgid "Manage accounts"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/unified_window.vala:143
|
||||
msgid "No conversation active"
|
||||
msgstr ""
|
||||
|
||||
#: src/ui/unified_window.vala:144
|
||||
msgid "Add Chat"
|
||||
msgstr ""
|
9
main/po/en.po
Normal file
9
main/po/en.po
Normal file
|
@ -0,0 +1,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dino-0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-07 15:43+0200\n"
|
||||
"Language: en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
|
@ -1,20 +1,28 @@
|
|||
using Dino.Entities;
|
||||
using Dino.Ui;
|
||||
|
||||
extern const string GETTEXT_PACKAGE;
|
||||
extern const string LOCALE_INSTALL_DIR;
|
||||
|
||||
namespace Dino {
|
||||
|
||||
void main(string[] args) {
|
||||
|
||||
try{
|
||||
string? exec_path = args.length > 0 ? args[0] : null;
|
||||
SearchPathGenerator search_path_generator = new SearchPathGenerator(exec_path);
|
||||
if (exec_path != null && exec_path.contains(Path.DIR_SEPARATOR_S)) {
|
||||
string bindir = Path.get_dirname(exec_path);
|
||||
if (FileUtils.test(Path.build_filename(bindir, "gschemas.compiled"), FileTest.IS_REGULAR)) {
|
||||
Environment.set_variable("GSETTINGS_SCHEMA_DIR", Path.get_dirname(exec_path), false);
|
||||
}
|
||||
}
|
||||
Intl.textdomain(GETTEXT_PACKAGE);
|
||||
internationalize(GETTEXT_PACKAGE, search_path_generator.get_locale_path(GETTEXT_PACKAGE, LOCALE_INSTALL_DIR));
|
||||
|
||||
Plugins.Loader loader = new Plugins.Loader(exec_path);
|
||||
Gtk.init(ref args);
|
||||
Dino.Ui.Application app = new Dino.Ui.Application();
|
||||
Dino.Ui.Application app = new Dino.Ui.Application() { search_path_generator=search_path_generator };
|
||||
|
||||
app.add_main_option("plugin-paths", 0, 0, OptionArg.NONE, "Display plugin search paths and exit", null);
|
||||
app.handle_local_options.connect((options) => {
|
||||
|
|
|
@ -18,7 +18,7 @@ public class Dialog : Gtk.Dialog {
|
|||
|
||||
public Dialog(StreamInteractor stream_interactor) {
|
||||
Object(use_header_bar : 1);
|
||||
this.title = "Start Chat";
|
||||
this.title = _("Start Chat");
|
||||
this.modal = true;
|
||||
this.stream_interactor = stream_interactor;
|
||||
|
||||
|
@ -31,13 +31,13 @@ public class Dialog : Gtk.Dialog {
|
|||
header_bar.show_close_button = false;
|
||||
|
||||
Button cancel_button = new Button();
|
||||
cancel_button.set_label("Cancel");
|
||||
cancel_button.set_label(_("Cancel"));
|
||||
cancel_button.visible = true;
|
||||
header_bar.pack_start(cancel_button);
|
||||
|
||||
ok_button = new Button();
|
||||
ok_button.get_style_context().add_class("suggested-action");
|
||||
ok_button.label = "Start";
|
||||
ok_button.label = _("Start");
|
||||
ok_button.sensitive = false;
|
||||
ok_button.visible = true;
|
||||
header_bar.pack_end(ok_button);
|
||||
|
|
|
@ -25,7 +25,7 @@ protected class AddGroupchatDialog : Gtk.Dialog {
|
|||
public AddGroupchatDialog(StreamInteractor stream_interactor) {
|
||||
Object(use_header_bar : 1);
|
||||
this.stream_interactor = stream_interactor;
|
||||
ok_button.label = "Add";
|
||||
ok_button.label = _("Add");
|
||||
ok_button.get_style_context().add_class("suggested-action"); // TODO why doesn't it work in XML
|
||||
accounts_stack.set_visible_child_name("combobox");
|
||||
account_combobox.initialize(stream_interactor);
|
||||
|
@ -39,7 +39,7 @@ protected class AddGroupchatDialog : Gtk.Dialog {
|
|||
public AddGroupchatDialog.for_conference(StreamInteractor stream_interactor, Account account, Xmpp.Xep.Bookmarks.Conference conference) {
|
||||
this(stream_interactor);
|
||||
edit_confrence = conference;
|
||||
ok_button.label = "Save";
|
||||
ok_button.label = _("Save");
|
||||
ok_button.sensitive = true;
|
||||
accounts_stack.set_visible_child_name("label");
|
||||
account_label.label = account.bare_jid.to_string();
|
||||
|
|
|
@ -12,7 +12,7 @@ public class Dialog : Gtk.Dialog {
|
|||
private Stack stack = new Stack();
|
||||
private Button cancel_button;
|
||||
private Button ok_button;
|
||||
private Label cancel_label = new Label("Cancel") {visible=true};
|
||||
private Label cancel_label = new Label(_("Cancel")) {visible=true};
|
||||
private Image cancel_image = new Image.from_icon_name("go-previous-symbolic", IconSize.MENU) {visible=true};
|
||||
|
||||
private SelectJidFragment select_fragment;
|
||||
|
@ -23,7 +23,7 @@ public class Dialog : Gtk.Dialog {
|
|||
|
||||
public Dialog(StreamInteractor stream_interactor) {
|
||||
Object(use_header_bar : 1);
|
||||
this.title = "Join Conference";
|
||||
this.title = _("Join Conference");
|
||||
this.modal = true;
|
||||
this.stream_interactor = stream_interactor;
|
||||
|
||||
|
@ -42,7 +42,7 @@ public class Dialog : Gtk.Dialog {
|
|||
cancel_button.add(cancel_label);
|
||||
cancel_button.clicked.disconnect(show_jid_add_view);
|
||||
cancel_button.clicked.connect(on_cancel);
|
||||
ok_button.label = "Next";
|
||||
ok_button.label = _("Next");
|
||||
ok_button.sensitive = select_fragment.done;
|
||||
ok_button.clicked.disconnect(on_ok_button_clicked);
|
||||
ok_button.clicked.connect(on_next_button_clicked);
|
||||
|
@ -57,7 +57,7 @@ public class Dialog : Gtk.Dialog {
|
|||
cancel_button.add(cancel_image);
|
||||
cancel_button.clicked.disconnect(on_cancel);
|
||||
cancel_button.clicked.connect(show_jid_add_view);
|
||||
ok_button.label = "Join";
|
||||
ok_button.label = _("Join");
|
||||
ok_button.sensitive = details_fragment.done;
|
||||
ok_button.clicked.disconnect(on_next_button_clicked);
|
||||
ok_button.clicked.connect(on_ok_button_clicked);
|
||||
|
|
|
@ -104,7 +104,7 @@ public class MessageItem : Grid, ConversationItem {
|
|||
} else if (timespan > TimeSpan.MINUTE) {
|
||||
return (timespan / TimeSpan.MINUTE).to_string() + " min ago";
|
||||
} else {
|
||||
return "Just now";
|
||||
return _("Just now");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -117,9 +117,9 @@ public class View : Box {
|
|||
if (state_ != null) {
|
||||
if (state_ == Xep.ChatStateNotifications.STATE_COMPOSING || state_ == Xep.ChatStateNotifications.STATE_PAUSED) {
|
||||
if (state_ == Xep.ChatStateNotifications.STATE_COMPOSING) {
|
||||
typing_status = new StatusItem(stream_interactor, conversation, "is typing...");
|
||||
typing_status = new StatusItem(stream_interactor, conversation, _("is typing..."));
|
||||
} else if (state_ == Xep.ChatStateNotifications.STATE_PAUSED) {
|
||||
typing_status = new StatusItem(stream_interactor, conversation, "has stoped typing");
|
||||
typing_status = new StatusItem(stream_interactor, conversation, _("has stopped typing"));
|
||||
}
|
||||
main.add(typing_status);
|
||||
}
|
||||
|
|
|
@ -18,7 +18,7 @@ public class AddAccountDialog : Gtk.Dialog {
|
|||
|
||||
public AddAccountDialog(StreamInteractor stream_interactor) {
|
||||
Object(use_header_bar : 1);
|
||||
this.title = "Add Account";
|
||||
this.title = _("Add Account");
|
||||
|
||||
cancel_button.clicked.connect(() => { close(); });
|
||||
ok_button.clicked.connect(on_ok_button_clicked);
|
||||
|
|
|
@ -147,9 +147,9 @@ public class Dialog : Gtk.Window {
|
|||
|
||||
private void on_image_button_clicked() {
|
||||
FileChooserDialog chooser = new FileChooserDialog (
|
||||
"Select avatar", this, FileChooserAction.OPEN,
|
||||
"Cancel", ResponseType.CANCEL,
|
||||
"Select", ResponseType.ACCEPT);
|
||||
_("Select avatar"), this, FileChooserAction.OPEN,
|
||||
_("Cancel"), ResponseType.CANCEL,
|
||||
_("Select"), ResponseType.ACCEPT);
|
||||
FileFilter filter = new FileFilter();
|
||||
filter.add_mime_type("image/*");
|
||||
chooser.set_filter(filter);
|
||||
|
@ -248,11 +248,11 @@ public class Dialog : Gtk.Window {
|
|||
ConnectionManager.ConnectionState state = stream_interactor.connection_manager.get_state(account);
|
||||
switch (state) {
|
||||
case ConnectionManager.ConnectionState.CONNECTING:
|
||||
state_label.label = "Connecting..."; break;
|
||||
state_label.label = _("Connecting..."); break;
|
||||
case ConnectionManager.ConnectionState.CONNECTED:
|
||||
state_label.label = "Connected"; break;
|
||||
state_label.label = _("Connected"); break;
|
||||
case ConnectionManager.ConnectionState.DISCONNECTED:
|
||||
state_label.label = "Disconnected"; break;
|
||||
state_label.label = _("Disconnected"); break;
|
||||
}
|
||||
state_label.get_style_context().remove_class("is_error");
|
||||
}
|
||||
|
@ -275,12 +275,12 @@ public class Dialog : Gtk.Window {
|
|||
private string get_connection_error_description(ConnectionManager.ConnectionError error) {
|
||||
switch (error.source) {
|
||||
case ConnectionManager.ConnectionError.Source.SASL:
|
||||
return "Wrong password";
|
||||
return _("Wrong password");
|
||||
}
|
||||
if (error.identifier != null) {
|
||||
return "Error" + ": " + error.identifier;
|
||||
return _("Error") + ": " + error.identifier;
|
||||
} else {
|
||||
return "Error";
|
||||
return _("Error");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -56,9 +56,9 @@ public class Notifications : Object {
|
|||
}
|
||||
|
||||
private void on_received_subscription_request(Jid jid, Account account) {
|
||||
Notify.Notification notification = new Notify.Notification("Subscription request", jid.bare_jid.to_string(), null);
|
||||
Notify.Notification notification = new Notify.Notification(_("Subscription request"), jid.bare_jid.to_string(), null);
|
||||
notification.set_image_from_pixbuf((new AvatarGenerator(40, 40)).draw_jid(stream_interactor, jid, account));
|
||||
notification.add_action("accept", "Accept", () => {
|
||||
notification.add_action("accept", _("Accept"), () => {
|
||||
stream_interactor.get_module(PresenceManager.IDENTITY).approve_subscription(account, jid);
|
||||
|
||||
if (stream_interactor.get_module(RosterManager.IDENTITY).get_roster_item(account, jid) == null) {
|
||||
|
@ -71,7 +71,7 @@ public class Notifications : Object {
|
|||
notification.close();
|
||||
} catch (Error error) { }
|
||||
});
|
||||
notification.add_action("deny", "Deny", () => {
|
||||
notification.add_action("deny", _("Deny"), () => {
|
||||
stream_interactor.get_module(PresenceManager.IDENTITY).deny_subscription(account, jid);
|
||||
try {
|
||||
notification.close();
|
||||
|
|
|
@ -45,7 +45,7 @@ public class View : Popover {
|
|||
Button header_button = new Button() { relief=ReliefStyle.NONE, visible=true };
|
||||
header_button.add(header_box);
|
||||
|
||||
ModelButton private_button = new ModelButton() { active=true, text="Start private conversation", visible=true };
|
||||
ModelButton private_button = new ModelButton() { active=true, text=_("Start private conversation"), visible=true };
|
||||
|
||||
Box outer_box = new Box(Orientation.VERTICAL, 5) { margin=10, visible=true };
|
||||
outer_box.add(header_button);
|
||||
|
|
|
@ -132,17 +132,17 @@ public class UnifiedWindow : Window {
|
|||
|
||||
public class NoAccountsPlaceholder : UnifiedWindowPlaceholder {
|
||||
public NoAccountsPlaceholder() {
|
||||
label.label = "No accounts active";
|
||||
primary_button.label = "Manage accounts";
|
||||
label.label = _("No accounts active");
|
||||
primary_button.label = _("Manage accounts");
|
||||
secondary_button.visible = false;
|
||||
}
|
||||
}
|
||||
|
||||
public class NoConversationsPlaceholder : UnifiedWindowPlaceholder {
|
||||
public NoConversationsPlaceholder() {
|
||||
label.label = "No conversation active";
|
||||
primary_button.label = "Add Chat";
|
||||
secondary_button.label = "Join Conference";
|
||||
label.label = _("No conversation active");
|
||||
primary_button.label = _("Add Chat");
|
||||
secondary_button.label = _("Join Conference");
|
||||
secondary_button.visible = true;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -1,3 +1,8 @@
|
|||
set(GETTEXT_PACKAGE "dino-omemo")
|
||||
find_package(Gettext)
|
||||
include(${GETTEXT_USE_FILE})
|
||||
gettext_compile(${GETTEXT_PACKAGE} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/po TARGET_NAME ${GETTEXT_PACKAGE}-translations)
|
||||
|
||||
find_packages(OMEMO_PACKAGES REQUIRED
|
||||
Gee
|
||||
GLib
|
||||
|
@ -31,9 +36,9 @@ PACKAGES
|
|||
${OMEMO_PACKAGES}
|
||||
)
|
||||
|
||||
add_definitions(${VALA_CFLAGS})
|
||||
add_definitions(${VALA_CFLAGS} -DGETTEXT_PACKAGE=\"${GETTEXT_PACKAGE}\" -DLOCALE_INSTALL_DIR=\"${LOCALE_INSTALL_DIR}\")
|
||||
add_library(omemo SHARED ${OMEMO_VALA_C})
|
||||
add_dependencies(omemo dino-vapi signal-protocol-vapi)
|
||||
add_dependencies(omemo dino-vapi signal-protocol-vapi ${GETTEXT_PACKAGE}-translations)
|
||||
target_link_libraries(omemo libdino signal-protocol-vala ${OMEMO_PACKAGES})
|
||||
set_target_properties(omemo PROPERTIES PREFIX "")
|
||||
set_target_properties(omemo PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/plugins/)
|
||||
|
|
2
plugins/omemo/po/LINGUAS
Normal file
2
plugins/omemo/po/LINGUAS
Normal file
|
@ -0,0 +1,2 @@
|
|||
de
|
||||
en
|
1
plugins/omemo/po/POTFILES.in
Normal file
1
plugins/omemo/po/POTFILES.in
Normal file
|
@ -0,0 +1 @@
|
|||
src/account_settings_widget.vala
|
22
plugins/omemo/po/de.po
Normal file
22
plugins/omemo/po/de.po
Normal file
|
@ -0,0 +1,22 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dino-omemo-0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-07 15:43+0200\n"
|
||||
"Language: en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: src/account_settings_widget.vala:35 src/account_settings_widget.vala:52
|
||||
#: src/account_settings_widget.vala:55
|
||||
msgid "Own fingerprint"
|
||||
msgstr "Eigener Fingerabdruck"
|
||||
|
||||
#: src/account_settings_widget.vala:35
|
||||
msgid "Will be generated on first connect"
|
||||
msgstr "Wird beim ersten Verbinden erzeugt"
|
||||
|
||||
#: src/account_settings_widget.vala:55
|
||||
msgid "Database error"
|
||||
msgstr "Datenbank Fehler"
|
22
plugins/omemo/po/dino-omemo.pot
Normal file
22
plugins/omemo/po/dino-omemo.pot
Normal file
|
@ -0,0 +1,22 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dino-omemo-0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-07 15:43+0200\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: src/account_settings_widget.vala:35 src/account_settings_widget.vala:52
|
||||
#: src/account_settings_widget.vala:55
|
||||
msgid "Own fingerprint"
|
||||
msgstr ""
|
||||
|
||||
#: src/account_settings_widget.vala:35
|
||||
msgid "Will be generated on first connect"
|
||||
msgstr ""
|
||||
|
||||
#: src/account_settings_widget.vala:55
|
||||
msgid "Database error"
|
||||
msgstr ""
|
9
plugins/omemo/po/en.po
Normal file
9
plugins/omemo/po/en.po
Normal file
|
@ -0,0 +1,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dino-omemo-0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-07 15:43+0200\n"
|
||||
"Language: en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
|
@ -32,7 +32,7 @@ public class AccountSettingWidget : Plugins.AccountSettingsWidget, Box {
|
|||
try {
|
||||
Qlite.Row? row = plugin.db.identity.row_with(plugin.db.identity.account_id, account.id).inner;
|
||||
if (row == null) {
|
||||
fingerprint.set_markup(@"Own fingerprint\n<span font='8'>Will be generated on first connect</span>");
|
||||
fingerprint.set_markup("%s\n<span font='8'>%s</span>".printf(_("Own fingerprint"), _("Will be generated on first connect")));
|
||||
} else {
|
||||
uint8[] arr = Base64.decode(row[plugin.db.identity.identity_key_public_base64]);
|
||||
arr = arr[1:arr.length];
|
||||
|
@ -49,10 +49,10 @@ public class AccountSettingWidget : Plugins.AccountSettingsWidget, Box {
|
|||
}
|
||||
}
|
||||
}
|
||||
fingerprint.set_markup(@"Own fingerprint\n<span font_family='monospace' font='8'>$res</span>");
|
||||
fingerprint.set_markup("%s\n<span font_family='monospace' font='8'>%s</span>".printf(_("Own fingerprint"), res));
|
||||
}
|
||||
} catch (Qlite.DatabaseError e) {
|
||||
fingerprint.set_markup(@"Own fingerprint\n<span font='8'>Database error</span>");
|
||||
fingerprint.set_markup("%s\n<span font='8'>%s</span>".printf(_("Own fingerprint"), _("Database error")));
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1,3 +1,6 @@
|
|||
extern const string GETTEXT_PACKAGE;
|
||||
extern const string LOCALE_INSTALL_DIR;
|
||||
|
||||
namespace Dino.Plugins.Omemo {
|
||||
|
||||
public class Plugin : RootInterface, Object {
|
||||
|
@ -22,6 +25,8 @@ public class Plugin : RootInterface, Object {
|
|||
list.add(new StreamModule());
|
||||
});
|
||||
Manager.start(this.app.stream_interaction, db);
|
||||
|
||||
internationalize(GETTEXT_PACKAGE, app.search_path_generator.get_locale_path(GETTEXT_PACKAGE, LOCALE_INSTALL_DIR));
|
||||
} catch (Error e) {
|
||||
print(@"Error initializing OMEMO: $(e.message)\n");
|
||||
}
|
||||
|
|
|
@ -1,3 +1,9 @@
|
|||
set(GETTEXT_PACKAGE "dino-openpgp")
|
||||
find_package(Gettext)
|
||||
include(${GETTEXT_USE_FILE})
|
||||
gettext_compile(${GETTEXT_PACKAGE} SOURCE_DIR ${CMAKE_CURRENT_SOURCE_DIR}/po TARGET_NAME ${GETTEXT_PACKAGE}-translations)
|
||||
|
||||
|
||||
find_packages(OPENPGP_PACKAGES REQUIRED
|
||||
Gee
|
||||
GLib>=2.38
|
||||
|
@ -42,9 +48,9 @@ GRESOURCES
|
|||
${OPENPGP_GRESOURCES_XML}
|
||||
)
|
||||
|
||||
add_definitions(${VALA_CFLAGS})
|
||||
add_definitions(${VALA_CFLAGS} -DGETTEXT_PACKAGE=\"${GETTEXT_PACKAGE}\" -DLOCALE_INSTALL_DIR=\"${LOCALE_INSTALL_DIR}\")
|
||||
add_library(openpgp SHARED ${OPENPGP_VALA_C} ${OPENPGP_GRESOURCES_TARGET})
|
||||
add_dependencies(openpgp dino-vapi gpgme-vapi)
|
||||
add_dependencies(openpgp dino-vapi gpgme-vapi ${GETTEXT_PACKAGE}-translations)
|
||||
target_link_libraries(openpgp libdino gpgme-vala ${OPENPGP_PACKAGES})
|
||||
set_target_properties(openpgp PROPERTIES PREFIX "")
|
||||
set_target_properties(openpgp PROPERTIES LIBRARY_OUTPUT_DIRECTORY ${CMAKE_BINARY_DIR}/plugins/)
|
||||
|
|
2
plugins/openpgp/po/LINGUAS
Normal file
2
plugins/openpgp/po/LINGUAS
Normal file
|
@ -0,0 +1,2 @@
|
|||
de
|
||||
en
|
1
plugins/openpgp/po/POTFILES.in
Normal file
1
plugins/openpgp/po/POTFILES.in
Normal file
|
@ -0,0 +1 @@
|
|||
src/account_settings_widget.vala
|
34
plugins/openpgp/po/de.po
Normal file
34
plugins/openpgp/po/de.po
Normal file
|
@ -0,0 +1,34 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dino-openpgp-0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-07 15:43+0200\n"
|
||||
"Language: de\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: src/account_settings_widget.vala:74 src/account_settings_widget.vala:80
|
||||
#: src/account_settings_widget.vala:108
|
||||
msgid "Key publishing disabled"
|
||||
msgstr "Schlüsselveröffentlichung deaktiviert"
|
||||
|
||||
#: src/account_settings_widget.vala:74
|
||||
msgid "No keys available. Generate one!"
|
||||
msgstr "Keine Schlüssel vorhanden. Erzeuge einen!"
|
||||
|
||||
#: src/account_settings_widget.vala:80
|
||||
msgid "Select key"
|
||||
msgstr "Wähle Schlüssel"
|
||||
|
||||
#: src/account_settings_widget.vala:97
|
||||
msgid "Loading..."
|
||||
msgstr "Lade..."
|
||||
|
||||
#: src/account_settings_widget.vala:97
|
||||
msgid "Querying GnuPG"
|
||||
msgstr "Frage GnuPG ab"
|
||||
|
||||
#: src/account_settings_widget.vala:108
|
||||
msgid "Error in GnuPG"
|
||||
msgstr "Fehler in GnuPG"
|
34
plugins/openpgp/po/dino-openpgp.pot
Normal file
34
plugins/openpgp/po/dino-openpgp.pot
Normal file
|
@ -0,0 +1,34 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dino-openpgp-0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-07 15:43+0200\n"
|
||||
"Language: \n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
|
||||
#: src/account_settings_widget.vala:74 src/account_settings_widget.vala:80
|
||||
#: src/account_settings_widget.vala:108
|
||||
msgid "Key publishing disabled"
|
||||
msgstr ""
|
||||
|
||||
#: src/account_settings_widget.vala:74
|
||||
msgid "No keys available. Generate one!"
|
||||
msgstr ""
|
||||
|
||||
#: src/account_settings_widget.vala:80
|
||||
msgid "Select key"
|
||||
msgstr ""
|
||||
|
||||
#: src/account_settings_widget.vala:97
|
||||
msgid "Loading..."
|
||||
msgstr ""
|
||||
|
||||
#: src/account_settings_widget.vala:97
|
||||
msgid "Querying GnuPG"
|
||||
msgstr ""
|
||||
|
||||
#: src/account_settings_widget.vala:108
|
||||
msgid "Error in GnuPG"
|
||||
msgstr ""
|
9
plugins/openpgp/po/en.po
Normal file
9
plugins/openpgp/po/en.po
Normal file
|
@ -0,0 +1,9 @@
|
|||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: dino-openpgp-0.0\n"
|
||||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2017-04-07 15:43+0200\n"
|
||||
"Language: en\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
|
@ -71,13 +71,13 @@ private class AccountSettingsWidget : Stack, Plugins.AccountSettingsWidget {
|
|||
|
||||
private void populate_list_store() {
|
||||
if (keys.size == 0) {
|
||||
label.set_markup(build_markup_string("Key publishing disabled", "No keys available. Generate one!"));
|
||||
label.set_markup(build_markup_string(_("Key publishing disabled"), _("No keys available. Generate one!")));
|
||||
return;
|
||||
}
|
||||
|
||||
TreeIter iter;
|
||||
list_store.append(out iter);
|
||||
list_store.set(iter, 0, build_markup_string("Key publishing disabled", "Select key"), 1, "");
|
||||
list_store.set(iter, 0, build_markup_string(_("Key publishing disabled"), _("Select key")), 1, "");
|
||||
for (int i = 0; i < keys.size; i++) {
|
||||
list_store.append(out iter);
|
||||
list_store.set(iter, 0, @"$(Markup.escape_text(keys[i].uids[0].uid))\n<span font_family='monospace' font='8'>0x$(Markup.escape_text(keys[i].fpr[0:16]))</span>");
|
||||
|
@ -94,7 +94,7 @@ private class AccountSettingsWidget : Stack, Plugins.AccountSettingsWidget {
|
|||
TreeIter iter;
|
||||
list_store.clear();
|
||||
list_store.append(out iter);
|
||||
label.set_markup(build_markup_string("Loading...", "Querying GnuPG"));
|
||||
label.set_markup(build_markup_string(_("Loading..."), _("Querying GnuPG")));
|
||||
new Thread<void*> (null, () => { // Querying GnuPG might take some time
|
||||
try {
|
||||
keys = GPGHelper.get_keylist(null, true);
|
||||
|
@ -105,7 +105,7 @@ private class AccountSettingsWidget : Stack, Plugins.AccountSettingsWidget {
|
|||
});
|
||||
} catch (Error e) {
|
||||
Idle.add(() => {
|
||||
label.set_markup(build_markup_string("Key publishing disabled", "Error in GnuPG"));
|
||||
label.set_markup(build_markup_string(_("Key publishing disabled"), _("Error in GnuPG")));
|
||||
return false;
|
||||
});
|
||||
}
|
||||
|
@ -139,7 +139,7 @@ private class AccountSettingsWidget : Stack, Plugins.AccountSettingsWidget {
|
|||
}
|
||||
|
||||
private string build_markup_string(string primary, string secondary) {
|
||||
return @"$(Markup.escape_text(primary))\n<span font='9'>$(Markup.escape_text(secondary))</span>";
|
||||
return @"$(Markup.escape_text(primary))\n<span font='8'>$(Markup.escape_text(secondary))</span>";
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -2,6 +2,9 @@ using Gee;
|
|||
|
||||
using Dino.Entities;
|
||||
|
||||
extern const string GETTEXT_PACKAGE;
|
||||
extern const string LOCALE_INSTALL_DIR;
|
||||
|
||||
namespace Dino.Plugins.OpenPgp {
|
||||
|
||||
public class Plugin : Plugins.RootInterface, Object {
|
||||
|
@ -23,6 +26,8 @@ namespace Dino.Plugins.OpenPgp {
|
|||
app.stream_interaction.module_manager.initialize_account_modules.connect(on_initialize_account_modules);
|
||||
|
||||
Manager.start(app.stream_interaction, db);
|
||||
|
||||
internationalize(GETTEXT_PACKAGE, app.search_path_generator.get_locale_path(GETTEXT_PACKAGE, LOCALE_INSTALL_DIR));
|
||||
}
|
||||
|
||||
public void shutdown() { }
|
||||
|
|
Loading…
Reference in a new issue