(purple) Localization, init catkeys
This commit is contained in:
parent
23e6f4ba5a
commit
6875c3cb75
|
@ -0,0 +1,42 @@
|
||||||
|
1 English application/x-vnd.cardie.purple 2993124882
|
||||||
|
Connection error PurpleApp ― Connection errors Connection error
|
||||||
|
** You can't undo what was once done… at least with this protocol.\n PurpleApp ― Room moderation ** You can't undo what was once done… at least with this protocol.\n
|
||||||
|
** Command isn't useful in this chat %err%\n PurpleApp ― Command errors ** Command isn't useful in this chat %err%\n
|
||||||
|
Self-signed certificate PurpleApp ― Connection errors Self-signed certificate
|
||||||
|
Username: PurpleApp ― Account template Username:
|
||||||
|
No SSL certificate provided PurpleApp ― Connection errors No SSL certificate provided
|
||||||
|
SSL unsupported PurpleApp ― Connection errors SSL unsupported
|
||||||
|
** Command error %err%\n PurpleApp ― Command errors ** Command error %err%\n
|
||||||
|
Authentication failed PurpleApp ― Connection errors Authentication failed
|
||||||
|
You can't friend someone without a nick. PurpleProtocol ― Roster template You can't friend someone without a nick.
|
||||||
|
** Command failed %err%\n PurpleApp ― Command errors ** Command failed %err%\n
|
||||||
|
Certificate error PurpleApp ― Connection errors Certificate error
|
||||||
|
Unactivated SSL certificate PurpleApp ― Connection errors Unactivated SSL certificate
|
||||||
|
** This protocol doesn't support kicking. Send them a strongly worded e-mail.\n PurpleApp ― Room moderation ** This protocol doesn't support kicking. Send them a strongly worded e-mail.\n
|
||||||
|
Certifcate and fingerprint conflict PurpleApp ― Connection errors Certifcate and fingerprint conflict
|
||||||
|
** This protocol left the duct-tape at home― we have nothing to put over their mouth!\n PurpleApp ― Room moderation ** This protocol left the duct-tape at home― we have nothing to put over their mouth!\n
|
||||||
|
** This protocol can't exactly unmute a user, let alone make an omlett.\n PurpleApp ― Room moderation ** This protocol can't exactly unmute a user, let alone make an omlett.\n
|
||||||
|
%name% is necessary. PurpleApp ― Room template %name% is necessary.
|
||||||
|
Password: PurpleApp ― Account template Password:
|
||||||
|
Invalid username PurpleApp ― Connection errors Invalid username
|
||||||
|
Username in use PurpleApp ― Connection errors Username in use
|
||||||
|
Encryption error PurpleApp ― Connection errors Encryption error
|
||||||
|
A username needs to be specified! PurpleApp ― Account template A username needs to be specified!
|
||||||
|
Settings invalid PurpleApp ― Connection errors Settings invalid
|
||||||
|
Moderator PurpleApp ― User roles Moderator
|
||||||
|
Alias: PurpleProtocol ― Roster template Alias:
|
||||||
|
Untrusted SSL certificate PurpleApp ― Connection errors Untrusted SSL certificate
|
||||||
|
Operator PurpleApp ― User roles Operator
|
||||||
|
Network error PurpleApp ― Connection errors Network error
|
||||||
|
%name% needs to be specified. PurpleApp ― Account template %name% needs to be specified.
|
||||||
|
Founder PurpleApp ― User roles Founder
|
||||||
|
Certificate and hostname conflict PurpleApp ― Connection errors Certificate and hostname conflict
|
||||||
|
** Invalid arguments to command %err%\n PurpleApp ― Command errors ** Invalid arguments to command %err%\n
|
||||||
|
** Command not found %err%\n PurpleApp ― Command errors ** Command not found %err%\n
|
||||||
|
Expired SSL certificate PurpleApp ― Connection errors Expired SSL certificate
|
||||||
|
** Banning won't work with this protocol. Try being mean instead.\n PurpleApp ― Room moderation ** Banning won't work with this protocol. Try being mean instead.\n
|
||||||
|
Room ID PurpleApp ― Room template Room ID
|
||||||
|
** This protocol is particularly self-concious, and prefers that this person not see its chats.\n PurpleApp ― Room moderation ** This protocol is particularly self-concious, and prefers that this person not see its chats.\n
|
||||||
|
Authentication impossible PurpleApp ― Connection errors Authentication impossible
|
||||||
|
Username: PurpleProtocol ― Roster template Username:
|
||||||
|
** This protocol doesn't support deafening, but spamming the chat should be a good substitute. :^)\n PurpleApp ― Room moderation ** This protocol doesn't support deafening, but spamming the chat should be a good substitute. :^)\n
|
|
@ -18,7 +18,7 @@ NAME = protocols/purple
|
||||||
TYPE = APP
|
TYPE = APP
|
||||||
|
|
||||||
# If you plan to use localization, specify the application's MIME signature.
|
# If you plan to use localization, specify the application's MIME signature.
|
||||||
APP_MIME_SIG = application/x-vnd.caya.purple
|
APP_MIME_SIG = application/x-vnd.cardie.purple
|
||||||
|
|
||||||
# The following lines tell Pe and Eddie where the SRCS, RDEFS, and RSRCS are
|
# The following lines tell Pe and Eddie where the SRCS, RDEFS, and RSRCS are
|
||||||
# so that Pe and Eddie can fill them in for you.
|
# so that Pe and Eddie can fill them in for you.
|
||||||
|
@ -62,7 +62,7 @@ RSRCS =
|
||||||
# - if your library does not follow the standard library naming scheme,
|
# - if your library does not follow the standard library naming scheme,
|
||||||
# you need to specify the path to the library and it's name.
|
# you need to specify the path to the library and it's name.
|
||||||
# (e.g. for mylib.a, specify "mylib.a" or "path/mylib.a")
|
# (e.g. for mylib.a, specify "mylib.a" or "path/mylib.a")
|
||||||
LIBS = be crypto glib-2.0 interface network purple support translation $(STDCPPLIBS)
|
LIBS = be crypto glib-2.0 interface intl localestub network purple support translation $(STDCPPLIBS)
|
||||||
|
|
||||||
|
|
||||||
# Specify additional paths to directories following the standard libXXX.so
|
# Specify additional paths to directories following the standard libXXX.so
|
||||||
|
@ -92,7 +92,7 @@ OPTIMIZE :=
|
||||||
# will recreate only the "locales/en.catkeys" file. Use it as a template
|
# will recreate only the "locales/en.catkeys" file. Use it as a template
|
||||||
# for creating catkeys for other languages. All localization files must be
|
# for creating catkeys for other languages. All localization files must be
|
||||||
# placed in the "locales" subdirectory.
|
# placed in the "locales" subdirectory.
|
||||||
LOCALES =
|
LOCALES = en
|
||||||
|
|
||||||
# Specify all the preprocessor symbols to be defined. The symbols will not
|
# Specify all the preprocessor symbols to be defined. The symbols will not
|
||||||
# have their values set automatically; you must supply the value (if any) to
|
# have their values set automatically; you must supply the value (if any) to
|
||||||
|
@ -139,3 +139,5 @@ include $(DEVEL_DIRECTORY)/etc/makefile-engine
|
||||||
|
|
||||||
include Makefile.common
|
include Makefile.common
|
||||||
include protocols/Makefile.common
|
include protocols/Makefile.common
|
||||||
|
|
||||||
|
CATKEYS_DIR = locales/purple
|
||||||
|
|
|
@ -23,10 +23,13 @@
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
#include <glib.h>
|
#include <glib.h>
|
||||||
|
#include <libintl.h>
|
||||||
#include <libpurple/status.h>
|
#include <libpurple/status.h>
|
||||||
|
|
||||||
#include <Alert.h>
|
#include <Alert.h>
|
||||||
|
#include <Catalog.h>
|
||||||
#include <Directory.h>
|
#include <Directory.h>
|
||||||
|
#include <Locale.h>
|
||||||
#include <MessageRunner.h>
|
#include <MessageRunner.h>
|
||||||
#include <Path.h>
|
#include <Path.h>
|
||||||
#include <Roster.h>
|
#include <Roster.h>
|
||||||
|
@ -40,9 +43,14 @@
|
||||||
#include "PurpleMessages.h"
|
#include "PurpleMessages.h"
|
||||||
|
|
||||||
|
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleApp"
|
||||||
|
|
||||||
|
|
||||||
int
|
int
|
||||||
main(int arc, char** argv)
|
main(int arc, char** argv)
|
||||||
{
|
{
|
||||||
|
|
||||||
PurpleApp app;
|
PurpleApp app;
|
||||||
app.Run();
|
app.Run();
|
||||||
return 0;
|
return 0;
|
||||||
|
@ -54,6 +62,7 @@ PurpleApp::PurpleApp()
|
||||||
BApplication(PURPLE_SIGNATURE),
|
BApplication(PURPLE_SIGNATURE),
|
||||||
fGloop(g_main_loop_new(NULL, false))
|
fGloop(g_main_loop_new(NULL, false))
|
||||||
{
|
{
|
||||||
|
init_gettext();
|
||||||
if (init_libpurple() != B_OK)
|
if (init_libpurple() != B_OK)
|
||||||
std::cerr << "libpurple initialization failed. Please report!\n";
|
std::cerr << "libpurple initialization failed. Please report!\n";
|
||||||
|
|
||||||
|
@ -150,6 +159,8 @@ PurpleApp::MessageReceived(BMessage* msg)
|
||||||
void
|
void
|
||||||
PurpleApp::ImMessage(BMessage* msg)
|
PurpleApp::ImMessage(BMessage* msg)
|
||||||
{
|
{
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleApp ― Room moderation"
|
||||||
switch (msg->FindInt32("im_what"))
|
switch (msg->FindInt32("im_what"))
|
||||||
{
|
{
|
||||||
case IM_SET_OWN_STATUS:
|
case IM_SET_OWN_STATUS:
|
||||||
|
@ -379,54 +390,56 @@ PurpleApp::ImMessage(BMessage* msg)
|
||||||
case IM_ROOM_KICK_PARTICIPANT:
|
case IM_ROOM_KICK_PARTICIPANT:
|
||||||
{
|
{
|
||||||
_SendSysText(_ConversationFromMessage(msg),
|
_SendSysText(_ConversationFromMessage(msg),
|
||||||
"** This protocol doesn't support kicking. "
|
B_TRANSLATE("** This protocol doesn't support kicking. "
|
||||||
"Send them a strongly worded e-mail.\n");
|
"Send them a strongly worded e-mail.\n"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IM_ROOM_BAN_PARTICIPANT:
|
case IM_ROOM_BAN_PARTICIPANT:
|
||||||
{
|
{
|
||||||
_SendSysText(_ConversationFromMessage(msg),
|
_SendSysText(_ConversationFromMessage(msg),
|
||||||
"** Banning won't work with this protocol. "
|
B_TRANSLATE("** Banning won't work with this protocol. "
|
||||||
"Try being mean instead.\n");
|
"Try being mean instead.\n"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IM_ROOM_UNBAN_PARTICIPANT:
|
case IM_ROOM_UNBAN_PARTICIPANT:
|
||||||
{
|
{
|
||||||
_SendSysText(_ConversationFromMessage(msg),
|
_SendSysText(_ConversationFromMessage(msg),
|
||||||
"** You can't undo what was once done… "
|
B_TRANSLATE("** You can't undo what was once done… "
|
||||||
"at least with this protocol.\n");
|
"at least with this protocol.\n"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IM_ROOM_MUTE_PARTICIPANT:
|
case IM_ROOM_MUTE_PARTICIPANT:
|
||||||
{
|
{
|
||||||
_SendSysText(_ConversationFromMessage(msg),
|
_SendSysText(_ConversationFromMessage(msg),
|
||||||
"** This protocol left the duct-tape at home― "
|
B_TRANSLATE("** This protocol left the duct-tape at home― "
|
||||||
"we have nothing to put over their mouth!\n");
|
"we have nothing to put over their mouth!\n"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IM_ROOM_UNMUTE_PARTICIPANT:
|
case IM_ROOM_UNMUTE_PARTICIPANT:
|
||||||
{
|
{
|
||||||
_SendSysText(_ConversationFromMessage(msg),
|
_SendSysText(_ConversationFromMessage(msg),
|
||||||
"** This protocol can't exactly unmute a user, let alone make "
|
B_TRANSLATE("** This protocol can't exactly unmute a user, "
|
||||||
" an omlett.\n");
|
"let alone make an omlett.\n"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IM_ROOM_DEAFEN_PARTICIPANT:
|
case IM_ROOM_DEAFEN_PARTICIPANT:
|
||||||
{
|
{
|
||||||
_SendSysText(_ConversationFromMessage(msg),
|
_SendSysText(_ConversationFromMessage(msg),
|
||||||
"** This protocol doesn't support deafening, but spamming the "
|
B_TRANSLATE("** This protocol doesn't support deafening, "
|
||||||
"chat should be a good substitute. :^)\n");
|
"but spamming the chat should be a good substitute. :^)\n"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case IM_ROOM_UNDEAFEN_PARTICIPANT:
|
case IM_ROOM_UNDEAFEN_PARTICIPANT:
|
||||||
{
|
{
|
||||||
_SendSysText(_ConversationFromMessage(msg),
|
_SendSysText(_ConversationFromMessage(msg),
|
||||||
"** This protocol is particularly self-concious, and prefers "
|
B_TRANSLATE("** This protocol is particularly self-concious,"
|
||||||
"that this person not see its chats.\n");
|
" and prefers that this person not see its chats.\n"));
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
case PURPLE_CHAT_COMMAND:
|
case PURPLE_CHAT_COMMAND:
|
||||||
{
|
{
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleApp ― Command errors"
|
||||||
PurpleConversation* conv = _ConversationFromMessage(msg);
|
PurpleConversation* conv = _ConversationFromMessage(msg);
|
||||||
BString cmd;
|
BString cmd;
|
||||||
if (conv == NULL || msg->FindString("cmd_name", &cmd) != B_OK)
|
if (conv == NULL || msg->FindString("cmd_name", &cmd) != B_OK)
|
||||||
|
@ -448,22 +461,22 @@ PurpleApp::ImMessage(BMessage* msg)
|
||||||
switch (status)
|
switch (status)
|
||||||
{
|
{
|
||||||
case PURPLE_CMD_STATUS_FAILED:
|
case PURPLE_CMD_STATUS_FAILED:
|
||||||
errorBody = "** Command failed %err%\n";
|
errorBody = B_TRANSLATE("** Command failed %err%\n");
|
||||||
break;
|
break;
|
||||||
case PURPLE_CMD_STATUS_NOT_FOUND:
|
case PURPLE_CMD_STATUS_NOT_FOUND:
|
||||||
errorBody = "** Command not found %err%\n";
|
errorBody = B_TRANSLATE("** Command not found %err%\n");
|
||||||
break;
|
break;
|
||||||
case PURPLE_CMD_STATUS_WRONG_ARGS:
|
case PURPLE_CMD_STATUS_WRONG_ARGS:
|
||||||
errorBody = "** Invalid arguments to command %err%\n";
|
errorBody = B_TRANSLATE("** Invalid arguments to command %err%\n");
|
||||||
break;
|
break;
|
||||||
case PURPLE_CMD_STATUS_WRONG_PRPL:
|
case PURPLE_CMD_STATUS_WRONG_PRPL:
|
||||||
errorBody = "** Command isn't useful in this chat %err%\n";
|
errorBody = B_TRANSLATE("** Command isn't useful in this chat %err%\n");
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
errorBody = "** Command error %err%\n";
|
errorBody = B_TRANSLATE("** Command error %err%\n");
|
||||||
}
|
}
|
||||||
if (status != PURPLE_CMD_STATUS_OK) {
|
if (status != PURPLE_CMD_STATUS_OK) {
|
||||||
errorBody.ReplaceAll("%err%", error);
|
errorBody.ReplaceAll("%err%", _tr(error));
|
||||||
_SendSysText(conv, errorBody.String());
|
_SendSysText(conv, errorBody.String());
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
|
@ -543,6 +556,9 @@ PurpleApp::_GetAccountTemplate(PurplePluginProtocolInfo* info)
|
||||||
{
|
{
|
||||||
BMessage temp;
|
BMessage temp;
|
||||||
|
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleApp ― Account template"
|
||||||
|
|
||||||
// Add a "username" setting, if not explicitly specified
|
// Add a "username" setting, if not explicitly specified
|
||||||
GList* prefIter = info->protocol_options;
|
GList* prefIter = info->protocol_options;
|
||||||
for (int i = 0; prefIter != NULL; prefIter = prefIter->next) {
|
for (int i = 0; prefIter != NULL; prefIter = prefIter->next) {
|
||||||
|
@ -553,8 +569,9 @@ PurpleApp::_GetAccountTemplate(PurplePluginProtocolInfo* info)
|
||||||
else if (prefIter->next == NULL) {
|
else if (prefIter->next == NULL) {
|
||||||
BMessage setting;
|
BMessage setting;
|
||||||
setting.AddString("name", "username");
|
setting.AddString("name", "username");
|
||||||
setting.AddString("description", "Username:");
|
setting.AddString("description", B_TRANSLATE("Username:"));
|
||||||
setting.AddString("error", "A username needs to be specified!");
|
setting.AddString("error",
|
||||||
|
B_TRANSLATE("A username needs to be specified!"));
|
||||||
setting.AddInt32("type", B_STRING_TYPE);
|
setting.AddInt32("type", B_STRING_TYPE);
|
||||||
temp.AddMessage("setting", &setting);
|
temp.AddMessage("setting", &setting);
|
||||||
}
|
}
|
||||||
|
@ -567,7 +584,7 @@ PurpleApp::_GetAccountTemplate(PurplePluginProtocolInfo* info)
|
||||||
PurpleAccountUserSplit* split = (PurpleAccountUserSplit*)splitIter->data;
|
PurpleAccountUserSplit* split = (PurpleAccountUserSplit*)splitIter->data;
|
||||||
BMessage setting;
|
BMessage setting;
|
||||||
setting.AddString("name", "username_split");
|
setting.AddString("name", "username_split");
|
||||||
setting.AddString("description", BString(split->text).Append(":"));
|
setting.AddString("description", BString(_tr(split->text)).Append(":"));
|
||||||
setting.AddString("default", split->default_value);
|
setting.AddString("default", split->default_value);
|
||||||
setting.AddInt32("type", B_STRING_TYPE);
|
setting.AddInt32("type", B_STRING_TYPE);
|
||||||
temp.AddMessage("setting", &setting);
|
temp.AddMessage("setting", &setting);
|
||||||
|
@ -576,7 +593,7 @@ PurpleApp::_GetAccountTemplate(PurplePluginProtocolInfo* info)
|
||||||
// Password setting
|
// Password setting
|
||||||
BMessage passwd;
|
BMessage passwd;
|
||||||
passwd.AddString("name", "password");
|
passwd.AddString("name", "password");
|
||||||
passwd.AddString("description", "Password:");
|
passwd.AddString("description", B_TRANSLATE("Password:"));
|
||||||
passwd.AddInt32("type", B_STRING_TYPE);
|
passwd.AddInt32("type", B_STRING_TYPE);
|
||||||
passwd.AddBool("is_secret", true);
|
passwd.AddBool("is_secret", true);
|
||||||
temp.AddMessage("setting", &passwd);
|
temp.AddMessage("setting", &passwd);
|
||||||
|
@ -591,13 +608,13 @@ PurpleApp::_GetAccountTemplate(PurplePluginProtocolInfo* info)
|
||||||
|
|
||||||
BMessage setting;
|
BMessage setting;
|
||||||
setting.AddString("name", pref->pref_name);
|
setting.AddString("name", pref->pref_name);
|
||||||
BString description = BString(pref->text).Append(":");
|
BString description = BString(_tr(pref->text)).Append(":");
|
||||||
|
|
||||||
switch (type)
|
switch (type)
|
||||||
{
|
{
|
||||||
case PURPLE_PREF_BOOLEAN:
|
case PURPLE_PREF_BOOLEAN:
|
||||||
{
|
{
|
||||||
description = pref->text;
|
description = _tr(pref->text);
|
||||||
bType = B_BOOL_TYPE;
|
bType = B_BOOL_TYPE;
|
||||||
setting.AddBool("default", pref->default_value.boolean);
|
setting.AddBool("default", pref->default_value.boolean);
|
||||||
break;
|
break;
|
||||||
|
@ -629,8 +646,11 @@ PurpleApp::_GetAccountTemplate(PurplePluginProtocolInfo* info)
|
||||||
|
|
||||||
if (pref->masked)
|
if (pref->masked)
|
||||||
setting.AddBool("is_hidden", true);
|
setting.AddBool("is_hidden", true);
|
||||||
setting.AddString("error",
|
|
||||||
BString(pref->text).Append(" needs to be specified."));
|
BString error(B_TRANSLATE("%name% needs to be specified."));
|
||||||
|
error.ReplaceAll("%name%", pref->text);
|
||||||
|
setting.AddString("error", error);
|
||||||
|
|
||||||
setting.AddInt32("type", bType);
|
setting.AddInt32("type", bType);
|
||||||
setting.AddString("description", description);
|
setting.AddString("description", description);
|
||||||
temp.AddMessage("setting", &setting);
|
temp.AddMessage("setting", &setting);
|
||||||
|
@ -642,10 +662,13 @@ PurpleApp::_GetAccountTemplate(PurplePluginProtocolInfo* info)
|
||||||
BMessage
|
BMessage
|
||||||
PurpleApp::_GetRoomTemplate(PurplePluginProtocolInfo* info)
|
PurpleApp::_GetRoomTemplate(PurplePluginProtocolInfo* info)
|
||||||
{
|
{
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleApp ― Room template"
|
||||||
|
|
||||||
BMessage settings;
|
BMessage settings;
|
||||||
if (info->chat_info == NULL) {
|
if (info->chat_info == NULL) {
|
||||||
settings.AddString("name", "chat_id");
|
settings.AddString("name", "chat_id");
|
||||||
settings.AddString("description", "Room ID");
|
settings.AddString("description", B_TRANSLATE("Room ID"));
|
||||||
settings.AddInt32("type", B_STRING_TYPE);
|
settings.AddInt32("type", B_STRING_TYPE);
|
||||||
return settings;
|
return settings;
|
||||||
}
|
}
|
||||||
|
@ -657,11 +680,13 @@ PurpleApp::_GetRoomTemplate(PurplePluginProtocolInfo* info)
|
||||||
proto_chat_entry* pref = (proto_chat_entry*)prefs->data;
|
proto_chat_entry* pref = (proto_chat_entry*)prefs->data;
|
||||||
|
|
||||||
setting.AddString("name", pref->identifier);
|
setting.AddString("name", pref->identifier);
|
||||||
setting.AddString("description", pref->label);
|
setting.AddString("description", _tr(pref->label));
|
||||||
|
|
||||||
if (pref->required)
|
if (pref->required) {
|
||||||
setting.AddString("error",
|
BString error(B_TRANSLATE("%name% is necessary."));
|
||||||
BString(pref->identifier).Append(" is necessary."));
|
error.ReplaceAll("%name%", pref->identifier);
|
||||||
|
setting.AddString("error", error);
|
||||||
|
}
|
||||||
if (pref->secret)
|
if (pref->secret)
|
||||||
setting.AddBool("is_secret", true);
|
setting.AddBool("is_secret", true);
|
||||||
if (pref->is_int)
|
if (pref->is_int)
|
||||||
|
@ -892,6 +917,23 @@ init_libpurple()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void
|
||||||
|
init_gettext()
|
||||||
|
{
|
||||||
|
// Spoof the current language
|
||||||
|
BLocale locale;
|
||||||
|
BLanguage lang;
|
||||||
|
if (locale.GetLanguage(&lang) == B_OK)
|
||||||
|
setenv("LC_MESSAGES", lang.Code(), 1);
|
||||||
|
|
||||||
|
bindtextdomain("pidgin", "/boot/system/data/locale");
|
||||||
|
bind_textdomain_codeset("pidgin", "UTF-8");
|
||||||
|
textdomain("pidgin");
|
||||||
|
|
||||||
|
setlocale(LC_MESSAGES, NULL);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
static PurpleEventLoopUiOps _ui_op_eventloops =
|
static PurpleEventLoopUiOps _ui_op_eventloops =
|
||||||
{
|
{
|
||||||
g_timeout_add,
|
g_timeout_add,
|
||||||
|
@ -1369,8 +1411,8 @@ static void*
|
||||||
ui_op_notify_message(PurpleNotifyMsgType type, const char* title,
|
ui_op_notify_message(PurpleNotifyMsgType type, const char* title,
|
||||||
const char* primary, const char* secondary)
|
const char* primary, const char* secondary)
|
||||||
{
|
{
|
||||||
BString text = primary;
|
BString text = _tr(primary);
|
||||||
text << "\n" << secondary;
|
text << "\n" << _tr(secondary);
|
||||||
|
|
||||||
BAlert* alert = new BAlert(title, text.String(), "OK");
|
BAlert* alert = new BAlert(title, text.String(), "OK");
|
||||||
|
|
||||||
|
@ -1418,6 +1460,9 @@ void
|
||||||
send_user_role(PurpleConversation* conv, const char* name,
|
send_user_role(PurpleConversation* conv, const char* name,
|
||||||
PurpleConvChatBuddyFlags flags)
|
PurpleConvChatBuddyFlags flags)
|
||||||
{
|
{
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleApp ― User roles"
|
||||||
|
|
||||||
if (flags == 0) return;
|
if (flags == 0) return;
|
||||||
|
|
||||||
BString role_title;
|
BString role_title;
|
||||||
|
@ -1425,18 +1470,18 @@ send_user_role(PurpleConversation* conv, const char* name,
|
||||||
int32 role_priority = 0;
|
int32 role_priority = 0;
|
||||||
|
|
||||||
if (flags & PURPLE_CBFLAGS_FOUNDER) {
|
if (flags & PURPLE_CBFLAGS_FOUNDER) {
|
||||||
role_title = "Founder";
|
role_title = B_TRANSLATE("Founder");
|
||||||
role_priority = 3;
|
role_priority = 3;
|
||||||
}
|
}
|
||||||
if (flags & PURPLE_CBFLAGS_OP) {
|
if (flags & PURPLE_CBFLAGS_OP) {
|
||||||
if (role_title.IsEmpty() == true)
|
if (role_title.IsEmpty() == true)
|
||||||
role_title = "Operator";
|
role_title = B_TRANSLATE("Operator");
|
||||||
role_perms |= PERM_ROOM_SUBJECT | PERM_ROOM_NAME;
|
role_perms |= PERM_ROOM_SUBJECT | PERM_ROOM_NAME;
|
||||||
role_priority = 2;
|
role_priority = 2;
|
||||||
}
|
}
|
||||||
if (flags & PURPLE_CBFLAGS_HALFOP) {
|
if (flags & PURPLE_CBFLAGS_HALFOP) {
|
||||||
if (role_title.IsEmpty() == true)
|
if (role_title.IsEmpty() == true)
|
||||||
role_title = "Moderator";
|
role_title = B_TRANSLATE("Moderator");
|
||||||
role_perms |= PERM_ROOM_SUBJECT | PERM_ROOM_NAME;
|
role_perms |= PERM_ROOM_SUBJECT | PERM_ROOM_NAME;
|
||||||
role_priority = 3;
|
role_priority = 3;
|
||||||
}
|
}
|
||||||
|
@ -1511,42 +1556,45 @@ purple_status_to_cardie(PurpleStatus* status)
|
||||||
const char*
|
const char*
|
||||||
purple_connection_error_name(const PurpleConnectionErrorInfo* error)
|
purple_connection_error_name(const PurpleConnectionErrorInfo* error)
|
||||||
{
|
{
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleApp ― Connection errors"
|
||||||
|
|
||||||
switch (error->type)
|
switch (error->type)
|
||||||
{
|
{
|
||||||
case PURPLE_CONNECTION_ERROR_NETWORK_ERROR:
|
case PURPLE_CONNECTION_ERROR_NETWORK_ERROR:
|
||||||
return "Connection error";
|
return B_TRANSLATE("Network error");
|
||||||
case PURPLE_CONNECTION_ERROR_INVALID_USERNAME:
|
case PURPLE_CONNECTION_ERROR_INVALID_USERNAME:
|
||||||
return "Invalid username";
|
return B_TRANSLATE("Invalid username");
|
||||||
case PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED:
|
case PURPLE_CONNECTION_ERROR_AUTHENTICATION_FAILED:
|
||||||
return "Authentication failed";
|
return B_TRANSLATE("Authentication failed");
|
||||||
case PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE:
|
case PURPLE_CONNECTION_ERROR_AUTHENTICATION_IMPOSSIBLE:
|
||||||
return "Authentication impossible";
|
return B_TRANSLATE("Authentication impossible");
|
||||||
case PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT:
|
case PURPLE_CONNECTION_ERROR_NO_SSL_SUPPORT:
|
||||||
return "SSL unsupported";
|
return B_TRANSLATE("SSL unsupported");
|
||||||
case PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR:
|
case PURPLE_CONNECTION_ERROR_ENCRYPTION_ERROR:
|
||||||
return "Encryption error";
|
return B_TRANSLATE("Encryption error");
|
||||||
case PURPLE_CONNECTION_ERROR_NAME_IN_USE:
|
case PURPLE_CONNECTION_ERROR_NAME_IN_USE:
|
||||||
return "Username in use";
|
return B_TRANSLATE("Username in use");
|
||||||
case PURPLE_CONNECTION_ERROR_INVALID_SETTINGS:
|
case PURPLE_CONNECTION_ERROR_INVALID_SETTINGS:
|
||||||
return "Settings invalid";
|
return B_TRANSLATE("Settings invalid");
|
||||||
case PURPLE_CONNECTION_ERROR_CERT_NOT_PROVIDED:
|
case PURPLE_CONNECTION_ERROR_CERT_NOT_PROVIDED:
|
||||||
return "No SSL certificate provided";
|
return B_TRANSLATE("No SSL certificate provided");
|
||||||
case PURPLE_CONNECTION_ERROR_CERT_UNTRUSTED:
|
case PURPLE_CONNECTION_ERROR_CERT_UNTRUSTED:
|
||||||
return "Untrusted SSL certificate";
|
return B_TRANSLATE("Untrusted SSL certificate");
|
||||||
case PURPLE_CONNECTION_ERROR_CERT_EXPIRED:
|
case PURPLE_CONNECTION_ERROR_CERT_EXPIRED:
|
||||||
return "Expired SSL certificate";
|
return B_TRANSLATE("Expired SSL certificate");
|
||||||
case PURPLE_CONNECTION_ERROR_CERT_NOT_ACTIVATED:
|
case PURPLE_CONNECTION_ERROR_CERT_NOT_ACTIVATED:
|
||||||
return "Unactivated SSL certificate";
|
return B_TRANSLATE("Unactivated SSL certificate");
|
||||||
case PURPLE_CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH:
|
case PURPLE_CONNECTION_ERROR_CERT_HOSTNAME_MISMATCH:
|
||||||
return "Certificate and hostname conflict";
|
return B_TRANSLATE("Certificate and hostname conflict");
|
||||||
case PURPLE_CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH:
|
case PURPLE_CONNECTION_ERROR_CERT_FINGERPRINT_MISMATCH:
|
||||||
return "Certifcate and fingerprint conflict";
|
return B_TRANSLATE("Certifcate and fingerprint conflict");
|
||||||
case PURPLE_CONNECTION_ERROR_CERT_SELF_SIGNED:
|
case PURPLE_CONNECTION_ERROR_CERT_SELF_SIGNED:
|
||||||
return "Self-signed certificate";
|
return B_TRANSLATE("Self-signed certificate");
|
||||||
case PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR:
|
case PURPLE_CONNECTION_ERROR_CERT_OTHER_ERROR:
|
||||||
return "Certificate error";
|
return B_TRANSLATE("Certificate error");
|
||||||
}
|
}
|
||||||
return "Misc. error";
|
return B_TRANSLATE("Connection error");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -1585,3 +1633,10 @@ _purple_glib_io_invoke(GIOChannel *source, GIOCondition condition, gpointer data
|
||||||
|
|
||||||
return TRUE;
|
return TRUE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const char*
|
||||||
|
_tr(const char* string)
|
||||||
|
{
|
||||||
|
return BString(dgettext("pidgin", string)).ReplaceFirst("_", "").String();
|
||||||
|
}
|
||||||
|
|
|
@ -112,6 +112,7 @@ private:
|
||||||
|
|
||||||
|
|
||||||
status_t init_libpurple();
|
status_t init_libpurple();
|
||||||
|
void init_gettext();
|
||||||
void init_ui_ops();
|
void init_ui_ops();
|
||||||
void init_signals();
|
void init_signals();
|
||||||
|
|
||||||
|
@ -233,4 +234,6 @@ PurpleStatusPrimitive cardie_status_to_purple(UserStatus status);
|
||||||
static gboolean _purple_glib_io_invoke(GIOChannel *source,
|
static gboolean _purple_glib_io_invoke(GIOChannel *source,
|
||||||
GIOCondition condition, gpointer data);
|
GIOCondition condition, gpointer data);
|
||||||
|
|
||||||
|
const char* _tr(const char* string);
|
||||||
|
|
||||||
#endif // _PURPLE_APP_H
|
#endif // _PURPLE_APP_H
|
||||||
|
|
|
@ -12,12 +12,14 @@
|
||||||
#include <StringView.h>
|
#include <StringView.h>
|
||||||
#include <TextView.h>
|
#include <TextView.h>
|
||||||
|
|
||||||
|
#include "PurpleApp.h"
|
||||||
|
|
||||||
|
|
||||||
PurpleDialog::PurpleDialog(const char* title, const char* primary,
|
PurpleDialog::PurpleDialog(const char* title, const char* primary,
|
||||||
const char* secondary, PurpleAccount* account, va_list actions,
|
const char* secondary, PurpleAccount* account, va_list actions,
|
||||||
size_t action_count, void* user_data)
|
size_t action_count, void* user_data)
|
||||||
:
|
:
|
||||||
BWindow(BRect(BPoint(-1000, -1000), BSize(300, 250)),title,
|
BWindow(BRect(BPoint(-1000, -1000), BSize(300, 250)), _tr(title),
|
||||||
B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
|
B_FLOATING_WINDOW_LOOK, B_NORMAL_WINDOW_FEEL,
|
||||||
B_AUTO_UPDATE_SIZE_LIMITS),
|
B_AUTO_UPDATE_SIZE_LIMITS),
|
||||||
fUserData(user_data)
|
fUserData(user_data)
|
||||||
|
@ -52,7 +54,7 @@ PurpleDialog::MessageReceived(BMessage* msg)
|
||||||
void
|
void
|
||||||
PurpleDialog::_InitActionInterface(const char* label, const char* desc)
|
PurpleDialog::_InitActionInterface(const char* label, const char* desc)
|
||||||
{
|
{
|
||||||
BStringView* primaryLabel = new BStringView("primaryText", label);
|
BStringView* primaryLabel = new BStringView("primaryText", _tr(label));
|
||||||
primaryLabel->SetExplicitAlignment(
|
primaryLabel->SetExplicitAlignment(
|
||||||
BAlignment(B_ALIGN_CENTER, B_ALIGN_TOP));
|
BAlignment(B_ALIGN_CENTER, B_ALIGN_TOP));
|
||||||
|
|
||||||
|
@ -60,7 +62,7 @@ PurpleDialog::_InitActionInterface(const char* label, const char* desc)
|
||||||
secondaryLabel->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
|
secondaryLabel->SetViewUIColor(B_PANEL_BACKGROUND_COLOR);
|
||||||
secondaryLabel->MakeEditable(false);
|
secondaryLabel->MakeEditable(false);
|
||||||
secondaryLabel->SetWordWrap(true);
|
secondaryLabel->SetWordWrap(true);
|
||||||
secondaryLabel->SetText(desc);
|
secondaryLabel->SetText(_tr(desc));
|
||||||
|
|
||||||
// Init buttons view
|
// Init buttons view
|
||||||
BView* buttonsView = new BView("actionButtons", 0);
|
BView* buttonsView = new BView("actionButtons", 0);
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
#include "PurpleProtocol.h"
|
#include "PurpleProtocol.h"
|
||||||
|
|
||||||
#include <Application.h>
|
#include <Application.h>
|
||||||
|
#include <Catalog.h>
|
||||||
#include <Resources.h>
|
#include <Resources.h>
|
||||||
#include <Roster.h>
|
#include <Roster.h>
|
||||||
#include <TranslationUtils.h>
|
#include <TranslationUtils.h>
|
||||||
|
@ -30,6 +31,10 @@
|
||||||
#include "PurpleMessages.h"
|
#include "PurpleMessages.h"
|
||||||
|
|
||||||
|
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleProtocol"
|
||||||
|
|
||||||
|
|
||||||
BMessenger* kAppMessenger = NULL;
|
BMessenger* kAppMessenger = NULL;
|
||||||
|
|
||||||
|
|
||||||
|
@ -373,17 +378,20 @@ PurpleProtocol::_SendPrplMessage(BMessage* msg)
|
||||||
BMessage
|
BMessage
|
||||||
PurpleProtocol::_RosterTemplate()
|
PurpleProtocol::_RosterTemplate()
|
||||||
{
|
{
|
||||||
|
#undef B_TRANSLATION_CONTEXT
|
||||||
|
#define B_TRANSLATION_CONTEXT "PurpleProtocol ― Roster template"
|
||||||
|
|
||||||
BMessage temp;
|
BMessage temp;
|
||||||
BMessage id;
|
BMessage id;
|
||||||
id.AddString("name", "user_id");
|
id.AddString("name", "user_id");
|
||||||
id.AddString("description", "Username:");
|
id.AddString("description", B_TRANSLATE("Username:"));
|
||||||
id.AddString("error", "You can't friend someone without a nick.");
|
id.AddString("error", B_TRANSLATE("You can't friend someone without a nick."));
|
||||||
id.AddInt32("type", B_STRING_TYPE);
|
id.AddInt32("type", B_STRING_TYPE);
|
||||||
temp.AddMessage("setting", &id);
|
temp.AddMessage("setting", &id);
|
||||||
|
|
||||||
BMessage name;
|
BMessage name;
|
||||||
name.AddString("name", "user_name");
|
name.AddString("name", "user_name");
|
||||||
name.AddString("description", "Alias:");
|
name.AddString("description", B_TRANSLATE("Alias:"));
|
||||||
name.AddInt32("type", B_STRING_TYPE);
|
name.AddInt32("type", B_STRING_TYPE);
|
||||||
temp.AddMessage("setting", &name);
|
temp.AddMessage("setting", &name);
|
||||||
|
|
||||||
|
|
Ŝarĝante…
Reference in New Issue