├── .gitignore ├── CHANGELOG.md ├── COPYING ├── README.md ├── build.sh ├── click ├── manifest.json ├── pushHelper ├── textsecure-push-helper.json ├── textsecure-push.apparmor ├── textsecure.apparmor ├── textsecure.content-hub ├── textsecure.desktop ├── textsecure.png └── textsecure.url-dispatcher ├── contacts.go ├── db.go ├── dialogs.go ├── gist.go ├── i18n.go ├── install.sh ├── main.go ├── models.go ├── po ├── ar.po ├── be.po ├── bg.po ├── cs.po ├── da.po ├── de.po ├── el.po ├── es.po ├── fa.po ├── fi.po ├── fr.po ├── hr.po ├── hu.po ├── in.po ├── it.po ├── iw.po ├── ja.po ├── kn-rIN.po ├── ko.po ├── mk.po ├── nl.po ├── no.po ├── pl.po ├── pt-rBR.po ├── pt.po ├── ro.po ├── ru.po ├── sk.po ├── sl.po ├── sr.po ├── sv.po ├── ta.po ├── textsecure.jani.pot ├── tr.po ├── vi.po └── zh-rCN.po ├── push.go └── qml └── phoneui ├── components ├── AttachPanel.qml ├── AttachPanelItem.qml ├── Avatar.qml ├── ColoredImage.qml ├── ContactImport.qml ├── DelegateUtils.qml ├── DocumentDelegate.qml ├── EdgeShadow.qml ├── MediaImport.qml ├── MessageStatus.qml ├── MultipleSelectionListView.qml ├── MultipleSelectionVisualModel.qml ├── PageLoader.qml ├── PhotoVideoDelegate.qml ├── SingleMediaViewer.qml ├── TelegramBubble.qml ├── TelegramButton.qml ├── TelegramColors.js ├── TelegramContactsListItem.qml ├── TelegramDelegate.qml ├── TelegramDialogsListItem.qml ├── TelegramHeader.qml ├── TelegramLabel.qml ├── TelegramPage.qml ├── TelegramSection.qml ├── TelegramSubtitledListItem.qml └── listitems │ ├── IconVisual.qml │ ├── ImageWithFallback.qml │ ├── LabelVisual.qml │ ├── ListItemWithActions.qml │ ├── ListItemWithActionsCheckBox.qml │ ├── ProgressionVisual.qml │ └── artwork │ ├── ListItemDivider24px@8.png │ ├── ListItemDivider6px@8.png │ ├── ListItemDividerHorizontal@18.png │ ├── ListItemDividerVertical@18.png │ ├── ListItemProgressionArrow@8.png │ └── delete@8.png ├── images ├── Checks1_2x.png ├── Checks1_2x_white.png ├── Checks2_2x.png ├── Checks2_2x_white.png ├── call.png ├── conversation_bubble_arrow.png ├── files │ └── android │ │ ├── attach_audio.png │ │ ├── attach_contact.png │ │ ├── attach_gallery.png │ │ ├── attach_hide1.png │ │ ├── attach_hide2.png │ │ └── attach_video.png ├── group_aqua.png ├── group_blue.png ├── group_green.png ├── group_orange.png ├── group_pink.png ├── group_red.png ├── group_violet.png ├── group_yellow.png ├── grouplist.png ├── ic_ab_attach.png ├── ic_ab_doc.png ├── ic_attach_gallery.png ├── ic_attach_location.png ├── ic_attach_photo.png ├── ic_attach_video.png ├── ic_lock_green.png ├── ic_profile_send_message.png ├── ic_send.png ├── ic_send_disabled.png ├── ic_video.png ├── logo.png ├── msg_clock.png ├── msg_clock_white.png ├── photocancel.png ├── photoload.png ├── photopause.png ├── phototime.9.png ├── playvideo.png ├── user_aqua.png ├── user_blue.png ├── user_green.png ├── user_orange.png ├── user_pink.png ├── user_placeholder.png ├── user_red.png ├── user_violet.png └── user_yellow.png ├── js ├── avatar.js ├── ba-linkify.js ├── country_data.js └── time.js ├── main.qml └── ui ├── ContactsPage.qml ├── DialogPage.qml ├── DialogsPage.qml ├── IntroPage.qml ├── PasswordPage.qml ├── PickerPage.qml ├── PreviewPage.qml ├── SettingsPage.qml ├── SignInPage.qml ├── VerificationCodePage.qml ├── dialogs ├── ConfirmationDialog.qml ├── ErrorMessageDialog.qml └── InfoDialog.qml └── settings └── AdvancedPage.qml /.gitignore: -------------------------------------------------------------------------------- 1 | textsecure.jani_*click 2 | textsecure-qml 3 | builddir 4 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # TextSecure client for the Ubuntu Phone 2 | 3 | This is a Signal compatible client for the Ubuntu Phone, written in Go and QML. 4 | It builds upon the [Go textsecure package] (https://github.com/janimo/textsecure) and modified versions of the 5 | Telegram for Ubuntu Phone QML interface. 6 | 7 | What works 8 | ----------- 9 | 10 | * Phone registration 11 | * Contact discovery 12 | * Direct and group messages 13 | * Photo, video, audio and contact attachments in both direct and group mode 14 | * Preview for photo and audio attachments 15 | * Storing conversations 16 | 17 | What is missing 18 | --------------- 19 | 20 | * Push notifications 21 | * Most settings that are available in the Android app 22 | * Encrypted message store 23 | * Desktop client provisioning/syncing 24 | * Encrypted phone calls 25 | 26 | There are still bugs and UI/UX quirks. 27 | 28 | Installation 29 | ------------ 30 | 31 | Download the latest release from the app store or build it yourself (you'll need docker running) 32 | 33 | ./build.sh rel 34 | 35 | Install on a phone connected via adb 36 | 37 | ./install.sh 38 | 39 | For more details check the [wiki] (https://github.com/janimo/textsecure-qml/wiki/Installation) 40 | 41 | Contributing 42 | ----------- 43 | 44 | User and developer discussions happen on the [mailing list] (https://groups.google.com/forum/#!forum/textsecure-go), everything else 45 | is on github. 46 | -------------------------------------------------------------------------------- /build.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | mode=${1:-dev} 4 | echo "Building package in $mode mode." 5 | 6 | rm -Rf builddir 7 | 8 | rm textsecure.jani*click 9 | 10 | cp -a click builddir 11 | 12 | docker run --rm -it -v $(pwd):/home/developer -v $GOPATH:/home/developer/gopath -w $(pwd|sed "s,$GOPATH,/home/developer/gopath,") janimo/goqml-cross build -i -o builddir/textsecure 13 | mkdir -p builddir/qml 14 | cp -a qml/phoneui builddir/qml 15 | cp -a CHANGELOG.md builddir 16 | if [ $mode = "dev" ];then 17 | #copy config.yml or rootCA.pem 18 | cp -a dev/* builddir/ 19 | fi 20 | 21 | # Build and include translations 22 | for po in po/*.po; do 23 | loc=$(echo $(basename $po)|cut -d'.' -f1) 24 | dir=builddir/share/locale/$loc/LC_MESSAGES 25 | mkdir -p $dir 26 | msgfmt $po -o $dir/textsecure.jani.mo 27 | done 28 | 29 | click build builddir 30 | -------------------------------------------------------------------------------- /click/manifest.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "textsecure.jani", 3 | "version": "0.3.12", 4 | "description": "A TextSecure compatible messaging client for Ubuntu phones", 5 | "title": "TextSecure client", 6 | "architecture": "armhf", 7 | "framework" : "ubuntu-sdk-15.04", 8 | "hooks": { 9 | "textsecure": { 10 | "apparmor": "textsecure.apparmor", 11 | "desktop": "textsecure.desktop", 12 | "urls": "textsecure.url-dispatcher", 13 | "content-hub": "textsecure.content-hub" 14 | }, 15 | "push": { 16 | "apparmor": "textsecure-push.apparmor", 17 | "push-helper": "textsecure-push-helper.json" 18 | } 19 | }, 20 | "icon": "qml/phoneui/images/logo.png", 21 | "maintainer": "Jani Monoses " 22 | } 23 | 24 | 25 | -------------------------------------------------------------------------------- /click/pushHelper: -------------------------------------------------------------------------------- 1 | textsecure -------------------------------------------------------------------------------- /click/textsecure-push-helper.json: -------------------------------------------------------------------------------- 1 | { 2 | "exec": "pushHelper", 3 | "app_id": "textsecure.jani_textsecure" 4 | } 5 | -------------------------------------------------------------------------------- /click/textsecure-push.apparmor: -------------------------------------------------------------------------------- 1 | { 2 | "template": "ubuntu-push-helper", 3 | "policy_groups": [ 4 | "push-notification-client" 5 | ], 6 | "policy_version": 1.3 7 | } 8 | -------------------------------------------------------------------------------- /click/textsecure.apparmor: -------------------------------------------------------------------------------- 1 | { 2 | "policy_groups": [ 3 | "connectivity", 4 | "networking", 5 | "content_exchange", 6 | "content_exchange_source", 7 | "audio", 8 | "video", 9 | "push-notification-client" 10 | ], 11 | "policy_version": 1.3 12 | } 13 | 14 | 15 | -------------------------------------------------------------------------------- /click/textsecure.content-hub: -------------------------------------------------------------------------------- 1 | { 2 | "destination": [ 3 | "pictures", 4 | "videos", 5 | "links", 6 | "text" 7 | ] 8 | } 9 | -------------------------------------------------------------------------------- /click/textsecure.desktop: -------------------------------------------------------------------------------- 1 | [Desktop Entry] 2 | Name=TextSecure 3 | Exec=textsecure %u 4 | Icon=textsecure.png 5 | Terminal=false 6 | Type=Application 7 | X-Ubuntu-Touch=true 8 | X-Ubuntu-Default-Department-ID=communication 9 | 10 | -------------------------------------------------------------------------------- /click/textsecure.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/click/textsecure.png -------------------------------------------------------------------------------- /click/textsecure.url-dispatcher: -------------------------------------------------------------------------------- 1 | [ 2 | { 3 | "protocol": "tsdevice" 4 | } 5 | ] 6 | -------------------------------------------------------------------------------- /contacts.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/base64" 5 | "errors" 6 | "io/ioutil" 7 | "os" 8 | "path/filepath" 9 | "regexp" 10 | "strings" 11 | 12 | log "github.com/Sirupsen/logrus" 13 | 14 | "bitbucket.org/llg/vcard" 15 | "github.com/godbus/dbus" 16 | "github.com/janimo/textsecure" 17 | "github.com/ttacon/libphonenumber" 18 | ) 19 | 20 | // getDesktopContacts reads the contacts for the desktop app from a file 21 | func getDesktopContacts() ([]textsecure.Contact, error) { 22 | return textsecure.ReadContacts(filepath.Join(configDir, "contacts.yml")) 23 | } 24 | 25 | // getAddgetAddressBookContactsFromDBus gets the phone contacts via the address-book DBus service 26 | func getAddressBookContactsFromDBus() ([]textsecure.Contact, error) { 27 | var o dbus.ObjectPath 28 | var vcardContacts []string 29 | 30 | conn, err := dbus.SessionBus() 31 | if err != nil { 32 | return nil, err 33 | } 34 | 35 | obj := conn.Object("com.canonical.pim", "/com/canonical/pim/AddressBook") 36 | err = obj.Call("com.canonical.pim.AddressBook.query", 0, "", "", []string{}).Store(&o) 37 | if err != nil { 38 | return nil, err 39 | } 40 | obj2 := conn.Object("com.canonical.pim", o) 41 | err = obj2.Call("com.canonical.pim.AddressBookView.contactsDetails", 0, []string{}, int32(0), int32(-1)).Store(&vcardContacts) 42 | if err != nil { 43 | return nil, err 44 | } 45 | obj.Call("com.canonical.pim.AddressBook.close", 0) 46 | if err != nil { 47 | return nil, err 48 | } 49 | 50 | return parseVCards(vcardContacts) 51 | } 52 | 53 | func phoneFromVCardFile(file string) (string, error) { 54 | r, err := os.Open(file) 55 | if err != nil { 56 | return "", err 57 | } 58 | defer r.Close() 59 | 60 | di := vcard.NewDirectoryInfoReader(r) 61 | vc := &vcard.VCard{} 62 | vc.ReadFrom(di) 63 | if len(vc.Telephones) > 0 { 64 | return vc.Telephones[0].Number, nil 65 | } 66 | 67 | return "", errors.New("No phone number for contact.") 68 | } 69 | 70 | var pre = regexp.MustCompile("[^0-9+]") 71 | 72 | func formatE164(tel string, country string) string { 73 | if tel[0] == '+' { 74 | return pre.ReplaceAllString(tel, "") 75 | } 76 | num, err := libphonenumber.Parse(tel, country) 77 | if err != nil { 78 | log.Println(err) 79 | return tel 80 | } 81 | return libphonenumber.Format(num, libphonenumber.E164) 82 | } 83 | 84 | func defaultCountry() string { 85 | num, _ := libphonenumber.Parse(config.Tel, "") 86 | return libphonenumber.GetRegionCodeForCountryCode(int(num.GetCountryCode())) 87 | } 88 | 89 | func parseVCards(vcardContacts []string) ([]textsecure.Contact, error) { 90 | 91 | country := defaultCountry() 92 | 93 | // for now allocate space for 3 phones for each contact. 94 | // FIXME: make it cleaner by using up only as much space as needed. 95 | contacts := make([]textsecure.Contact, len(vcardContacts)*3) 96 | 97 | i := 0 98 | for _, c := range vcardContacts { 99 | di := vcard.NewDirectoryInfoReader(strings.NewReader(c)) 100 | vc := &vcard.VCard{} 101 | vc.ReadFrom(di) 102 | for t := 0; t < len(vc.Telephones); t++ { 103 | contacts[i].Name = vc.FormattedName 104 | contacts[i].Tel = formatE164(vc.Telephones[t].Number, country) 105 | if vc.Photo.Data != "" { 106 | b, err := base64.StdEncoding.DecodeString(vc.Photo.Data) 107 | if err == nil { 108 | contacts[i].Photo = string(b) 109 | } else { 110 | log.Printf("Parsing VCard %d %s\n", i, err.Error()) 111 | } 112 | } 113 | i++ 114 | } 115 | } 116 | return contacts[:i], nil 117 | } 118 | 119 | // getContactsFromVCardFile reads contacts from a VCF file 120 | func getContactsFromVCardFile(path string) ([]textsecure.Contact, error) { 121 | b, err := ioutil.ReadFile(path) 122 | if err != nil { 123 | return nil, err 124 | } 125 | vcardContacts := strings.SplitAfter(string(b), "END:VCARD") 126 | return parseVCards(vcardContacts) 127 | } 128 | 129 | // getAddgetAddressBookContactsFromContentHub gets the phone contacts via the content hub 130 | func getAddressBookContactsFromContentHub() ([]textsecure.Contact, error) { 131 | if exists(contactsFile) && vcardPath == "" { 132 | return textsecure.ReadContacts(contactsFile) 133 | } 134 | vcardPath := strings.TrimPrefix(vcardPath, "file://") 135 | contacts, err := getContactsFromVCardFile(vcardPath) 136 | if err != nil { 137 | return nil, err 138 | } 139 | 140 | err = textsecure.WriteContacts(contactsFile, contacts) 141 | if err != nil { 142 | return nil, err 143 | } 144 | return contacts, nil 145 | } 146 | -------------------------------------------------------------------------------- /dialogs.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "github.com/ttacon/libphonenumber" 4 | 5 | func getTextFromDialog(fun, obj, signal string) string { 6 | win.Root().Call(fun) 7 | p := win.Root().ObjectByName(obj) 8 | ch := make(chan string) 9 | p.On(signal, func(text string) { 10 | ch <- text 11 | }) 12 | text := <-ch 13 | return text 14 | } 15 | 16 | func getStoragePassword() string { 17 | return getTextFromDialog("getStoragePassword", "passwordPage", "passwordEntered") 18 | } 19 | 20 | func getPhoneNumber() string { 21 | n := getTextFromDialog("getPhoneNumber", "signInPage", "numberEntered") 22 | 23 | num, _ := libphonenumber.Parse(n, "") 24 | c := libphonenumber.GetRegionCodeForCountryCode(int(num.GetCountryCode())) 25 | s := libphonenumber.GetNationalSignificantNumber(num) 26 | f := formatE164(s, c) 27 | return f 28 | } 29 | 30 | func getVerificationCode() string { 31 | return getTextFromDialog("getVerificationCode", "codeVerificationPage", "codeEntered") 32 | } 33 | -------------------------------------------------------------------------------- /gist.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "bytes" 5 | "encoding/json" 6 | "io/ioutil" 7 | "net/http" 8 | "regexp" 9 | 10 | log "github.com/Sirupsen/logrus" 11 | ) 12 | 13 | type entry struct { 14 | Content string `json:"content"` 15 | } 16 | 17 | type gist struct { 18 | Description string `json:"description"` 19 | Public bool `json:"public"` 20 | Files map[string]entry `json:"files"` 21 | } 22 | 23 | type gistResponse struct { 24 | HTML_URL string `json:"html_url"` 25 | } 26 | 27 | var ( 28 | apiURL = "https://api.github.com/gists" 29 | ) 30 | 31 | var re = regexp.MustCompile("/\\+[0-9]+") 32 | 33 | // filterLogs removes potentially sensitive information from the logfile about to be submitted as part of a bug report. 34 | func filterLogs(logs string) string { 35 | return re.ReplaceAllString(logs, "/+XXXXXXXXX") 36 | } 37 | 38 | func (api *textsecureAPI) SubmitDebugLog() (string, error) { 39 | b, err := ioutil.ReadFile(logFile) 40 | if err != nil { 41 | return "", err 42 | } 43 | 44 | content := filterLogs(string(b)) 45 | f := make(map[string]entry) 46 | 47 | f["fname"] = entry{content} 48 | 49 | g := gist{ 50 | Description: "Debug log", 51 | Public: true, 52 | Files: f, 53 | } 54 | b, err = json.MarshalIndent(&g, "", " ") 55 | if err != nil { 56 | log.Fatal(err) 57 | } 58 | 59 | resp, err := http.Post(apiURL, "application/json", bytes.NewReader(b)) 60 | if err != nil { 61 | return "", err 62 | } 63 | 64 | defer resp.Body.Close() 65 | 66 | dec := json.NewDecoder(resp.Body) 67 | r := gistResponse{} 68 | err = dec.Decode(&r) 69 | if err != nil { 70 | return "", err 71 | } 72 | 73 | return r.HTML_URL, nil 74 | } 75 | -------------------------------------------------------------------------------- /i18n.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import "github.com/gosexy/gettext" 4 | 5 | var ( 6 | sessionReset string 7 | youLeftGroup string 8 | ) 9 | 10 | func setupTranslations() { 11 | gettext.Textdomain(appName) 12 | gettext.BindTextdomain(appName, "./share/locale") 13 | gettext.SetLocale(gettext.LC_ALL, "") 14 | 15 | sessionReset = gettext.Gettext("Secure session reset.") 16 | youLeftGroup = gettext.Gettext("You have left the group.") 17 | } 18 | -------------------------------------------------------------------------------- /install.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | CLICK_NAME=textsecure.jani*click 4 | 5 | adb push $CLICK_NAME /home/phablet 6 | adb shell pkcon install-local $CLICK_NAME --allow-untrusted 7 | -------------------------------------------------------------------------------- /po/ar.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: ar\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "صورة" 15 | 16 | msgid "Video" 17 | msgstr "فيديو" 18 | 19 | msgid "Audio" 20 | msgstr "صوت" 21 | 22 | msgid "Contact" 23 | msgstr "جهة اتصال" 24 | 25 | msgid "Settings" 26 | msgstr "الإعدادات" 27 | 28 | msgid "Advanced" 29 | msgstr "متقدم" 30 | 31 | msgid "Save" 32 | msgstr "أحفظ" 33 | 34 | msgid "Search" 35 | msgstr "بحث" 36 | 37 | msgid "Refresh" 38 | msgstr "إنعاش" 39 | 40 | msgid "New group" 41 | msgstr "مجموعة جديدة" 42 | 43 | msgid "Update group" 44 | msgstr "تحديث المجموعة" 45 | 46 | msgid "Group name" 47 | msgstr "أسم المجموعة" 48 | 49 | msgid "Call" 50 | msgstr "اتصل" 51 | 52 | msgid "Reset secure session" 53 | msgstr "إعادة ضبط جلسة آمنة" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "إعادة ضبط جلسة آمنة؟" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "سوف يتم الاحتفاظ برسائلك. هذا قد يساعد في حال وجود مشاكل في التشفير بهذه المحادثة." 60 | 61 | msgid "Verify identity" 62 | msgstr "تحقق من الهوية" 63 | 64 | msgid "Recipients list" 65 | msgstr "قائمة المستلمون" 66 | 67 | msgid "Leave group" 68 | msgstr "أترك المجموعة" 69 | 70 | msgid "Leave group?" 71 | msgstr "ترك المجموعة؟" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "هل أنت متأكد من ترك المجموعة؟" 75 | 76 | msgid "Delete conversation" 77 | msgstr "حذف المحادثة" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "حذف المحادثه؟" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "سوف يتم حذف جميع الرسائل في هذه المحادثة نهائيا." 84 | 85 | msgid "Select all" 86 | msgstr "أختر الكل" 87 | 88 | msgid "Message details" 89 | msgstr "تفاصيل الرسالة" 90 | 91 | msgid "Copy text" 92 | msgstr "نسخ النص" 93 | 94 | msgid "Forward message" 95 | msgstr "إعادة الإرسال" 96 | 97 | msgid "Delete message" 98 | msgstr "حذف الرسالة" 99 | 100 | msgid "Send Signal message" 101 | msgstr "أرسل رسالة سيجنال." 102 | 103 | msgid "Delete" 104 | msgstr "حذف" 105 | 106 | msgid "Group members" 107 | msgstr "أعضاء المجموعة" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "التواصل بواسطة سيجنال" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "بلدك" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "رمز دولتك ورقم هاتفك" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "تحقق من رقم تليفونك للاتصال بسيجنال" 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "يتم نقل بعض بيانات الاتصال إلى الخادم أثناء التسجيل، ولا يتم حفظها." 123 | 124 | msgid "Register" 125 | msgstr "سجل" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "رجاء التأكد من أنه رقمك! نحن على وشك التحقق بواسطة رسالة نصية." 129 | 130 | msgid "Cancel" 131 | msgstr "إلغاء" 132 | 133 | msgid "Mark all read" 134 | msgstr "اعتبارها رسائل مقروءة" 135 | 136 | msgid "Help" 137 | msgstr "مساعدة" 138 | 139 | msgid "Unregistering" 140 | msgstr "جارٍ إلغاء التسجيل" 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "تعطيل رسائل ومكالمات سيجنال؟" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "سوف يتم تعطيل رسائل ومكالمات سيجنال بإلغاء تسجيلك من الخدمة. سوف يتعين عليك إعادة تسجيل رقم هاتفك لمعاودة استخدام الخدمتين في المستقبل." 147 | 148 | msgid "Enter key sends" 149 | msgstr "مفتاح الدخول يقوم بالإرسال" 150 | 151 | msgid "Submit debug log" 152 | msgstr "أرسل سجل التشغيل." 153 | 154 | msgid "Success!" 155 | msgstr "تم بنجاح!" 156 | 157 | msgid "Verifying number" 158 | msgstr "جارٍ التحقق من الرقم" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "سيقوم سيجنال الآن بالتحقق من رقم هاتفك آليا بواسطة رسالة نصية." 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "انتظار رسالة التحقق..." 165 | 166 | msgid "Sent" 167 | msgstr "أرسلت" 168 | 169 | msgid "Received" 170 | msgstr "استلمت" 171 | 172 | msgid "New message" 173 | msgstr "رسالة جديدة" 174 | 175 | msgid "Secure session reset." 176 | msgstr "إعادة ضبط جلسة آمنة." 177 | 178 | msgid "You have left the group." 179 | msgstr "لقد تركت المجموعة." 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "هويتهم (كما يقرؤونها هم):" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "هويتك (كما تقرأها أنت):" 186 | -------------------------------------------------------------------------------- /po/be.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: be\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 14 | msgid "Image" 15 | msgstr "" 16 | 17 | msgid "Video" 18 | msgstr "" 19 | 20 | msgid "Audio" 21 | msgstr "Аўдыё" 22 | 23 | msgid "Contact" 24 | msgstr "" 25 | 26 | msgid "Settings" 27 | msgstr "Налады" 28 | 29 | msgid "Advanced" 30 | msgstr "Прасунуты" 31 | 32 | msgid "Save" 33 | msgstr "Захаваць" 34 | 35 | msgid "Search" 36 | msgstr "Пошук" 37 | 38 | msgid "Refresh" 39 | msgstr "" 40 | 41 | msgid "New group" 42 | msgstr "Новая група" 43 | 44 | msgid "Update group" 45 | msgstr "Абнавіць групу" 46 | 47 | msgid "Group name" 48 | msgstr "Імя групы" 49 | 50 | msgid "Call" 51 | msgstr "Набраць" 52 | 53 | msgid "Reset secure session" 54 | msgstr "" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "" 61 | 62 | msgid "Verify identity" 63 | msgstr "Праверыць ідэнтыфікатар" 64 | 65 | msgid "Recipients list" 66 | msgstr "Спіс атрымальнікаў" 67 | 68 | msgid "Leave group" 69 | msgstr "Пакінуць групу" 70 | 71 | msgid "Leave group?" 72 | msgstr "Пакінуць групу?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Вы ўпэўнены, што хочаце пакінуць групу?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "" 85 | 86 | msgid "Select all" 87 | msgstr "Выбраць усё" 88 | 89 | msgid "Message details" 90 | msgstr "Дэталі паведамлення" 91 | 92 | msgid "Copy text" 93 | msgstr "Капіраваць тэкст" 94 | 95 | msgid "Forward message" 96 | msgstr "Перанакіраваць паведамленне" 97 | 98 | msgid "Delete message" 99 | msgstr "Выдаліць паведамленне" 100 | 101 | msgid "Send Signal message" 102 | msgstr "" 103 | 104 | msgid "Delete" 105 | msgstr "Выдаліць" 106 | 107 | msgid "Group members" 108 | msgstr "Удзельнікі групы" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "ВАША КРАІНА" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "КОД ВАШАЙ КРАІНЫ І НУМАР ТЭЛЕФОНА" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "" 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Працэс рэгістрацыі перадасць некаторую кантактную інфармацыю на сервер. Яна ня будзе захавана." 124 | 125 | msgid "Register" 126 | msgstr "Зарэгістравацца" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Праверці ці гэта сапраўды Ваш нумар. Ён будзе правярацца з дапамогай SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "" 133 | 134 | msgid "Mark all read" 135 | msgstr "Пазначыць усе як прачытаныя" 136 | 137 | msgid "Help" 138 | msgstr "" 139 | 140 | msgid "Unregistering" 141 | msgstr "" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "" 148 | 149 | msgid "Enter key sends" 150 | msgstr "Дасылаць клавішай Enter" 151 | 152 | msgid "Submit debug log" 153 | msgstr "Выслаць debug log" 154 | 155 | msgid "Success!" 156 | msgstr "Паспяхова!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Праверка нумару" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "" 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Чакаем на праверачную SMS..." 166 | 167 | msgid "Sent" 168 | msgstr "Адпраўлена" 169 | 170 | msgid "Received" 171 | msgstr "Атрымана" 172 | 173 | msgid "New message" 174 | msgstr "Новае паведамленне" 175 | 176 | msgid "Secure session reset." 177 | msgstr "" 178 | 179 | msgid "You have left the group." 180 | msgstr "Вы пакінулі групу" 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Іх ідэнтыфікатар (яны чытаюць):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Ваш ідэнтыфікатар (вы чытаеце):" 187 | -------------------------------------------------------------------------------- /po/bg.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: bg\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 14 | msgid "Image" 15 | msgstr "Изображение" 16 | 17 | msgid "Video" 18 | msgstr "Видео" 19 | 20 | msgid "Audio" 21 | msgstr "Аудио" 22 | 23 | msgid "Contact" 24 | msgstr "Контакт" 25 | 26 | msgid "Settings" 27 | msgstr "Настройки" 28 | 29 | msgid "Advanced" 30 | msgstr "Допълнителни" 31 | 32 | msgid "Save" 33 | msgstr "Запази" 34 | 35 | msgid "Search" 36 | msgstr "Търси" 37 | 38 | msgid "Refresh" 39 | msgstr "Освежи" 40 | 41 | msgid "New group" 42 | msgstr "Нова група" 43 | 44 | msgid "Update group" 45 | msgstr "Промени група" 46 | 47 | msgid "Group name" 48 | msgstr "Име на групата" 49 | 50 | msgid "Call" 51 | msgstr "Обаждане" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Започни нова сигурна сесия" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Рестартирай сигурната сесия?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Това може да помогне ако имате проблеми с екрипцията в този разговор. Вашите съобщения ще бъдат запазени." 61 | 62 | msgid "Verify identity" 63 | msgstr "Провери самоличността" 64 | 65 | msgid "Recipients list" 66 | msgstr "Списък на получатели" 67 | 68 | msgid "Leave group" 69 | msgstr "Напусни група" 70 | 71 | msgid "Leave group?" 72 | msgstr "Напусни групата?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Сигурен ли си, че искаш да напуснеш тази група?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Изтрий разговор" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Изтрий разговора?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Това ще изтрие невъзвращаемо всичките съобщения в този разговор." 85 | 86 | msgid "Select all" 87 | msgstr "Избери всичко" 88 | 89 | msgid "Message details" 90 | msgstr "Информация за съобщението" 91 | 92 | msgid "Copy text" 93 | msgstr "Копирай текста" 94 | 95 | msgid "Forward message" 96 | msgstr "Препрати съобщението" 97 | 98 | msgid "Delete message" 99 | msgstr "Изтрий съобщението" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Изпрати Signal съобщение" 103 | 104 | msgid "Delete" 105 | msgstr "Изтрий" 106 | 107 | msgid "Group members" 108 | msgstr "Членове на групата" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "Свържи се със Signal" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "ТВОЯТА ДЪРЖАВА" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "КОДА НА ТВОЯТА ДЪРЖАВА И ТЕЛЕФОНЕН НОМЕР" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Потвърди своя телфонен номер, за да се свържеш с Signal" 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Регистрацията ще прехвърли временно малко информация, относно контактите ти, на сървъра." 124 | 125 | msgid "Register" 126 | msgstr "Регистрирай" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Проверете, че това е Вашия номер! Следва да го проверим чрез SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "Отказ" 133 | 134 | msgid "Mark all read" 135 | msgstr "Маркирай всички като прочетени" 136 | 137 | msgid "Help" 138 | msgstr "Помощ" 139 | 140 | msgid "Unregistering" 141 | msgstr "Отписване" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Деактивирай Signal съобщения и обаждания?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Деактивирайте Signal съобщения и обаждания като се дерегистрирате от сървъра. Ще трябва да регистрирате своят номер отново, за да ползвате услугите в бъдеще." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Клавишът Enter се използва за изпращане" 151 | 152 | msgid "Submit debug log" 153 | msgstr "Изпрати доклад" 154 | 155 | msgid "Success!" 156 | msgstr "Успех!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Потвърждаване на номера" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal ще опита да потвърди телефонния ти номер, автоматично, посредством SMS." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Изчкване за SMS потвърждение..." 166 | 167 | msgid "Sent" 168 | msgstr "Изпратен" 169 | 170 | msgid "Received" 171 | msgstr "Получен" 172 | 173 | msgid "New message" 174 | msgstr "Ново съобщение" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Започване на нова сигурна сесия." 178 | 179 | msgid "You have left the group." 180 | msgstr "Напуснахте групата." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Тяхната самоличност (те четат):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Твоята самоличност (ти чети):" 187 | -------------------------------------------------------------------------------- /po/cs.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: cs\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 14 | msgid "Image" 15 | msgstr "Obrázek" 16 | 17 | msgid "Video" 18 | msgstr "Video" 19 | 20 | msgid "Audio" 21 | msgstr "Audio" 22 | 23 | msgid "Contact" 24 | msgstr "Kontakt" 25 | 26 | msgid "Settings" 27 | msgstr "Nastavení" 28 | 29 | msgid "Advanced" 30 | msgstr "Rozšířené možnosti" 31 | 32 | msgid "Save" 33 | msgstr "Uložit" 34 | 35 | msgid "Search" 36 | msgstr "Hledat" 37 | 38 | msgid "Refresh" 39 | msgstr "Obnovit" 40 | 41 | msgid "New group" 42 | msgstr "Nová skupina" 43 | 44 | msgid "Update group" 45 | msgstr "Upravit skupinu" 46 | 47 | msgid "Group name" 48 | msgstr "Název skupiny" 49 | 50 | msgid "Call" 51 | msgstr "Volat" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Resetovat zabezpečenou konverzaci" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Resetovat zabezpečenou konverzaci?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Může to pomoct pokud máte problém s šifrováním této konverzace. Vaše zprávy zůstanou zachovány." 61 | 62 | msgid "Verify identity" 63 | msgstr "Ověření identity" 64 | 65 | msgid "Recipients list" 66 | msgstr "Seznam příjemců" 67 | 68 | msgid "Leave group" 69 | msgstr "Opustit skupinu" 70 | 71 | msgid "Leave group?" 72 | msgstr "Opustit skupinu?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Jsi si jistý, že chceš opustit tuto skupinu?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Smazat konverzaci" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Smazat konverzaci?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Tímto trvale smažete všechy zprávy této konverzace." 85 | 86 | msgid "Select all" 87 | msgstr "Označit vše" 88 | 89 | msgid "Message details" 90 | msgstr "Podrobnosti zprávy" 91 | 92 | msgid "Copy text" 93 | msgstr "Kopírovat text" 94 | 95 | msgid "Forward message" 96 | msgstr "Přeposlat zprávu" 97 | 98 | msgid "Delete message" 99 | msgstr "Smazat zprávu" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Poslat Signal zprávu" 103 | 104 | msgid "Delete" 105 | msgstr "Smazat" 106 | 107 | msgid "Group members" 108 | msgstr "Členové skupiny" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "Připojení pomocí Signál" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "Země" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "Kód země Telefonní číslo" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Ověření vašeho telefoního čísla pro připojení k Signal" 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "V průběhu registrace jsou odeslány některé kontaktní informace na server. Nejsou ale uloženy." 124 | 125 | msgid "Register" 126 | msgstr "Zaregistrovat" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Znovu zkontrolujte Vaše číslo! Nyní bude ověřeno pomocí SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "Storno" 133 | 134 | msgid "Mark all read" 135 | msgstr "Označit vše jako přečtené" 136 | 137 | msgid "Help" 138 | msgstr "Nápověda" 139 | 140 | msgid "Unregistering" 141 | msgstr "Rušení registrace" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Zakázat Signal zprávy a volání?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Tímto zakážete Signal zprávy a volání odregistrací ze serveru. Abyste mohli používat Signal zprávy v budoucnosti, budete muset znovu registrovat svoje telefonní číslo." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Klávesa Enter odesílá" 151 | 152 | msgid "Submit debug log" 153 | msgstr "Odeslat ladící log" 154 | 155 | msgid "Success!" 156 | msgstr "Úspěšně dokončeno!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Probíhá ověření čísla" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal nyní automaticky ověří vaše telefonní číslo pomocí potvrzovací SMS zprávy." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Čekám na ověřovací ověřovací SMS..." 166 | 167 | msgid "Sent" 168 | msgstr "Odesláno" 169 | 170 | msgid "Received" 171 | msgstr "Přijato" 172 | 173 | msgid "New message" 174 | msgstr "Nová zpráva" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Reset zabezpečené komunikace." 178 | 179 | msgid "You have left the group." 180 | msgstr "Opustil(a) jste skupinu" 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Jejich identita (čtou)" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Vaše identita (čtete):" 187 | -------------------------------------------------------------------------------- /po/da.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: da\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 14 | msgid "Image" 15 | msgstr "Billede" 16 | 17 | msgid "Video" 18 | msgstr "Video" 19 | 20 | msgid "Audio" 21 | msgstr "Lyd" 22 | 23 | msgid "Contact" 24 | msgstr "Kontaktperson" 25 | 26 | msgid "Settings" 27 | msgstr "Indstillinger" 28 | 29 | msgid "Advanced" 30 | msgstr "Avanceret" 31 | 32 | msgid "Save" 33 | msgstr "Gem" 34 | 35 | msgid "Search" 36 | msgstr "Søg" 37 | 38 | msgid "Refresh" 39 | msgstr "Opdater" 40 | 41 | msgid "New group" 42 | msgstr "Ny gruppe" 43 | 44 | msgid "Update group" 45 | msgstr "Opdatér gruppe" 46 | 47 | msgid "Group name" 48 | msgstr "Gruppenavn" 49 | 50 | msgid "Call" 51 | msgstr "Opkald" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Gendan sikker forbindelse" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Gendan sikker forbindelse?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Dette vil muligvis hjælpe hvis du oplever krypteringsproblemer med denne samtale. Dine beskeder bevares." 61 | 62 | msgid "Verify identity" 63 | msgstr "Verificér identitet" 64 | 65 | msgid "Recipients list" 66 | msgstr "Modtagerliste" 67 | 68 | msgid "Leave group" 69 | msgstr "Forlad gruppe" 70 | 71 | msgid "Leave group?" 72 | msgstr "Forlad gruppe?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Er du sikker, du vil forlade denne gruppe?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Slet samtale" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Slet samtale?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Dette vil slette alle beskeder i denne samtale permanent." 85 | 86 | msgid "Select all" 87 | msgstr "Markér alle" 88 | 89 | msgid "Message details" 90 | msgstr "Beskeddetaljer" 91 | 92 | msgid "Copy text" 93 | msgstr "Kopiér tekst" 94 | 95 | msgid "Forward message" 96 | msgstr "Videresend besked" 97 | 98 | msgid "Delete message" 99 | msgstr "Slet besked" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Send Signalbesked" 103 | 104 | msgid "Delete" 105 | msgstr "Slet" 106 | 107 | msgid "Group members" 108 | msgstr "Gruppemedlemmer" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "DIT LAND" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "DIN LANDEKODE OG DIT TELEFONNUMMER" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Bekræft at dit telefonnummer er forbundet til Signal." 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Registrering sender nogle kontaktinformationer til serveren. De bliver ikke gemt." 124 | 125 | msgid "Register" 126 | msgstr "Registrér" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Dobbelttjek, at dette er dit nummer! Vi er ved at verificere det med en SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "Afbryd" 133 | 134 | msgid "Mark all read" 135 | msgstr "Markér alle som læst" 136 | 137 | msgid "Help" 138 | msgstr "Hjælp" 139 | 140 | msgid "Unregistering" 141 | msgstr "Afregistrerer" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Deaktivér Signalbeskeder og -opkald?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Deaktivér Signalbeskeder og -opkald ved at afregistrere fra serveren. Du er nødt til at genregistrere dit telefonnummer for at bruge det igen i fremtiden." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Enter sender" 151 | 152 | msgid "Submit debug log" 153 | msgstr "" 154 | 155 | msgid "Success!" 156 | msgstr "Fuldført!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Verificerer nummer" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal vil nu automatisk verificere dit telefonnummer med en bekræftelses-SMS." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Venter på SMS-godkendelse..." 166 | 167 | msgid "Sent" 168 | msgstr "Sendt" 169 | 170 | msgid "Received" 171 | msgstr "Modtaget" 172 | 173 | msgid "New message" 174 | msgstr "Ny besked" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Sikker forbindelse gendannet." 178 | 179 | msgid "You have left the group." 180 | msgstr "Du har forladt gruppen." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Deres identitet (de læser):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Din identitet (du læser):" 187 | -------------------------------------------------------------------------------- /po/fa.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: fa\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "تصویر" 15 | 16 | msgid "Video" 17 | msgstr "ویدئو" 18 | 19 | msgid "Audio" 20 | msgstr "صدا" 21 | 22 | msgid "Contact" 23 | msgstr "مخاطب" 24 | 25 | msgid "Settings" 26 | msgstr "تنظیمات" 27 | 28 | msgid "Advanced" 29 | msgstr "تنظیمات پیشرفته" 30 | 31 | msgid "Save" 32 | msgstr "دخیره" 33 | 34 | msgid "Search" 35 | msgstr "جستجو" 36 | 37 | msgid "Refresh" 38 | msgstr "تازه کردن" 39 | 40 | msgid "New group" 41 | msgstr "گروه جدید" 42 | 43 | msgid "Update group" 44 | msgstr "به روز رسانی گروه" 45 | 46 | msgid "Group name" 47 | msgstr "نام گروه" 48 | 49 | msgid "Call" 50 | msgstr "تماس گرفتن" 51 | 52 | msgid "Reset secure session" 53 | msgstr "تنظیم مجدد جلسه امن" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "تنظیم مجدد جلسه امن؟" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "" 60 | 61 | msgid "Verify identity" 62 | msgstr "تشخیص هویت" 63 | 64 | msgid "Recipients list" 65 | msgstr "لیست دریافت کنندگان" 66 | 67 | msgid "Leave group" 68 | msgstr "مرخص شدن از گروه" 69 | 70 | msgid "Leave group?" 71 | msgstr "ترک گروه؟" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "آیا شما مطمئن هستید که میخواهید این گروه را ترک کنید؟" 75 | 76 | msgid "Delete conversation" 77 | msgstr "حذف گفتگو" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "گفتگو حذف شود؟" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "این کار تمام پیام ها در این گفتگو رابه طور دائم حذف میکند." 84 | 85 | msgid "Select all" 86 | msgstr "انتخاب همه" 87 | 88 | msgid "Message details" 89 | msgstr "جزییات پیام" 90 | 91 | msgid "Copy text" 92 | msgstr "کپی متن" 93 | 94 | msgid "Forward message" 95 | msgstr "پیام به جلو" 96 | 97 | msgid "Delete message" 98 | msgstr "حذف پیام" 99 | 100 | msgid "Send Signal message" 101 | msgstr "ارسال پیام سیگنال" 102 | 103 | msgid "Delete" 104 | msgstr "حذف" 105 | 106 | msgid "Group members" 107 | msgstr "اعضای گروه" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "کشور شما" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "کد کشور شما و شماره تلفن" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "" 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "" 123 | 124 | msgid "Register" 125 | msgstr "ثبت نام" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "مطمئن باشید که این شماره شما هست! الآن، برای تایيد کردن، به این شماره اس ام اس میفرستیم." 129 | 130 | msgid "Cancel" 131 | msgstr "لغو" 132 | 133 | msgid "Mark all read" 134 | msgstr "علامت همه به عنوان خوانده شده" 135 | 136 | msgid "Help" 137 | msgstr "کمک" 138 | 139 | msgid "Unregistering" 140 | msgstr "لغو ثبت نام" 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "تماس ها و پیام های سیگنال غیرفعال شوند؟" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "غیرفعال کردن پیام ها و تماس های سیگنال با لغو ثبت از سرور.شما نیاز به ثبت نام مجدد شماره تلفن خود برای استفاده مجدد دوباره در آینده دارید." 147 | 148 | msgid "Enter key sends" 149 | msgstr "ارسال با کلید Enter" 150 | 151 | msgid "Submit debug log" 152 | msgstr "ارسال گزارش اشکال‌زدایی" 153 | 154 | msgid "Success!" 155 | msgstr "موفقیت!" 156 | 157 | msgid "Verifying number" 158 | msgstr "تایید شماره" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "سیگنال الآن به صورت اتوماتک شماره شما را با اس ام اس تايید میکند." 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "در حال انتظار برای اس ام اس تایید ..." 165 | 166 | msgid "Sent" 167 | msgstr "فرستاده" 168 | 169 | msgid "Received" 170 | msgstr "رسیده" 171 | 172 | msgid "New message" 173 | msgstr "پیام جدید" 174 | 175 | msgid "Secure session reset." 176 | msgstr "تنظیم مجدد جلسه امن." 177 | 178 | msgid "You have left the group." 179 | msgstr "شما گروه را ترک کرده اید." 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "هویت خود (آنها به عنوان خوانده شده):" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "هویت خود (شما بخوانید):" 186 | -------------------------------------------------------------------------------- /po/hr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: hr\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 14 | msgid "Image" 15 | msgstr "Slika" 16 | 17 | msgid "Video" 18 | msgstr "Video" 19 | 20 | msgid "Audio" 21 | msgstr "Audio" 22 | 23 | msgid "Contact" 24 | msgstr "Kontakt" 25 | 26 | msgid "Settings" 27 | msgstr "Postavke" 28 | 29 | msgid "Advanced" 30 | msgstr "Napredno" 31 | 32 | msgid "Save" 33 | msgstr "Spremi" 34 | 35 | msgid "Search" 36 | msgstr "Traži" 37 | 38 | msgid "Refresh" 39 | msgstr "Osvježi" 40 | 41 | msgid "New group" 42 | msgstr "Nova grupa" 43 | 44 | msgid "Update group" 45 | msgstr "Ažuriraj grupu" 46 | 47 | msgid "Group name" 48 | msgstr "Naziv grupe" 49 | 50 | msgid "Call" 51 | msgstr "Nazovi" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Resetiraj sigurnu sesiju" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Resetiraj sigurnu sesiju?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Može pomoći ukoliko imate problema s kriptiranjem u ovom razgovoru. Vaše poruke će biti zadržane." 61 | 62 | msgid "Verify identity" 63 | msgstr "Provjeri identitet" 64 | 65 | msgid "Recipients list" 66 | msgstr "Popis primatelja" 67 | 68 | msgid "Leave group" 69 | msgstr "Napusti grupu" 70 | 71 | msgid "Leave group?" 72 | msgstr "Napusti grupu?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Jeste li sigurni da želite napustiti ovu grupu?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Obriši razgovor" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Obriši razgovor?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Trajno ćete obrisati sve poruke u ovom razgovoru." 85 | 86 | msgid "Select all" 87 | msgstr "Odaberi sve" 88 | 89 | msgid "Message details" 90 | msgstr "Detalji poruke" 91 | 92 | msgid "Copy text" 93 | msgstr "Kopiraj tekst" 94 | 95 | msgid "Forward message" 96 | msgstr "Proslijedi poruku" 97 | 98 | msgid "Delete message" 99 | msgstr "Obriši poruku" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Pošalji Signal poruku" 103 | 104 | msgid "Delete" 105 | msgstr "Obriši" 106 | 107 | msgid "Group members" 108 | msgstr "Članovi grupe" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "Poveži sa Signal" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "VAŠA ZEMLJA" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "POZIVNI BROJ ZEMLJE I TELEFONSKI BROJ" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Potvrdite svoj broj telefona kako biste se povezali sa Signal." 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Registracija šalje neke informacije o kontaktima na poslužitelj. Podaci se ne pohranjuju trajno." 124 | 125 | msgid "Register" 126 | msgstr "Registriraj" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Provjerite da li je ovo vaš broj telefona! Uskoro ćemo poslati SMS poruku na njega kako bi ga provjerili." 130 | 131 | msgid "Cancel" 132 | msgstr "Odustani" 133 | 134 | msgid "Mark all read" 135 | msgstr "Označi sve pročitano" 136 | 137 | msgid "Help" 138 | msgstr "Pomoć" 139 | 140 | msgid "Unregistering" 141 | msgstr "Uklanjanje registracije" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Onemogući Signal poruke i pozive?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Onemogućite Signal poruke i pozive tako što će ukloniti registraciju s poslužitelja. Trebat ćete ponovno registrirati vaš broj telefona kako biste ih koristili u budućnosti." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Enter šalje poruku" 151 | 152 | msgid "Submit debug log" 153 | msgstr "Pošalji debug zapis" 154 | 155 | msgid "Success!" 156 | msgstr "Uspješno!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Potvrdi broj" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal će sada automatski provjeriti vaš broj sa SMS porukom." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Čekanje na SMS potvrdu..." 166 | 167 | msgid "Sent" 168 | msgstr "Poslano" 169 | 170 | msgid "Received" 171 | msgstr "Primljeno" 172 | 173 | msgid "New message" 174 | msgstr "Nova poruka" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Resetiranje sigurne sesije." 178 | 179 | msgid "You have left the group." 180 | msgstr "Napustili ste grupu." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Njihov identitet (oni čitaju):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Vaš identitet (vi čitate):" 187 | -------------------------------------------------------------------------------- /po/in.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: in\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "Gambar" 15 | 16 | msgid "Video" 17 | msgstr "Video" 18 | 19 | msgid "Audio" 20 | msgstr "Audio" 21 | 22 | msgid "Contact" 23 | msgstr "Kontak" 24 | 25 | msgid "Settings" 26 | msgstr "Konfigurasi" 27 | 28 | msgid "Advanced" 29 | msgstr "Lanjutan" 30 | 31 | msgid "Save" 32 | msgstr "Simpan" 33 | 34 | msgid "Search" 35 | msgstr "Cari" 36 | 37 | msgid "Refresh" 38 | msgstr "Perbaharui" 39 | 40 | msgid "New group" 41 | msgstr "Grup baru" 42 | 43 | msgid "Update group" 44 | msgstr "Perbarui grup" 45 | 46 | msgid "Group name" 47 | msgstr "Nama grup" 48 | 49 | msgid "Call" 50 | msgstr "Panggil" 51 | 52 | msgid "Reset secure session" 53 | msgstr "Setel ulang sesi aman" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "Atur kembali sesi aman?" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "Ini dapat membantu jika Anda mengalami masalah enkripsi dalam percakapan ini. Pesan Anda akan disimpan." 60 | 61 | msgid "Verify identity" 62 | msgstr "Verifikasi identitas" 63 | 64 | msgid "Recipients list" 65 | msgstr "Daftar Penerima" 66 | 67 | msgid "Leave group" 68 | msgstr "Keluar grup" 69 | 70 | msgid "Leave group?" 71 | msgstr "Tinggalkan grup?" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "Apakah Anda yakin ingin meninggalkan grup ini?" 75 | 76 | msgid "Delete conversation" 77 | msgstr "Hapus percakapan" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "Hapus percakapan?" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "Ini akan menghapus secara permanen seluruh pesan dalam percakapan." 84 | 85 | msgid "Select all" 86 | msgstr "Pilih semua" 87 | 88 | msgid "Message details" 89 | msgstr "Rincian pesan" 90 | 91 | msgid "Copy text" 92 | msgstr "Salin teks" 93 | 94 | msgid "Forward message" 95 | msgstr "Teruskan pesan" 96 | 97 | msgid "Delete message" 98 | msgstr "Hapus pesan" 99 | 100 | msgid "Send Signal message" 101 | msgstr "Kirim pesan Signal" 102 | 103 | msgid "Delete" 104 | msgstr "Hapus" 105 | 106 | msgid "Group members" 107 | msgstr "Anggota grup" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "NEGARA ANDA" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "KODE NEGARA ANDA DAN NOMOR TELEPON" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "Verifikasi nomor telepon Anda untuk tersambung dengan Signal." 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "Pendaftaran mengirimkan beberapa informasi kontak ke server. Tetapi tidak disimpan." 123 | 124 | msgid "Register" 125 | msgstr "Daftar" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "Periksa lagi bahwa ini adalah nomor Anda! Kami akan memverifikasinya dengan SMS." 129 | 130 | msgid "Cancel" 131 | msgstr "Batal" 132 | 133 | msgid "Mark all read" 134 | msgstr "Tandai semua dibaca" 135 | 136 | msgid "Help" 137 | msgstr "Batuan" 138 | 139 | msgid "Unregistering" 140 | msgstr "Berhenti registrasi" 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "Nonaktifkan pesan dan panggilan Signal?" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "Menonaktifkan pesan dan pangggilan Signal dengan berhenti registrasi dari server. Anda perlu mendaftar ulang nomor telepon Anda untuk menggunakannya lagi di kemudian hari." 147 | 148 | msgid "Enter key sends" 149 | msgstr "Enter untuk mengirim" 150 | 151 | msgid "Submit debug log" 152 | msgstr "Kirim debug log" 153 | 154 | msgid "Success!" 155 | msgstr "Sukses!" 156 | 157 | msgid "Verifying number" 158 | msgstr "Memverifikasi Nomor" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "Signal akan secara otomatis memverifikasi nomor Anda menggunakan konfirmasi pesan SMS." 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "Menunggu Verifikasi SMS..." 165 | 166 | msgid "Sent" 167 | msgstr "Terkirim" 168 | 169 | msgid "Received" 170 | msgstr "Diterima" 171 | 172 | msgid "New message" 173 | msgstr "Pesan baru" 174 | 175 | msgid "Secure session reset." 176 | msgstr "Sesi aman disetel ulang." 177 | 178 | msgid "You have left the group." 179 | msgstr "Anda telah keluar dari grup." 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "Identitas mereka (terbaca):" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "Identitas anda (terbaca):" 186 | -------------------------------------------------------------------------------- /po/iw.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: iw\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "תמונה" 15 | 16 | msgid "Video" 17 | msgstr "סרט" 18 | 19 | msgid "Audio" 20 | msgstr "קול" 21 | 22 | msgid "Contact" 23 | msgstr "איש קשר" 24 | 25 | msgid "Settings" 26 | msgstr "הגדרות" 27 | 28 | msgid "Advanced" 29 | msgstr "מתקדם" 30 | 31 | msgid "Save" 32 | msgstr "שמירה" 33 | 34 | msgid "Search" 35 | msgstr "חיפוש" 36 | 37 | msgid "Refresh" 38 | msgstr "רענון" 39 | 40 | msgid "New group" 41 | msgstr "קבוצה חדשה" 42 | 43 | msgid "Update group" 44 | msgstr "עדכון קבוצה" 45 | 46 | msgid "Group name" 47 | msgstr "שם הקבוצה" 48 | 49 | msgid "Call" 50 | msgstr "התקשר" 51 | 52 | msgid "Reset secure session" 53 | msgstr "אתחול התחברות מאובטחת" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "לאתחל מחדש התחברות מאובטחת?" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "זה יכול לעזור עם יש לך בעיות הצפנה בשיחה הזאת. המסרים שלך יישמרו." 60 | 61 | msgid "Verify identity" 62 | msgstr "אימות זהות" 63 | 64 | msgid "Recipients list" 65 | msgstr "רשימת נמענים" 66 | 67 | msgid "Leave group" 68 | msgstr "לעזוב את הקבוצה" 69 | 70 | msgid "Leave group?" 71 | msgstr "לעזוב את הקבוצה?" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "האם ברצונך באמת לעזוב את הקבוצה?" 75 | 76 | msgid "Delete conversation" 77 | msgstr "למחוק את השיחה" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "למחוק שיחה?" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "זה ימחק לצמיתות את כל המסרים בשיחה הזאת." 84 | 85 | msgid "Select all" 86 | msgstr "לבחור הכול" 87 | 88 | msgid "Message details" 89 | msgstr "פרטי מסר" 90 | 91 | msgid "Copy text" 92 | msgstr "העתקת טקסט" 93 | 94 | msgid "Forward message" 95 | msgstr "העברת מסר" 96 | 97 | msgid "Delete message" 98 | msgstr "מחיקת מסר" 99 | 100 | msgid "Send Signal message" 101 | msgstr "שליחת מסר בסיגנל" 102 | 103 | msgid "Delete" 104 | msgstr "מחיקה" 105 | 106 | msgid "Group members" 107 | msgstr "חברי הקבוצה" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "התחברות עם סיגנל" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "המדינה שלך" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "קוד המדינה שלך ומספר הטלפון" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "יש לאמת את מספר הטלפון שלך כדי להתחבר עם סיגנל." 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "הרישום שולח פרטי קשר מסוימים לשרת. הם לא יישמרו." 123 | 124 | msgid "Register" 125 | msgstr "רישום" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "נא לוודא שזה המספר שלך! אנחנו עומדים לאמת אותו באמצעות SMS." 129 | 130 | msgid "Cancel" 131 | msgstr "ביטול" 132 | 133 | msgid "Mark all read" 134 | msgstr "לסמן שקראתי את הכול" 135 | 136 | msgid "Help" 137 | msgstr "עזרה" 138 | 139 | msgid "Unregistering" 140 | msgstr "ביטול רישום" 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "לכבות מסרים ושיחות קוליות של סיגנל?" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "לכבות את המסרים ואת השיחות הקוליות של סיגנל באמצעות ביטול רישום בשרת. יהיה צריך לרשום מחדש את מספר הטלפון שלך מחדש כדי להשתמש בהם שוב בעתיד." 147 | 148 | msgid "Enter key sends" 149 | msgstr "מקש Enter שולח" 150 | 151 | msgid "Submit debug log" 152 | msgstr "שליחת יומן תיקון שגיאות" 153 | 154 | msgid "Success!" 155 | msgstr "זה עבד!" 156 | 157 | msgid "Verifying number" 158 | msgstr "מאמת את המספר" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "סיגנל יאמת עכשיו את המספר שלך אוטומטית באמצעות SMS." 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "ממתין לאימות SMS..." 165 | 166 | msgid "Sent" 167 | msgstr "נשלח" 168 | 169 | msgid "Received" 170 | msgstr "התקבל" 171 | 172 | msgid "New message" 173 | msgstr "מסר חדש" 174 | 175 | msgid "Secure session reset." 176 | msgstr "התחברות מאובטחת אותחלה." 177 | 178 | msgid "You have left the group." 179 | msgstr "עזבת את הקבוצה." 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "הזהות שלהם:" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "הזהות שלך:" 186 | -------------------------------------------------------------------------------- /po/ja.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: ja\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=1; plural=0;\n" 14 | msgid "Image" 15 | msgstr "" 16 | 17 | msgid "Video" 18 | msgstr "" 19 | 20 | msgid "Audio" 21 | msgstr "" 22 | 23 | msgid "Contact" 24 | msgstr "" 25 | 26 | msgid "Settings" 27 | msgstr "設定" 28 | 29 | msgid "Advanced" 30 | msgstr "詳細設定" 31 | 32 | msgid "Save" 33 | msgstr "保存" 34 | 35 | msgid "Search" 36 | msgstr "検索" 37 | 38 | msgid "Refresh" 39 | msgstr "" 40 | 41 | msgid "New group" 42 | msgstr "新規グループ" 43 | 44 | msgid "Update group" 45 | msgstr "グループを更新する" 46 | 47 | msgid "Group name" 48 | msgstr "グループ名" 49 | 50 | msgid "Call" 51 | msgstr "通話" 52 | 53 | msgid "Reset secure session" 54 | msgstr "" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "セキュア・セッションをリセットしますか?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "" 61 | 62 | msgid "Verify identity" 63 | msgstr "本人確認" 64 | 65 | msgid "Recipients list" 66 | msgstr "受信者リスト" 67 | 68 | msgid "Leave group" 69 | msgstr "グループを抜ける" 70 | 71 | msgid "Leave group?" 72 | msgstr "グループを抜けますか?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "このグループを本当に抜けますか?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "" 85 | 86 | msgid "Select all" 87 | msgstr "すべて選択" 88 | 89 | msgid "Message details" 90 | msgstr "メッセージの詳細" 91 | 92 | msgid "Copy text" 93 | msgstr "テキストをコピー" 94 | 95 | msgid "Forward message" 96 | msgstr "メッセージの転送" 97 | 98 | msgid "Delete message" 99 | msgstr "メッセージの削除" 100 | 101 | msgid "Send Signal message" 102 | msgstr "" 103 | 104 | msgid "Delete" 105 | msgstr "削除" 106 | 107 | msgid "Group members" 108 | msgstr "グループメンバー" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "あなたの国" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "あなたの国番号と電話番号" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "" 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "登録にはサーバーへのコンタクト情報の送信が必要です。その情報は保存されません。" 124 | 125 | msgid "Register" 126 | msgstr "登録" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "この貴方のナンバーを二重チェック! SMSで合っているか検証します。" 130 | 131 | msgid "Cancel" 132 | msgstr "中止" 133 | 134 | msgid "Mark all read" 135 | msgstr "すべて既読にする" 136 | 137 | msgid "Help" 138 | msgstr "" 139 | 140 | msgid "Unregistering" 141 | msgstr "登録取り消し" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Signalでのメッセージ・通話を無効にしますか?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "サーバーから登録を取消します。Signalを使ったメッセージのやり取りや通話はできなくなります。 再びSignalを使うためには、あなたの電話番号を再登録をする必要があります。" 148 | 149 | msgid "Enter key sends" 150 | msgstr "エンターキーで送信" 151 | 152 | msgid "Submit debug log" 153 | msgstr "" 154 | 155 | msgid "Success!" 156 | msgstr "成功しました。" 157 | 158 | msgid "Verifying number" 159 | msgstr "番号を確認中..." 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "" 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "検証用SMSをお待ち…" 166 | 167 | msgid "Sent" 168 | msgstr "送信" 169 | 170 | msgid "Received" 171 | msgstr "受信" 172 | 173 | msgid "New message" 174 | msgstr "新規メッセージ" 175 | 176 | msgid "Secure session reset." 177 | msgstr "" 178 | 179 | msgid "You have left the group." 180 | msgstr "グループを出ました。" 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "相手の認証キー(通信相手が読む):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "自分の認証キー(自分が読む):" 187 | -------------------------------------------------------------------------------- /po/kn-rIN.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: kn-rIN\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "" 15 | 16 | msgid "Video" 17 | msgstr "" 18 | 19 | msgid "Audio" 20 | msgstr "" 21 | 22 | msgid "Contact" 23 | msgstr "" 24 | 25 | msgid "Settings" 26 | msgstr "ಸೆಟ್ಟಿಂಗ್ಗಳು" 27 | 28 | msgid "Advanced" 29 | msgstr "ಸುಧಾರಿತ" 30 | 31 | msgid "Save" 32 | msgstr "ಉಳಿಸಿ" 33 | 34 | msgid "Search" 35 | msgstr "ಹುಡುಕಿ" 36 | 37 | msgid "Refresh" 38 | msgstr "" 39 | 40 | msgid "New group" 41 | msgstr "ಹೋಸ ಸಮೂಹ" 42 | 43 | msgid "Update group" 44 | msgstr "ಸಮೂಹವನ್ನು ನವೀಕರಿಸಿ" 45 | 46 | msgid "Group name" 47 | msgstr "ಸಮೂಹದ ಹೆಸರು" 48 | 49 | msgid "Call" 50 | msgstr "ಕರೆ" 51 | 52 | msgid "Reset secure session" 53 | msgstr "" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "ಸುರಕ್ಷಿತ ಸೆಷನ್ ಮರು ಪ್ರಾರಂಭಿಸಿ?" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "" 60 | 61 | msgid "Verify identity" 62 | msgstr "ಗುರುತನ್ನು ಪರಿಶೀಲಿಸಿ" 63 | 64 | msgid "Recipients list" 65 | msgstr "ಸ್ವೀಕೃತದಾರರ ಪಟ್ಟಿ" 66 | 67 | msgid "Leave group" 68 | msgstr "ಸಮೂಹವನ್ನು ಬಿಟ್ಟುಬಿಡಿ" 69 | 70 | msgid "Leave group?" 71 | msgstr "ಸಮೂಹವನ್ನು ಬಿಡುವಿರ?" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "ಈ ಸಮೂಹ ಬಿಡವ ಬಯಕೆಯನ್ನು ನೀವು ಖಚಿತವಾಗಿರುವಿರಾ?" 75 | 76 | msgid "Delete conversation" 77 | msgstr "" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "ಸಂವಾದವನ್ನು ಅಳಿಸಿಹಾಕಲೆ?" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "" 84 | 85 | msgid "Select all" 86 | msgstr "ಎಲ್ಲಾ ಆಯ್ಕೆಮಾಡಿ" 87 | 88 | msgid "Message details" 89 | msgstr "ಸಂದೇಶದ ವಿವರಗಳು" 90 | 91 | msgid "Copy text" 92 | msgstr "ಪಠ್ಯ ನಕಲಿಸು" 93 | 94 | msgid "Forward message" 95 | msgstr "ಸಂದೇಶವನ್ನು ರವಾನಿಸು" 96 | 97 | msgid "Delete message" 98 | msgstr "ಸಂದೇಶವನ್ನು ಅಳಿಸು" 99 | 100 | msgid "Send Signal message" 101 | msgstr "" 102 | 103 | msgid "Delete" 104 | msgstr "ಅಳಿಸಿಹಾಕು" 105 | 106 | msgid "Group members" 107 | msgstr "ಸಮೂಹದ ಸದಸ್ಯರು" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "ನಿಮ್ಮ ರಾಷ್ಟ್ರ" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "ನಿಮ್ಮ ರಾಷ್ಟ್ರ ಸಂಕೇತ ಹಾಗೂ ದೂರವಾಣಿ ಸಂಖ್ಯೆ" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "" 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "ನೋಂದಣಿ ಸರ್ವರ್ ಗೆ ಕೆಲ ಸಂಪರ್ಕದ ಮಾಹಿತಿಯನ್ನು ರವಾನಿಸುತ್ತದೆ. ಅದನ್ನು ಸಂಗ್ರಹಿಸುವುದಿಲ್ಲ." 123 | 124 | msgid "Register" 125 | msgstr "ನೋಂದಾಯಿಸು" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "ಈದು ನಿಮ್ಮ ಸಂಖ್ಯೆ ಎಂದು ಮರುಪರಿಶೀಲಿಸಿ! ನಾವು ಒಂದು ಪರಿಶೀಲಿನ ಎಸ್ ಎಮ್ ಎಸ್ ಅನ್ನು ಕಳುಸಲಿದ್ದೇವೆ." 129 | 130 | msgid "Cancel" 131 | msgstr "ರದ್ದುಮಾಡು" 132 | 133 | msgid "Mark all read" 134 | msgstr "ಎಲ್ಲವನ್ನು ಓದಿದೆ ಎಂದು ಗುರುತು ಮಾಡಿ" 135 | 136 | msgid "Help" 137 | msgstr "" 138 | 139 | msgid "Unregistering" 140 | msgstr "ನೋಂದಣಿಯನ್ನು ರದ್ದುಗೊಳಿಸಲಾಗುತ್ತಿದೆ..." 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "ಸಿಗ್ನಲ್ ಸಂದೇಶಗಳು ಹಾಗು ಕರೆಗಳನ್ನು ನಿಷ್ಕ್ರಿಯಗೊಳಿಸಿ?" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "" 147 | 148 | msgid "Enter key sends" 149 | msgstr "Enter ಕಳುಹಿಸುತ್ತದೆ" 150 | 151 | msgid "Submit debug log" 152 | msgstr "" 153 | 154 | msgid "Success!" 155 | msgstr "ಯಶಸ್ವಿಯಾಗಿದೆ!" 156 | 157 | msgid "Verifying number" 158 | msgstr "ಸಂಖ್ಯೆಯನ್ನು ಪರಿಶೀಲಿಸಲಾಗುತ್ತಿದೆ" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "" 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "ಎಸ್ಎಂಎಸ್ ಪರಿಶೀಲನೆಗಾಗಿ ನಿರೀಕ್ಷಿಸಲಾಗುತ್ತಿದೆ ..." 165 | 166 | msgid "Sent" 167 | msgstr "ಕಳುಹಿಸಲಾಗಿದೆ" 168 | 169 | msgid "Received" 170 | msgstr "ಸ್ವೀಕರಿಸಲಾಗಿದೆ" 171 | 172 | msgid "New message" 173 | msgstr "ಹೊಸ ಸಂದೇಶ" 174 | 175 | msgid "Secure session reset." 176 | msgstr "" 177 | 178 | msgid "You have left the group." 179 | msgstr "ನೀವು ಗುಂಪನ್ನು ಬಿಟ್ಟಿದ್ದೀರ." 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "ಅವರ ಗುರುತು (ಅವರು ಓದುವುದು):" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "ನಿಮ್ಮ ಗುರುತು (ನೀವು ಓದುವುದು):" 186 | -------------------------------------------------------------------------------- /po/ko.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: ko\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=1; plural=0;\n" 14 | msgid "Image" 15 | msgstr "이미지" 16 | 17 | msgid "Video" 18 | msgstr "동영상" 19 | 20 | msgid "Audio" 21 | msgstr "오디오" 22 | 23 | msgid "Contact" 24 | msgstr "연락처" 25 | 26 | msgid "Settings" 27 | msgstr "설정" 28 | 29 | msgid "Advanced" 30 | msgstr "고급" 31 | 32 | msgid "Save" 33 | msgstr "저장" 34 | 35 | msgid "Search" 36 | msgstr "검색" 37 | 38 | msgid "Refresh" 39 | msgstr "새로고침" 40 | 41 | msgid "New group" 42 | msgstr "새 그룹" 43 | 44 | msgid "Update group" 45 | msgstr "그룹 업데이트" 46 | 47 | msgid "Group name" 48 | msgstr "그룹 이름" 49 | 50 | msgid "Call" 51 | msgstr "전화걸기" 52 | 53 | msgid "Reset secure session" 54 | msgstr "암호화된 세션 초기화" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "암호화된 세션을 초기화하시겠습니까?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "이 대화에 암호화 문제가 발생할 경우 이 문제를 해결할 수 있습니다. 모든 메시지가 보관됩니다." 61 | 62 | msgid "Verify identity" 63 | msgstr "인증 키 확인" 64 | 65 | msgid "Recipients list" 66 | msgstr "수신자 목록" 67 | 68 | msgid "Leave group" 69 | msgstr "그룹 나가기" 70 | 71 | msgid "Leave group?" 72 | msgstr "그룹에서 나가시겠습니까?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "이 그룹에서 나가시겠습니까?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "대화 삭제" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "대화를 삭제하시겠습니까?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "이 대화에 있는 모든 메시지가 영구 삭제됩니다." 85 | 86 | msgid "Select all" 87 | msgstr "모두 선택" 88 | 89 | msgid "Message details" 90 | msgstr "메시지 세부정보" 91 | 92 | msgid "Copy text" 93 | msgstr "텍스트 복사" 94 | 95 | msgid "Forward message" 96 | msgstr "메시지 전달" 97 | 98 | msgid "Delete message" 99 | msgstr "메시지 삭제" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Signal 메시지 보내기" 103 | 104 | msgid "Delete" 105 | msgstr "삭제" 106 | 107 | msgid "Group members" 108 | msgstr "그룹 멤버" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "Signal로 연결" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "국가" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "국제전화 나라 번호 및 전화번호" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Signal에 연결을 위해 전화번호를 확인합니다." 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "가입할 때 일부 연락처 정보 서버에 전송되지만 저장되지 않습니다." 124 | 125 | msgid "Register" 126 | msgstr "가입" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "인증메시지를 SMS으로 보냅니다. 전화번호가 정확한지 확인하세요." 130 | 131 | msgid "Cancel" 132 | msgstr "취소" 133 | 134 | msgid "Mark all read" 135 | msgstr "모두 읽음으로 표시" 136 | 137 | msgid "Help" 138 | msgstr "도움말" 139 | 140 | msgid "Unregistering" 141 | msgstr "Signal 메시지 서비스 탈퇴" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Signal 메시지와 통화를 사용 중지하시겠습니까?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "서버에 탈퇴하여 Signal 메시지와 통화를 사용 중지합니다. 다시 사용하려면 전화번호를 입력해 재가입해야 합니다." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Enter키로 메시지 보내기" 151 | 152 | msgid "Submit debug log" 153 | msgstr "디버그 로그 보내기" 154 | 155 | msgid "Success!" 156 | msgstr "성공" 157 | 158 | msgid "Verifying number" 159 | msgstr "전화번호 확인" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal이 자동 SMS 인증메시지로 전화번호를 확인합니다." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "SMS 인증메시지 기다리는 중…" 166 | 167 | msgid "Sent" 168 | msgstr "보낸 시간:" 169 | 170 | msgid "Received" 171 | msgstr "받은 시간:" 172 | 173 | msgid "New message" 174 | msgstr "새 메시지" 175 | 176 | msgid "Secure session reset." 177 | msgstr "암호화된 세션이 초기화되었습니다." 178 | 179 | msgid "You have left the group." 180 | msgstr "그룹에서 퇴장했습니다." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "상대방의 인증 키 지문 (상대방이 읽음):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "내 인증 키 지문 (내가 읽음):" 187 | -------------------------------------------------------------------------------- /po/mk.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: mk\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "" 15 | 16 | msgid "Video" 17 | msgstr "" 18 | 19 | msgid "Audio" 20 | msgstr "Звук" 21 | 22 | msgid "Contact" 23 | msgstr "" 24 | 25 | msgid "Settings" 26 | msgstr "Подесувања" 27 | 28 | msgid "Advanced" 29 | msgstr "Напредни подесувања" 30 | 31 | msgid "Save" 32 | msgstr "Зачувај" 33 | 34 | msgid "Search" 35 | msgstr "Барај" 36 | 37 | msgid "Refresh" 38 | msgstr "" 39 | 40 | msgid "New group" 41 | msgstr "Нова група" 42 | 43 | msgid "Update group" 44 | msgstr "Ажурирај група" 45 | 46 | msgid "Group name" 47 | msgstr "Наслов на група" 48 | 49 | msgid "Call" 50 | msgstr "Повикај" 51 | 52 | msgid "Reset secure session" 53 | msgstr "" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "" 60 | 61 | msgid "Verify identity" 62 | msgstr "Проверете идентитет" 63 | 64 | msgid "Recipients list" 65 | msgstr "Листа на примачи" 66 | 67 | msgid "Leave group" 68 | msgstr "Напушти група" 69 | 70 | msgid "Leave group?" 71 | msgstr "Напушти група?" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "Дали сте сигурни дека сакате да ја напуштите групата?" 75 | 76 | msgid "Delete conversation" 77 | msgstr "Избриши разговор" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "" 84 | 85 | msgid "Select all" 86 | msgstr "Изберете се" 87 | 88 | msgid "Message details" 89 | msgstr "Детали за пораката" 90 | 91 | msgid "Copy text" 92 | msgstr "Копирај текст" 93 | 94 | msgid "Forward message" 95 | msgstr "Проследи порака" 96 | 97 | msgid "Delete message" 98 | msgstr "Избриши порака" 99 | 100 | msgid "Send Signal message" 101 | msgstr "" 102 | 103 | msgid "Delete" 104 | msgstr "Избриши" 105 | 106 | msgid "Group members" 107 | msgstr "Членови на групата" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "Конектирајте се со Signal" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "ВАШАТА ДРЖАВА" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "ПОВИКУВАЧКИ БРОЈ ЗА ВАШАТА ДРЖАВА И ТЕЛЕФОНСКИ БРОЈ" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "" 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "Регистрацијата испраќа некои ваши контакт информации на серверот. Овие информации нема да трајно да се зачуваат." 123 | 124 | msgid "Register" 125 | msgstr "Регистрирајте се" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "Проверете уште еднаш дали е ова вашиот број. Наскоро ќе го веривикуваме со SMS порака." 129 | 130 | msgid "Cancel" 131 | msgstr "Откажи" 132 | 133 | msgid "Mark all read" 134 | msgstr "Обележи ги сите како прочитани" 135 | 136 | msgid "Help" 137 | msgstr "Помош" 138 | 139 | msgid "Unregistering" 140 | msgstr "Одјавување" 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "" 147 | 148 | msgid "Enter key sends" 149 | msgstr "Enter испраќа порака" 150 | 151 | msgid "Submit debug log" 152 | msgstr "" 153 | 154 | msgid "Success!" 155 | msgstr "Успешно!" 156 | 157 | msgid "Verifying number" 158 | msgstr "Верификација на бројот" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "" 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "Се чека за SMS потврда..." 165 | 166 | msgid "Sent" 167 | msgstr "Испратено" 168 | 169 | msgid "Received" 170 | msgstr "Примено" 171 | 172 | msgid "New message" 173 | msgstr "Нова порака" 174 | 175 | msgid "Secure session reset." 176 | msgstr "" 177 | 178 | msgid "You have left the group." 179 | msgstr "Ја напуштивте групата." 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "Нивен идентитет (тие читаат):" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "Ваш идентитет (вие читате):" 186 | -------------------------------------------------------------------------------- /po/no.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: no\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 14 | msgid "Image" 15 | msgstr "Bilde" 16 | 17 | msgid "Video" 18 | msgstr "Video" 19 | 20 | msgid "Audio" 21 | msgstr "Lyd" 22 | 23 | msgid "Contact" 24 | msgstr "Kontakt" 25 | 26 | msgid "Settings" 27 | msgstr "Innstillinger" 28 | 29 | msgid "Advanced" 30 | msgstr "Avansert" 31 | 32 | msgid "Save" 33 | msgstr "Lagre" 34 | 35 | msgid "Search" 36 | msgstr "Søk" 37 | 38 | msgid "Refresh" 39 | msgstr "Refresh" 40 | 41 | msgid "New group" 42 | msgstr "Ny gruppe" 43 | 44 | msgid "Update group" 45 | msgstr "Oppdater gruppe" 46 | 47 | msgid "Group name" 48 | msgstr "Gruppenavn" 49 | 50 | msgid "Call" 51 | msgstr "Ring" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Nullstill sikker sesjon" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Nullstill sikker sesjon?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Dette kan hjelpe dersom du har krypteringsproblemer i denne samtalen. Meldingene dine vil bli lagret." 61 | 62 | msgid "Verify identity" 63 | msgstr "Bekreft identitet" 64 | 65 | msgid "Recipients list" 66 | msgstr "Mottakerliste" 67 | 68 | msgid "Leave group" 69 | msgstr "Forlat gruppe" 70 | 71 | msgid "Leave group?" 72 | msgstr "Forlat gruppen?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Er du sikker på at du ønsker å forlate denne gruppen?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Slett samtale" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Slett samtale?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Dette vil slette alle meldingene i denne samtalen." 85 | 86 | msgid "Select all" 87 | msgstr "Merk alt" 88 | 89 | msgid "Message details" 90 | msgstr "Meldingsdetaljer" 91 | 92 | msgid "Copy text" 93 | msgstr "Kopier tekst" 94 | 95 | msgid "Forward message" 96 | msgstr "Videresend melding" 97 | 98 | msgid "Delete message" 99 | msgstr "Slett melding" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Send Signal melding" 103 | 104 | msgid "Delete" 105 | msgstr "Slett" 106 | 107 | msgid "Group members" 108 | msgstr "Gruppemedlemmer" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "Kontakt gjennom Signal" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "DITT LAND" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "DIN LANDSKODE OG TELEFONNUMMER" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Verifiser telefonnummeret dit for å koble til Signal." 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Registrering sender noe kontaktinformasjon til serveren. Det blir ikke lagret." 124 | 125 | msgid "Register" 126 | msgstr "Registrer" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Dobbelsjekk at dette er nummeret ditt! Vi er i ferd med å verifisere det med en SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "Avbryt" 133 | 134 | msgid "Mark all read" 135 | msgstr "Marker alle som lest" 136 | 137 | msgid "Help" 138 | msgstr "Hjelp" 139 | 140 | msgid "Unregistering" 141 | msgstr "Avregistrerer" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Deaktiver Signal meldinger og anrop?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Dette vil deaktivere Signal meldinger og anrop ved å avregistrere deg fra serveren. Om du vil benytte Signal for meldinger og anrop igjen i fremtiden må du registrere telefonnummeret ditt på nytt." 148 | 149 | msgid "Enter key sends" 150 | msgstr "\"Enter\" sender" 151 | 152 | msgid "Submit debug log" 153 | msgstr "Send debug logg" 154 | 155 | msgid "Success!" 156 | msgstr "Suksess!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Verifiserer nummer" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal vil nå automatisk verifisere nummeret ditt ved å sende en bekreftelse via SMS." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Venter på SMS verifikasjon..." 166 | 167 | msgid "Sent" 168 | msgstr "Sendt" 169 | 170 | msgid "Received" 171 | msgstr "Mottatt" 172 | 173 | msgid "New message" 174 | msgstr "Ny melding" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Sikker sesjon nullstilt." 178 | 179 | msgid "You have left the group." 180 | msgstr "Du har forlatt gruppen." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Deres identitet (de leser):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Din identitet (du leser):" 187 | -------------------------------------------------------------------------------- /po/pt-rBR.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: pt-rBR\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "Imagem" 15 | 16 | msgid "Video" 17 | msgstr "Vídeo" 18 | 19 | msgid "Audio" 20 | msgstr "Áudio" 21 | 22 | msgid "Contact" 23 | msgstr "Contato" 24 | 25 | msgid "Settings" 26 | msgstr "Configurações" 27 | 28 | msgid "Advanced" 29 | msgstr "Avançado" 30 | 31 | msgid "Save" 32 | msgstr "Salvar" 33 | 34 | msgid "Search" 35 | msgstr "Procurar" 36 | 37 | msgid "Refresh" 38 | msgstr "Atualizar" 39 | 40 | msgid "New group" 41 | msgstr "Novo grupo" 42 | 43 | msgid "Update group" 44 | msgstr "Atualizar grupo" 45 | 46 | msgid "Group name" 47 | msgstr "Nome do grupo" 48 | 49 | msgid "Call" 50 | msgstr "Chamar" 51 | 52 | msgid "Reset secure session" 53 | msgstr "Restaurar sessão segura" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "Reiniciar sessão segura?" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "Isto pode ajudar se você está tendo problemas de criptografia nesta conversa. Suas mensagens serão mantidas." 60 | 61 | msgid "Verify identity" 62 | msgstr "Verificar identidade" 63 | 64 | msgid "Recipients list" 65 | msgstr "Lista de destinatários" 66 | 67 | msgid "Leave group" 68 | msgstr "Sair do grupo" 69 | 70 | msgid "Leave group?" 71 | msgstr "Sair do grupo?" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "Tem certeza que deseja sair deste grupo?" 75 | 76 | msgid "Delete conversation" 77 | msgstr "Apagar conversa" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "Excluir conversa?" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "Isto irá excluir permanentemente todas as mensagens nesta conversa." 84 | 85 | msgid "Select all" 86 | msgstr "Selecionar todas" 87 | 88 | msgid "Message details" 89 | msgstr "Detalhes da mensagem" 90 | 91 | msgid "Copy text" 92 | msgstr "Copiar texto" 93 | 94 | msgid "Forward message" 95 | msgstr "Reencaminhar mensagem" 96 | 97 | msgid "Delete message" 98 | msgstr "Excluir mensagem" 99 | 100 | msgid "Send Signal message" 101 | msgstr "Enviar mensagem via Signal" 102 | 103 | msgid "Delete" 104 | msgstr "Excluir" 105 | 106 | msgid "Group members" 107 | msgstr "Membros do grupo" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "Conectar ao Signal" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "SEU PAÍS" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "SEU CÓDIGO DE PAÍS E NÚMERO TELEFÔNICO" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "Verifique o seu número de telefone para se conectar ao Signal." 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "O registro irá transmitir algumas informações de contato para o servidor. Elas não serão gravadas." 123 | 124 | msgid "Register" 125 | msgstr "Cadastrar" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "Verifique novamente que este é o seu número! Estamos prestes a verificá-lo com um SMS." 129 | 130 | msgid "Cancel" 131 | msgstr "Cancelar" 132 | 133 | msgid "Mark all read" 134 | msgstr "Marcar todas como lidas" 135 | 136 | msgid "Help" 137 | msgstr "Ajuda" 138 | 139 | msgid "Unregistering" 140 | msgstr "Descadastrar" 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "Desabilitar mensagens e chamadas Signal?" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "Desabilitar mensagens e chamadas Signal descadastrando-o do servidor. Você precisará recadastrar seu número de telefone para usar o Signal novamente no futuro." 147 | 148 | msgid "Enter key sends" 149 | msgstr "Tecla Enter envia" 150 | 151 | msgid "Submit debug log" 152 | msgstr "Enviar log de depuração" 153 | 154 | msgid "Success!" 155 | msgstr "Sucesso!" 156 | 157 | msgid "Verifying number" 158 | msgstr "Verificando número" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "Agora o Signal verificará o seu número automaticamente com uma mensagem SMS de confirmação." 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "Aguardando verificação por SMS..." 165 | 166 | msgid "Sent" 167 | msgstr "Enviada" 168 | 169 | msgid "Received" 170 | msgstr "Recebida" 171 | 172 | msgid "New message" 173 | msgstr "Nova mensagem" 174 | 175 | msgid "Secure session reset." 176 | msgstr "Sessão segura reiniciada." 177 | 178 | msgid "You have left the group." 179 | msgstr "Você saiu do grupo." 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "A identidade do destinatário (ele lê):" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "A sua identidade (você lê):" 186 | -------------------------------------------------------------------------------- /po/pt.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: pt\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 14 | msgid "Image" 15 | msgstr "Imagem" 16 | 17 | msgid "Video" 18 | msgstr "Vídeo" 19 | 20 | msgid "Audio" 21 | msgstr "Áudio" 22 | 23 | msgid "Contact" 24 | msgstr "Contacto" 25 | 26 | msgid "Settings" 27 | msgstr "Configurações" 28 | 29 | msgid "Advanced" 30 | msgstr "Avançado" 31 | 32 | msgid "Save" 33 | msgstr "Gravar" 34 | 35 | msgid "Search" 36 | msgstr "Procurar" 37 | 38 | msgid "Refresh" 39 | msgstr "Recarregar" 40 | 41 | msgid "New group" 42 | msgstr "Grupo novo" 43 | 44 | msgid "Update group" 45 | msgstr "Actualizar grupo" 46 | 47 | msgid "Group name" 48 | msgstr "Nome do grupo" 49 | 50 | msgid "Call" 51 | msgstr "Chamar" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Reiniciar sessão segura" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Reiniciar sessão segura?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Isto pode auxiliar caso tenha problemas de cifra nesta conversa. As suas mensagens serão mantidas." 61 | 62 | msgid "Verify identity" 63 | msgstr "Verificar identidade" 64 | 65 | msgid "Recipients list" 66 | msgstr "Lista de destinatários" 67 | 68 | msgid "Leave group" 69 | msgstr "Deixar grupo" 70 | 71 | msgid "Leave group?" 72 | msgstr "Deixar o grupo?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Tem a certeza que quer deixar este grupo?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Eliminar conversa" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Eliminar conversa?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Isto irá eliminar permanentemente todas as mensagens nesta conversa." 85 | 86 | msgid "Select all" 87 | msgstr "Seleccionar tudo" 88 | 89 | msgid "Message details" 90 | msgstr "Detalhes da mensagem" 91 | 92 | msgid "Copy text" 93 | msgstr "Copiar texto" 94 | 95 | msgid "Forward message" 96 | msgstr "Reencaminhar mensagem" 97 | 98 | msgid "Delete message" 99 | msgstr "Apagar mensagem" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Enviar mensagem Signal" 103 | 104 | msgid "Delete" 105 | msgstr "Apagar" 106 | 107 | msgid "Group members" 108 | msgstr "Membros do grupo" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "PAÍS" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "PAÍS E NÚMERO DE TELEFONE" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Verifique o seu número de telefone para contactar com Signal" 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "O registo irá transmitir alguma informação de contacto para o servidor. Esta não é armazenada." 124 | 125 | msgid "Register" 126 | msgstr "Registar" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Verifique que este é o seu número! Estamos prestes a confirmá-lo com uma SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "Cancelar" 133 | 134 | msgid "Mark all read" 135 | msgstr "Marcar todas como lidas" 136 | 137 | msgid "Help" 138 | msgstr "Ajuda" 139 | 140 | msgid "Unregistering" 141 | msgstr "A eliminar o registo..." 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Desabilitar mensagens e chamadas Signal?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Desactivar as mensagens Signal, eliminando o seu registo do servidor. Vai ser necessário re-registar o seu número de telefone se pretender utilizar esta funcionalidade novamente." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Tecla de enter envia" 151 | 152 | msgid "Submit debug log" 153 | msgstr "" 154 | 155 | msgid "Success!" 156 | msgstr "Sucesso!" 157 | 158 | msgid "Verifying number" 159 | msgstr "A verificar número" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal vai agora automaticamente verificar o seu número com um SMS de confirmação." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "A aguardar verificação sms..." 166 | 167 | msgid "Sent" 168 | msgstr "Enviado" 169 | 170 | msgid "Received" 171 | msgstr "Recebido" 172 | 173 | msgid "New message" 174 | msgstr "Mensagem nova" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Sessão segura reiniciada." 178 | 179 | msgid "You have left the group." 180 | msgstr "Abandonou o grupo." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "A identidade do destinatário (ele lê):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "A sua identidade (você lê):" 187 | -------------------------------------------------------------------------------- /po/sk.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: sk\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n" 14 | msgid "Image" 15 | msgstr "" 16 | 17 | msgid "Video" 18 | msgstr "" 19 | 20 | msgid "Audio" 21 | msgstr "Audio" 22 | 23 | msgid "Contact" 24 | msgstr "" 25 | 26 | msgid "Settings" 27 | msgstr "Nastavenia" 28 | 29 | msgid "Advanced" 30 | msgstr "Rozšírené" 31 | 32 | msgid "Save" 33 | msgstr "Uložiť" 34 | 35 | msgid "Search" 36 | msgstr "Hľadaj" 37 | 38 | msgid "Refresh" 39 | msgstr "" 40 | 41 | msgid "New group" 42 | msgstr "Nová skupina" 43 | 44 | msgid "Update group" 45 | msgstr "Aktualizuj skupinu" 46 | 47 | msgid "Group name" 48 | msgstr "Názov skupiny" 49 | 50 | msgid "Call" 51 | msgstr "Volaj" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Obnoviť zabezpečené spojenie" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "" 61 | 62 | msgid "Verify identity" 63 | msgstr "Over totožnosť" 64 | 65 | msgid "Recipients list" 66 | msgstr "Zoznam príjemcov" 67 | 68 | msgid "Leave group" 69 | msgstr "Opusti skupinu" 70 | 71 | msgid "Leave group?" 72 | msgstr "Opustiť skupinu?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Ste si istí že chcete opustiť túto skupinu?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "" 85 | 86 | msgid "Select all" 87 | msgstr "Označ všetko" 88 | 89 | msgid "Message details" 90 | msgstr "Podrobnosti správy" 91 | 92 | msgid "Copy text" 93 | msgstr "Kopíruj text" 94 | 95 | msgid "Forward message" 96 | msgstr "Prepošli správu" 97 | 98 | msgid "Delete message" 99 | msgstr "Zmaž správu" 100 | 101 | msgid "Send Signal message" 102 | msgstr "" 103 | 104 | msgid "Delete" 105 | msgstr "Zmazať" 106 | 107 | msgid "Group members" 108 | msgstr "Členovia skupiny" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "TVOJA KRAJINA" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "Tvoj kód krajiny a telefónne číslo" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "" 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Pri registrácii budú odoslané niektoré Vaše kontakné údaje na vzdialený server. Tieto údaje nebudú trvalo uložené." 124 | 125 | msgid "Register" 126 | msgstr "Registrovať" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Skontrolujte pre istotu znovu, že ste správne zadali Vaše telefónne číslo! Prebehne overenie pomocou SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "" 133 | 134 | msgid "Mark all read" 135 | msgstr "Označ všetky prečítané" 136 | 137 | msgid "Help" 138 | msgstr "" 139 | 140 | msgid "Unregistering" 141 | msgstr "" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "" 148 | 149 | msgid "Enter key sends" 150 | msgstr "Odoslať stiskom klávesy Enter" 151 | 152 | msgid "Submit debug log" 153 | msgstr "Odošli ladiaci log" 154 | 155 | msgid "Success!" 156 | msgstr "Operácia úspešne dokončená!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Overovanie čísla" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "" 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Čakanie na SMS overovanie..." 166 | 167 | msgid "Sent" 168 | msgstr "Odoslané" 169 | 170 | msgid "Received" 171 | msgstr "Prijaté" 172 | 173 | msgid "New message" 174 | msgstr "Nová správa" 175 | 176 | msgid "Secure session reset." 177 | msgstr "" 178 | 179 | msgid "You have left the group." 180 | msgstr "Opustili ste skupinu." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Ich totožnosť (oni vidia):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Vaša totožnosť (vy vidíte):" 187 | -------------------------------------------------------------------------------- /po/sr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: sr\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" 14 | msgid "Image" 15 | msgstr "Слика" 16 | 17 | msgid "Video" 18 | msgstr "Видео" 19 | 20 | msgid "Audio" 21 | msgstr "Звук" 22 | 23 | msgid "Contact" 24 | msgstr "Контакт" 25 | 26 | msgid "Settings" 27 | msgstr "Поставке" 28 | 29 | msgid "Advanced" 30 | msgstr "Напредно" 31 | 32 | msgid "Save" 33 | msgstr "Сачувај" 34 | 35 | msgid "Search" 36 | msgstr "Тражи" 37 | 38 | msgid "Refresh" 39 | msgstr "Освежи" 40 | 41 | msgid "New group" 42 | msgstr "Нова група" 43 | 44 | msgid "Update group" 45 | msgstr "Ажурирај групу" 46 | 47 | msgid "Group name" 48 | msgstr "Назив групе" 49 | 50 | msgid "Call" 51 | msgstr "Позови" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Ресетуј безбедну сесију" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Ресетовати безбедну сесију?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Може да помогне ако имате проблема са шифровањем у овој преписци. Поруке ће остати." 61 | 62 | msgid "Verify identity" 63 | msgstr "Овера идентитета" 64 | 65 | msgid "Recipients list" 66 | msgstr "Списак прималаца" 67 | 68 | msgid "Leave group" 69 | msgstr "Напусти групу" 70 | 71 | msgid "Leave group?" 72 | msgstr "Напустити групу?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Желите ли заиста да напустите ову групу?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Обриши преписку" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Обрисати преписку?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Ово ће трајно да обрише све поруке у овој преписци." 85 | 86 | msgid "Select all" 87 | msgstr "Изабери све" 88 | 89 | msgid "Message details" 90 | msgstr "Детаљи поруке" 91 | 92 | msgid "Copy text" 93 | msgstr "Копирај текст" 94 | 95 | msgid "Forward message" 96 | msgstr "Проследи поруку" 97 | 98 | msgid "Delete message" 99 | msgstr "Обриши поруку" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Пошаљи Сигнал поруку" 103 | 104 | msgid "Delete" 105 | msgstr "Обриши" 106 | 107 | msgid "Group members" 108 | msgstr "Чланови групе" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "Повежите се на Сигнал" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "ВАША ДРЖАВА" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "КÔД ДРЖАВЕ И БРОЈ ТЕЛЕФОНА" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Потврдите ваш број телефона да бисте се пријавили на Сигнал." 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Ово ће пренети неке податке о контактима на сервер. Подаци се не чувају." 124 | 125 | msgid "Register" 126 | msgstr "Пријави ме" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Проверите да ли је ово ваш број! Оверићемо га помоћу СМС поруке." 130 | 131 | msgid "Cancel" 132 | msgstr "Одустани" 133 | 134 | msgid "Mark all read" 135 | msgstr "Означи све прочитаним" 136 | 137 | msgid "Help" 138 | msgstr "Помоћ" 139 | 140 | msgid "Unregistering" 141 | msgstr "Одјављујем" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Онемогућити поруке и позиве преко Сигнала?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Онемогућите поруке и позиве преко СИгнала одјавом са сервера. Мораћете поново да пријавите ваш број телефона да бисте опет их користили убудуће." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Ентер тастер шаље" 151 | 152 | msgid "Submit debug log" 153 | msgstr "Пошаљи дневник исправљања грешака" 154 | 155 | msgid "Success!" 156 | msgstr "Успех!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Оверавам број" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Сигнал ће сада аутоматски да овери ваш број помоћу СМС поруке." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Чекам СМС оверу..." 166 | 167 | msgid "Sent" 168 | msgstr "Послата" 169 | 170 | msgid "Received" 171 | msgstr "Примљена" 172 | 173 | msgid "New message" 174 | msgstr "Нова порука" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Безбедна сесија је ресетована." 178 | 179 | msgid "You have left the group." 180 | msgstr "Напустили сте групу." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Њихов идентитет (они читају):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Ваш идентитет (ви читате):" 187 | -------------------------------------------------------------------------------- /po/sv.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: sv\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 14 | msgid "Image" 15 | msgstr "Bilder" 16 | 17 | msgid "Video" 18 | msgstr "Video" 19 | 20 | msgid "Audio" 21 | msgstr "Ljud" 22 | 23 | msgid "Contact" 24 | msgstr "Kontakt" 25 | 26 | msgid "Settings" 27 | msgstr "Inställningar" 28 | 29 | msgid "Advanced" 30 | msgstr "Avancerade" 31 | 32 | msgid "Save" 33 | msgstr "Spara" 34 | 35 | msgid "Search" 36 | msgstr "Sök" 37 | 38 | msgid "Refresh" 39 | msgstr "Uppdatera" 40 | 41 | msgid "New group" 42 | msgstr "Ny grupp" 43 | 44 | msgid "Update group" 45 | msgstr "Uppdatera grupp" 46 | 47 | msgid "Group name" 48 | msgstr "Gruppnamn" 49 | 50 | msgid "Call" 51 | msgstr "Ring" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Starta om säker session" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Starta om säker session?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Detta kan hjälpa om du har krypteringsproblem i den här konversationen. Dina meddelanden kommer behållas." 61 | 62 | msgid "Verify identity" 63 | msgstr "Verifiera identiteten" 64 | 65 | msgid "Recipients list" 66 | msgstr "Mottagarlista" 67 | 68 | msgid "Leave group" 69 | msgstr "Lämna grupp" 70 | 71 | msgid "Leave group?" 72 | msgstr "Lämna grupp?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Är du säker på att du vill lämna den här gruppen?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Radera konversation" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Radera konversation?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Detta kommer permanent radera alla meddelanden i den här konversationen." 85 | 86 | msgid "Select all" 87 | msgstr "Markera alla" 88 | 89 | msgid "Message details" 90 | msgstr "Meddelandedetaljer" 91 | 92 | msgid "Copy text" 93 | msgstr "Kopiera text" 94 | 95 | msgid "Forward message" 96 | msgstr "Vidarebefordra meddelande" 97 | 98 | msgid "Delete message" 99 | msgstr "Radera meddelande" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Skicka Signal-meddelande" 103 | 104 | msgid "Delete" 105 | msgstr "Radera" 106 | 107 | msgid "Group members" 108 | msgstr "Gruppmedlemmar" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "Anslut med Signal" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "DITT LAND" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "DIN LANDSKOD OCH TELEFONNUMMER" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Verifiera ditt telefonnummer för att ansluta till Signal." 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Registrering kommer att temporärt överföra viss kontaktinformation till servern." 124 | 125 | msgid "Register" 126 | msgstr "Registrera" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Dubbelkolla att det här är ditt nummer! Vi ska nu verifiera det med ett SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "Avbryt" 133 | 134 | msgid "Mark all read" 135 | msgstr "Markera alla lästa" 136 | 137 | msgid "Help" 138 | msgstr "Hjälp" 139 | 140 | msgid "Unregistering" 141 | msgstr "Avregistrering" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Inaktivera Signal-meddelanden och samtal?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Avaktivera Signal-meddelanden och samtal genom att avregistrera dig från servern. Du kommer behöva återregistrera ditt telefonnummer för att använda dem igen senare." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Entertangenten skickar" 151 | 152 | msgid "Submit debug log" 153 | msgstr "" 154 | 155 | msgid "Success!" 156 | msgstr "Lyckades!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Verifierar nummer" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal kommer nu att automatiskt verifiera ditt telefonnummer med ett sms." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Väntar på SMS-verifiering..." 166 | 167 | msgid "Sent" 168 | msgstr "Skickat" 169 | 170 | msgid "Received" 171 | msgstr "Mottaget" 172 | 173 | msgid "New message" 174 | msgstr "Nytt meddelande" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Säker session nollställd." 178 | 179 | msgid "You have left the group." 180 | msgstr "Du har lämnat gruppen." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Deras identitet (de läser):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Din identitet (du läser):" 187 | -------------------------------------------------------------------------------- /po/ta.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: ta\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "உருவம்" 15 | 16 | msgid "Video" 17 | msgstr "காணொளி" 18 | 19 | msgid "Audio" 20 | msgstr "ஒலி" 21 | 22 | msgid "Contact" 23 | msgstr "தொடர்பு" 24 | 25 | msgid "Settings" 26 | msgstr "அமைப்புகள்" 27 | 28 | msgid "Advanced" 29 | msgstr "மேம்பட்ட" 30 | 31 | msgid "Save" 32 | msgstr "சேமி" 33 | 34 | msgid "Search" 35 | msgstr "தேடல்" 36 | 37 | msgid "Refresh" 38 | msgstr "புதுப்பி." 39 | 40 | msgid "New group" 41 | msgstr "புதிய குழு" 42 | 43 | msgid "Update group" 44 | msgstr "குழுவை மேம்படுத்து" 45 | 46 | msgid "Group name" 47 | msgstr "குழுவின் பெயர்" 48 | 49 | msgid "Call" 50 | msgstr "அழை" 51 | 52 | msgid "Reset secure session" 53 | msgstr "" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "பாதுகாப்பான அமர்வை மீட்டமைக்க?" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "" 60 | 61 | msgid "Verify identity" 62 | msgstr "அடையாளத்தை சரிபார்" 63 | 64 | msgid "Recipients list" 65 | msgstr "பெறுநர்கள் பட்டியல்" 66 | 67 | msgid "Leave group" 68 | msgstr "குழுவிலுருந்து விலகு" 69 | 70 | msgid "Leave group?" 71 | msgstr "குழுவிலுருந்து விலகலாமா?" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "நீங்கள் குழுவை விட்டு நிச்சயமாக விலகவேண்டுமா?" 75 | 76 | msgid "Delete conversation" 77 | msgstr "" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "உரையாடலை நீக்கு ?" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "இந்த உரையாடலை நிரந்தரமாக நீக்கீவிடும்.." 84 | 85 | msgid "Select all" 86 | msgstr "அனைத்து தேர்வுசெய்" 87 | 88 | msgid "Message details" 89 | msgstr "செய்தி விவரங்கள்" 90 | 91 | msgid "Copy text" 92 | msgstr "உரை நகலெடு" 93 | 94 | msgid "Forward message" 95 | msgstr "செய்தியை முன்னோக்கியனுப்பு" 96 | 97 | msgid "Delete message" 98 | msgstr "செய்தியை நீக்கு" 99 | 100 | msgid "Send Signal message" 101 | msgstr "" 102 | 103 | msgid "Delete" 104 | msgstr "நீக்கு" 105 | 106 | msgid "Group members" 107 | msgstr "குழு உறுப்பினர்கள்" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "உங்கள் நாடு" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "உங்கள் நாட்டின் குறியீடு மற்றும் உங்கள் தொலைபேசி எண்" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "" 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "பதிவுசெய்வது சர்வருக்கு சில தொடர்புத்தகவல்களை அனுப்புகிறது. இது சேமிக்கப்படாது." 123 | 124 | msgid "Register" 125 | msgstr "பதிவு செய்" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "இந்த உங்கள் எண்தானா என இருமுறை சரிபாருங்கள்! நாங்கள் ஒரு SMS மூலம் இதை சரிபார்க்கப்போகிறோம்." 129 | 130 | msgid "Cancel" 131 | msgstr "இரத்து" 132 | 133 | msgid "Mark all read" 134 | msgstr "அனைத்தையும் படித்தாக குறியிடு" 135 | 136 | msgid "Help" 137 | msgstr "உதவி" 138 | 139 | msgid "Unregistering" 140 | msgstr "பதிவுநீக்குதல்" 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "சமிக்ஞை குறுஞ்செய்தி மற்றும் அழைப்பை முடக்கு ?" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "" 147 | 148 | msgid "Enter key sends" 149 | msgstr "பதிவு விசை அனுப்பும்" 150 | 151 | msgid "Submit debug log" 152 | msgstr "" 153 | 154 | msgid "Success!" 155 | msgstr "வெற்றி!" 156 | 157 | msgid "Verifying number" 158 | msgstr "எண் சரிபார்க்கபடுகிறது" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "" 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "சரிபார்க்கும் SMS-க்கு காத்திருக்கிறது..." 165 | 166 | msgid "Sent" 167 | msgstr "அனுப்பபட்டது" 168 | 169 | msgid "Received" 170 | msgstr "பெறப்பட்டது" 171 | 172 | msgid "New message" 173 | msgstr "புதிய செய்தி" 174 | 175 | msgid "Secure session reset." 176 | msgstr "" 177 | 178 | msgid "You have left the group." 179 | msgstr "நீங்கள் குழுவை விட்டு விலகினீர்கள்." 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "அவர்களின் அடையாளம் (அவர்கள் படிக்க):" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "உங்களின் அடையாளம் (நீங்கள் படிக்க):" 186 | -------------------------------------------------------------------------------- /po/tr.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: tr\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=2; plural=(n != 1);\n" 14 | msgid "Image" 15 | msgstr "Resim" 16 | 17 | msgid "Video" 18 | msgstr "Video" 19 | 20 | msgid "Audio" 21 | msgstr "Ses" 22 | 23 | msgid "Contact" 24 | msgstr "Kişi" 25 | 26 | msgid "Settings" 27 | msgstr "Ayarlar" 28 | 29 | msgid "Advanced" 30 | msgstr "Gelişmiş" 31 | 32 | msgid "Save" 33 | msgstr "Kaydet" 34 | 35 | msgid "Search" 36 | msgstr "Ara" 37 | 38 | msgid "Refresh" 39 | msgstr "Yenile" 40 | 41 | msgid "New group" 42 | msgstr "Yeni grup" 43 | 44 | msgid "Update group" 45 | msgstr "Grubu güncelle" 46 | 47 | msgid "Group name" 48 | msgstr "Grup adı" 49 | 50 | msgid "Call" 51 | msgstr "Arama" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Güvenli oturumu sıfırla" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Güvenli oturumu sıfırla?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Bu sohbette şifreleme sorunları yaşıyorsanız bu işlem yardımcı olabilir. Mesajlarınız saklanacaktır." 61 | 62 | msgid "Verify identity" 63 | msgstr "Kimliği doğrula" 64 | 65 | msgid "Recipients list" 66 | msgstr "Katılımcı listesi" 67 | 68 | msgid "Leave group" 69 | msgstr "Gruptan ayrıl" 70 | 71 | msgid "Leave group?" 72 | msgstr "Gruptan ayrıl?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Bu gruptan ayrılmak istediğinize emin misiniz?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Sohbeti sil" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Sohbeti sil?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Bu işlem bu sohbetteki tüm mesajları kalıcı olarak silecektir." 85 | 86 | msgid "Select all" 87 | msgstr "Hepsini seç" 88 | 89 | msgid "Message details" 90 | msgstr "Mesaj ayrıntıları" 91 | 92 | msgid "Copy text" 93 | msgstr "Metni kopyala" 94 | 95 | msgid "Forward message" 96 | msgstr "Mesajı yönlendir" 97 | 98 | msgid "Delete message" 99 | msgstr "Mesaj sil" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Signal mesajı gönder" 103 | 104 | msgid "Delete" 105 | msgstr "Sil" 106 | 107 | msgid "Group members" 108 | msgstr "Grup üyeleri" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "Signal'le bağlan" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "ÜLKENİZ" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "ÜLKE KODUNUZ VE TELEFON NUMARANIZ" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Signal'le bağlanmak için telefon numaranızı doğrulayın." 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Kayıt işlemi ile bazı kişi bilgileriniz sunucuya gönderilecek. Fakat bu bilgiler sunucuda saklanmıyor." 124 | 125 | msgid "Register" 126 | msgstr "Kayıt ol" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Numaranızı ikinci kez kontrol ediniz! Numaranızı bir SMS ile doğrulamak üzereyiz." 130 | 131 | msgid "Cancel" 132 | msgstr "İptal" 133 | 134 | msgid "Mark all read" 135 | msgstr "Tümünü okundu olarak işaretle" 136 | 137 | msgid "Help" 138 | msgstr "Yardım" 139 | 140 | msgid "Unregistering" 141 | msgstr "Kayıt siliniyor" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Signal mesajlarını ve aramalarını devre dışı bırak?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Sunucudaki kaydınızı silerek Signal mesajlarını ve aramalarını devre dışı bırakın. Bu özellikleri gelecekte yeniden kullanabilmeniz için telefon numaranızı tekrar kaydetmeniz gerekir." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Enter tuşu gönderir" 151 | 152 | msgid "Submit debug log" 153 | msgstr "Hata ayıklama günlüğünü gönder" 154 | 155 | msgid "Success!" 156 | msgstr "Başarılı!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Numara doğrulanıyor" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Signal şimdi otomatik bir onay SMS mesajı ile numaranızı doğrulayacak." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "SMS doğrulama bekleniliyor..." 166 | 167 | msgid "Sent" 168 | msgstr "Gönderildi" 169 | 170 | msgid "Received" 171 | msgstr "Alındı" 172 | 173 | msgid "New message" 174 | msgstr "Yeni mesaj" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Güvenli oturumu sıfırla." 178 | 179 | msgid "You have left the group." 180 | msgstr "Gruptan ayrıldınız." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Onların kimliği (onların okuduğu):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Sizin kimliğiniz (sizin okuduğunuz):" 187 | -------------------------------------------------------------------------------- /po/vi.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: vi\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | "Plural-Forms: nplurals=1; plural=0;\n" 14 | msgid "Image" 15 | msgstr "Ảnh" 16 | 17 | msgid "Video" 18 | msgstr "Đoạn phim" 19 | 20 | msgid "Audio" 21 | msgstr "Nhạc" 22 | 23 | msgid "Contact" 24 | msgstr "Liên lạc" 25 | 26 | msgid "Settings" 27 | msgstr "Thiết Đặt" 28 | 29 | msgid "Advanced" 30 | msgstr "Cao cấp" 31 | 32 | msgid "Save" 33 | msgstr "Lưu" 34 | 35 | msgid "Search" 36 | msgstr "Tìm kiếm" 37 | 38 | msgid "Refresh" 39 | msgstr "Làm mới" 40 | 41 | msgid "New group" 42 | msgstr "Tạo nhóm mới" 43 | 44 | msgid "Update group" 45 | msgstr "Cập nhật nhóm" 46 | 47 | msgid "Group name" 48 | msgstr "Tên nhóm" 49 | 50 | msgid "Call" 51 | msgstr "Gọi" 52 | 53 | msgid "Reset secure session" 54 | msgstr "Tái thiết lập phiên bảo mật" 55 | 56 | msgid "Reset secure session?" 57 | msgstr "Tái thiết lập phiên bảo mật?" 58 | 59 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 60 | msgstr "Thao tác này có thể giúp bạn khi đang có vấn đề về mã khoá cuộc hội thoại. Các tin nhắn sẽ được giữ lại." 61 | 62 | msgid "Verify identity" 63 | msgstr "Kiểm chứng danh tính" 64 | 65 | msgid "Recipients list" 66 | msgstr "Danh sách người nhận" 67 | 68 | msgid "Leave group" 69 | msgstr "Rời nhóm" 70 | 71 | msgid "Leave group?" 72 | msgstr "Rời nhóm?" 73 | 74 | msgid "Are you sure you want to leave this group?" 75 | msgstr "Bạn có chắc là muốn rời nhóm?" 76 | 77 | msgid "Delete conversation" 78 | msgstr "Xoá cuộc hội thoại" 79 | 80 | msgid "Delete conversation?" 81 | msgstr "Xoá cuộc hội thoại?" 82 | 83 | msgid "This will permanently delete all messages in this conversation." 84 | msgstr "Thao tác này sẽ xóa vĩnh viễn tất cả tin nhắn của cuộc hội thoại này." 85 | 86 | msgid "Select all" 87 | msgstr "Chọn tất cả" 88 | 89 | msgid "Message details" 90 | msgstr "Chi tiết tin nhắn" 91 | 92 | msgid "Copy text" 93 | msgstr "Sao chép văn bản" 94 | 95 | msgid "Forward message" 96 | msgstr "Chuyển tiếp tin nhắn" 97 | 98 | msgid "Delete message" 99 | msgstr "Xóa tin nhắn" 100 | 101 | msgid "Send Signal message" 102 | msgstr "Gửi thông điệp Signal" 103 | 104 | msgid "Delete" 105 | msgstr "Xóa" 106 | 107 | msgid "Group members" 108 | msgstr "Thành viên trong nhóm" 109 | 110 | msgid "Connect with Signal" 111 | msgstr "" 112 | 113 | msgid "YOUR COUNTRY" 114 | msgstr "QUỐC GIA BẠN" 115 | 116 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 117 | msgstr "MÃ SỐ QUỐC GIA VÀ SỐ ĐIỆN THOẠI BẠN" 118 | 119 | msgid "Verify your phone number to connect with Signal." 120 | msgstr "Xác minh số điện thoại của bạn để kết nối với Signal." 121 | 122 | msgid "Registration transmits some contact information to the server. It is not stored." 123 | msgstr "Thủ tục đăng ký sẽ gửi một số chi tiết liên lạc đến máy chủ. Chúng không được lưu trữ lại." 124 | 125 | msgid "Register" 126 | msgstr "Đăng ký" 127 | 128 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 129 | msgstr "Xem lại lần nữa để bảo đảm đây là số của bạn! Chúng tôi sắp sửa phối kiểm nó với một SMS." 130 | 131 | msgid "Cancel" 132 | msgstr "Hủy bỏ" 133 | 134 | msgid "Mark all read" 135 | msgstr "Đánh dấu tất cả đã đọc" 136 | 137 | msgid "Help" 138 | msgstr "Trợ giúp" 139 | 140 | msgid "Unregistering" 141 | msgstr "Tháo gỡ đăng ký" 142 | 143 | msgid "Disable Signal messages and calls?" 144 | msgstr "Tắt tin nhắn và cuộc gọi Signal?" 145 | 146 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 147 | msgstr "Tắt tin nhắn và cuộc gọi Signal bằng cách huỷ đăng ký từ máy chủ. Bạn sẽ phải đăng ký lại số điện thoại để sử dụng Signal trong tương lai." 148 | 149 | msgid "Enter key sends" 150 | msgstr "Phím Enter gửi đi" 151 | 152 | msgid "Submit debug log" 153 | msgstr "" 154 | 155 | msgid "Success!" 156 | msgstr "Thành công!" 157 | 158 | msgid "Verifying number" 159 | msgstr "Kiểm Chứng Số Điện Thoại" 160 | 161 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 162 | msgstr "Bây giờ, Signal sẽ tự động xác minh số điện thoại của bạn với một tin nhắn SMS." 163 | 164 | msgid "Waiting for SMS verification..." 165 | msgstr "Chờ kiểm chứng SMS..." 166 | 167 | msgid "Sent" 168 | msgstr "Đã gửi" 169 | 170 | msgid "Received" 171 | msgstr "Đã nhận" 172 | 173 | msgid "New message" 174 | msgstr "Tin nhắn mới" 175 | 176 | msgid "Secure session reset." 177 | msgstr "Đã tái thiết lập phiên bảo mật." 178 | 179 | msgid "You have left the group." 180 | msgstr "Bạn đã rời nhóm." 181 | 182 | msgid "Their identity (they read):" 183 | msgstr "Danh tính của họ (họ đọc lên):" 184 | 185 | msgid "Your identity (you read):" 186 | msgstr "Danh tính của bạn (bạn đọc lên):" 187 | -------------------------------------------------------------------------------- /po/zh-rCN.po: -------------------------------------------------------------------------------- 1 | msgid "" 2 | msgstr "" 3 | "Project-Id-Version: PACKAGE VERSION\n" 4 | "Report-Msgid-Bugs-To: \n" 5 | "POT-Creation-Date: 2016-02-29 11:36+0200\n" 6 | "PO-Revision-Date: 2016-02-29 11:36+0200\n" 7 | "Last-Translator: Automatically generated\n" 8 | "Language-Team: none\n" 9 | "Language: zh-rCN\n" 10 | "MIME-Version: 1.0\n" 11 | "Content-Type: text/plain; charset=UTF-8\n" 12 | "Content-Transfer-Encoding: 8bit\n" 13 | msgid "Image" 14 | msgstr "图片" 15 | 16 | msgid "Video" 17 | msgstr "视频" 18 | 19 | msgid "Audio" 20 | msgstr "音频" 21 | 22 | msgid "Contact" 23 | msgstr "联系人" 24 | 25 | msgid "Settings" 26 | msgstr "设置" 27 | 28 | msgid "Advanced" 29 | msgstr "高级" 30 | 31 | msgid "Save" 32 | msgstr "保存" 33 | 34 | msgid "Search" 35 | msgstr "搜索" 36 | 37 | msgid "Refresh" 38 | msgstr "刷新" 39 | 40 | msgid "New group" 41 | msgstr "新群组" 42 | 43 | msgid "Update group" 44 | msgstr "更新群组" 45 | 46 | msgid "Group name" 47 | msgstr "群组名称" 48 | 49 | msgid "Call" 50 | msgstr "呼叫" 51 | 52 | msgid "Reset secure session" 53 | msgstr "重置安全会话" 54 | 55 | msgid "Reset secure session?" 56 | msgstr "重置安全会话?" 57 | 58 | msgid "This may help if you're having encryption problems in this conversation. Your messages will be kept." 59 | msgstr "该选项将会有助于解决您在会话中遇到的加密问题,但是您的消息可能会受人控制。" 60 | 61 | msgid "Verify identity" 62 | msgstr "验证身份" 63 | 64 | msgid "Recipients list" 65 | msgstr "接收人列表" 66 | 67 | msgid "Leave group" 68 | msgstr "离开群组" 69 | 70 | msgid "Leave group?" 71 | msgstr "离开此群组?" 72 | 73 | msgid "Are you sure you want to leave this group?" 74 | msgstr "您确定想要离开此群组?" 75 | 76 | msgid "Delete conversation" 77 | msgstr "删除会话线程" 78 | 79 | msgid "Delete conversation?" 80 | msgstr "删除会话?" 81 | 82 | msgid "This will permanently delete all messages in this conversation." 83 | msgstr "这将会永久的删除此会话中的所有信息。" 84 | 85 | msgid "Select all" 86 | msgstr "全选" 87 | 88 | msgid "Message details" 89 | msgstr "信息详情" 90 | 91 | msgid "Copy text" 92 | msgstr "复制文本" 93 | 94 | msgid "Forward message" 95 | msgstr "转发" 96 | 97 | msgid "Delete message" 98 | msgstr "删除" 99 | 100 | msgid "Send Signal message" 101 | msgstr "发送暗号信息" 102 | 103 | msgid "Delete" 104 | msgstr "删除" 105 | 106 | msgid "Group members" 107 | msgstr "群组成员" 108 | 109 | msgid "Connect with Signal" 110 | msgstr "通过暗号连接" 111 | 112 | msgid "YOUR COUNTRY" 113 | msgstr "国家或地区" 114 | 115 | msgid "YOUR COUNTRY CODE AND PHONE NUMBER" 116 | msgstr "您的国家代码和 电话号码" 117 | 118 | msgid "Verify your phone number to connect with Signal." 119 | msgstr "验证您的手机号以便连接到暗号。" 120 | 121 | msgid "Registration transmits some contact information to the server. It is not stored." 122 | msgstr "注册将会传输一些联系人信息到服务器。这些信息不会被存储。" 123 | 124 | msgid "Register" 125 | msgstr "注册人" 126 | 127 | msgid "Double-check that this is your number! We're about to verify it with an SMS." 128 | msgstr "请仔细复查您的号码,我们将通过短信进行验证。" 129 | 130 | msgid "Cancel" 131 | msgstr "取消" 132 | 133 | msgid "Mark all read" 134 | msgstr "全部标记为已读" 135 | 136 | msgid "Help" 137 | msgstr "帮助" 138 | 139 | msgid "Unregistering" 140 | msgstr "反注册" 141 | 142 | msgid "Disable Signal messages and calls?" 143 | msgstr "禁用暗号信息和呼叫?" 144 | 145 | msgid "Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future." 146 | msgstr "注销暗号将会禁用暗号信息和呼叫。如果您还想使用该功能,则必须使用您的手机号码重新注册。" 147 | 148 | msgid "Enter key sends" 149 | msgstr "按下回车键发送" 150 | 151 | msgid "Submit debug log" 152 | msgstr "发送调试日志" 153 | 154 | msgid "Success!" 155 | msgstr "成功!" 156 | 157 | msgid "Verifying number" 158 | msgstr "正在验证号码" 159 | 160 | msgid "Signal will now automatically verify your number with a confirmation SMS message." 161 | msgstr "暗号将会通过短信自动验证您的手机号码。" 162 | 163 | msgid "Waiting for SMS verification..." 164 | msgstr "等待短信 验证…" 165 | 166 | msgid "Sent" 167 | msgstr "发送" 168 | 169 | msgid "Received" 170 | msgstr "接收" 171 | 172 | msgid "New message" 173 | msgstr "新信息" 174 | 175 | msgid "Secure session reset." 176 | msgstr "安全会话已重设。" 177 | 178 | msgid "You have left the group." 179 | msgstr "您已经离开了此群组。" 180 | 181 | msgid "Their identity (they read):" 182 | msgstr "他们的身份(他们读作):" 183 | 184 | msgid "Your identity (you read):" 185 | msgstr "您的身份(您读成):" 186 | -------------------------------------------------------------------------------- /push.go: -------------------------------------------------------------------------------- 1 | package main 2 | 3 | import ( 4 | "encoding/json" 5 | "io" 6 | "os" 7 | "time" 8 | 9 | log "github.com/Sirupsen/logrus" 10 | 11 | "github.com/gosexy/gettext" 12 | ) 13 | 14 | // run as the application push helper 15 | func pushHelperProcess() { 16 | in, err := os.Open(os.Args[1]) 17 | if err != nil { 18 | log.Fatal(err) 19 | } 20 | out, err := os.Create(os.Args[2]) 21 | if err != nil { 22 | log.Fatal(err) 23 | } 24 | err = pushHelperProcessMessage(in, out) 25 | if err != nil { 26 | log.Fatal(err) 27 | } 28 | os.Exit(0) 29 | } 30 | 31 | type pushMessage struct { 32 | Notification string `json:"notification"` 33 | } 34 | 35 | type appMessageCard struct { 36 | Summary string `json:"summary"` 37 | Body string `json:"body"` 38 | Actions []string `json:"actions"` 39 | Popup bool `json:"popup"` 40 | Persist bool `json:"persist"` 41 | Timestamp int64 `json:"timestamp"` 42 | } 43 | 44 | type appMessageEmblemCounter struct { 45 | Count int `json:"count"` 46 | Visible bool `json:"visible"` 47 | } 48 | 49 | type appMessageNotification struct { 50 | Tag string `json:"tag"` 51 | Card appMessageCard `json:"card"` 52 | Sound bool `json:"sound"` 53 | Vibrate bool `json:"vibrate"` 54 | EmblemCounter appMessageEmblemCounter `json:"emblem-counter"` 55 | } 56 | 57 | type appMessage struct { 58 | Notification appMessageNotification `json:"notification"` 59 | } 60 | 61 | func pushHelperProcessMessage(in io.Reader, out io.Writer) error { 62 | pushMsg := &pushMessage{} 63 | dec := json.NewDecoder(in) 64 | err := dec.Decode(pushMsg) 65 | if err != nil { 66 | return err 67 | } 68 | 69 | appMsg := &appMessage{ 70 | Notification: appMessageNotification{ 71 | Card: appMessageCard{ 72 | Summary: gettext.Gettext("New message"), 73 | Body: "", 74 | Actions: []string{"appid://textsecure.jani/textsecure/current-user-version"}, 75 | Popup: true, 76 | Persist: true, 77 | Timestamp: time.Now().Unix(), 78 | }, 79 | Sound: true, 80 | Vibrate: true, 81 | }, 82 | } 83 | 84 | enc := json.NewEncoder(out) 85 | err = enc.Encode(appMsg) 86 | return err 87 | } 88 | -------------------------------------------------------------------------------- /qml/phoneui/components/AttachPanelItem.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Canonical Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.4 18 | import Ubuntu.Components 1.3 19 | 20 | Column { 21 | id: attach_item 22 | 23 | property bool showTick: false 24 | 25 | property alias text: attach_label.text 26 | property alias image: attach_image.source 27 | 28 | signal clicked(var mouse) 29 | 30 | Item { 31 | width: attach_image.width 32 | height: attach_image.height + shadow.verticalOffset 33 | 34 | Image { 35 | id: attach_image 36 | objectName: "attach_gallery" 37 | asynchronous: true 38 | width: units.gu(7.5) 39 | height: width 40 | fillMode: Image.PreserveAspectFit 41 | sourceSize: Qt.size(width, height) 42 | 43 | Image { 44 | anchors.centerIn: parent 45 | source: attach_item.showTick ? Qt.resolvedUrl("../images/files/android/attach_hide2.png") : "" 46 | visible: attach_item.showTick 47 | } 48 | 49 | MouseArea { 50 | anchors.fill: parent 51 | onClicked: attach_item.clicked(mouse) 52 | } 53 | } 54 | 55 | EdgeShadow { 56 | id: shadow 57 | source: attach_image 58 | horizontalOffset: 0 59 | cached: true 60 | } 61 | } 62 | 63 | Label { 64 | id: attach_label 65 | anchors.horizontalCenter: parent.horizontalCenter 66 | fontSize: "x-small" 67 | font.weight: Font.DemiBold 68 | } 69 | } 70 | -------------------------------------------------------------------------------- /qml/phoneui/components/Avatar.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import Ubuntu.Components 0.1 3 | import "../js/avatar.js" as Avatar 4 | 5 | Item { 6 | id: root 7 | 8 | property int chatId: 0 9 | property bool hasChatId: chatId !== 0 10 | property string chatTitle: "" 11 | property string chatPhoto: "" 12 | property bool hasChatPhoto: chatPhoto !== "" 13 | property string logo: Qt.resolvedUrl("../images/logo.png") 14 | property bool showFrame: hasChatId 15 | 16 | signal clicked(); 17 | 18 | width: units.gu(4) 19 | height: units.gu(4) 20 | 21 | // Placed under shape, so it's hidden 22 | ShaderEffectSource { 23 | id: source 24 | anchors.centerIn: parent 25 | width: 1 26 | height: 1 27 | sourceItem: hasChatPhoto ? photoImage : rectImage 28 | } 29 | 30 | Image { 31 | id: photoImage 32 | anchors.centerIn: parent 33 | width: hasChatPhoto ? parent.width : units.gu(4) 34 | height: hasChatPhoto ? parent.height : units.gu(4) 35 | antialiasing: true 36 | asynchronous: true 37 | fillMode: Image.PreserveAspectCrop 38 | source: !hasChatPhoto && !hasChatId ? logo : chatPhoto 39 | visible: !showFrame 40 | } 41 | 42 | Rectangle { 43 | id: rectImage 44 | anchors.fill: parent 45 | color: !hasChatPhoto && hasChatId ? Avatar.getColor(chatId) : "#00000000" 46 | visible: !showFrame && !hasChatPhoto 47 | } 48 | 49 | Shape { 50 | id: shape 51 | image: source 52 | anchors.fill: parent 53 | visible: showFrame 54 | } 55 | 56 | Label { 57 | id: initialsLabel 58 | anchors.centerIn: parent 59 | fontSize: "large" 60 | color: "white" 61 | text: !hasChatPhoto && hasChatId ? getInitialsFromTitle(chatTitle) : "" 62 | } 63 | 64 | MouseArea { 65 | id: mouseArea 66 | anchors.fill: parent 67 | onClicked: { 68 | mouse.accepted = true; 69 | root.clicked(); 70 | } 71 | } 72 | 73 | function getInitialsFromTitle(title) { 74 | var text = ""; 75 | if (title.length > 0) { 76 | text = title[0]; 77 | } 78 | if (title.indexOf(" ") > -1) { 79 | var lastchar = ""; 80 | for (var a = title.length-1; a > 0; a--) { 81 | if (lastchar !== "" && title[a] === " ") { 82 | break; 83 | } 84 | lastchar = title[a]; 85 | } 86 | text += lastchar; 87 | } 88 | return text.toUpperCase(); 89 | } 90 | } 91 | -------------------------------------------------------------------------------- /qml/phoneui/components/ColoredImage.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2014 Canonical, Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.3 18 | 19 | Item { 20 | id: root 21 | 22 | /*! 23 | \qmlproperty color color 24 | */ 25 | property alias color: colorizedImage.keyColorOut 26 | 27 | /*! 28 | \qmlproperty color keyColor 29 | */ 30 | property alias keyColor: colorizedImage.keyColorIn 31 | 32 | property alias mirror: image.mirror 33 | property alias source: image.source 34 | property alias asynchronous: image.asynchronous 35 | 36 | Image { 37 | id: image 38 | 39 | anchors.fill: parent 40 | visible: false 41 | } 42 | 43 | ShaderEffect { 44 | id: colorizedImage 45 | 46 | anchors.fill: parent 47 | visible: active 48 | 49 | // Whether or not a color has been set. 50 | property bool active: keyColorOut != Qt.rgba(0.0, 0.0, 0.0, 0.0) 51 | 52 | property Image source: active && image.status === Image.Ready ? image : null 53 | property color keyColorOut: Qt.rgba(0.0, 0.0, 0.0, 0.0) 54 | property color keyColorIn: "#ffffff" 55 | property real threshold: 0.1 56 | 57 | readonly property string mirroredShader: " 58 | uniform highp mat4 qt_Matrix; 59 | attribute highp vec4 qt_Vertex; 60 | attribute highp vec2 qt_MultiTexCoord0; 61 | varying highp vec2 qt_TexCoord0; 62 | void main() { 63 | qt_TexCoord0 = vec2(1.0 - qt_MultiTexCoord0.s, qt_MultiTexCoord0.t); 64 | gl_Position = qt_Matrix * qt_Vertex; 65 | }" 66 | 67 | readonly property string originalShader: " 68 | uniform highp mat4 qt_Matrix; 69 | attribute highp vec4 qt_Vertex; 70 | attribute highp vec2 qt_MultiTexCoord0; 71 | varying highp vec2 qt_TexCoord0; 72 | void main() { 73 | qt_TexCoord0 = qt_MultiTexCoord0; 74 | gl_Position = qt_Matrix * qt_Vertex; 75 | }" 76 | 77 | vertexShader: root.mirror ? mirroredShader : originalShader 78 | 79 | fragmentShader: " 80 | varying highp vec2 qt_TexCoord0; 81 | uniform sampler2D source; 82 | uniform highp vec4 keyColorOut; 83 | uniform highp vec4 keyColorIn; 84 | uniform lowp float threshold; 85 | uniform lowp float qt_Opacity; 86 | void main() { 87 | lowp vec4 sourceColor = texture2D(source, qt_TexCoord0); 88 | gl_FragColor = mix(vec4(keyColorOut.rgb, 1.0) * sourceColor.a, 89 | sourceColor, 90 | step(threshold, distance(sourceColor.rgb / sourceColor.a, keyColorIn.rgb))) * qt_Opacity; 91 | }" 92 | } 93 | } 94 | -------------------------------------------------------------------------------- /qml/phoneui/components/ContactImport.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012-2014 Canonical, Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.2 18 | import Ubuntu.Components 1.1 19 | import Ubuntu.Components.Popups 1.0 as Popups 20 | import Ubuntu.Content 1.1 as ContentHub 21 | import Ubuntu.Contacts 0.1 22 | import QtContacts 5.0 23 | 24 | Item { 25 | id: root 26 | 27 | property var importDialog: null 28 | 29 | function contactImportDialog() { 30 | PopupUtils.open(dialog, root) 31 | } 32 | 33 | function requestContact() 34 | { 35 | if (!root.importDialog) { 36 | root.importDialog = PopupUtils.open(contentHubDialog, root) 37 | } else { 38 | console.warn("Import dialog already running") 39 | } 40 | } 41 | 42 | function importContacts(url) { 43 | textsecure.contactsImported(url) 44 | } 45 | 46 | Component { 47 | id: dialog 48 | Popups.Dialog { 49 | id: dlg 50 | title: qsTr("Import contacts") 51 | 52 | Button { 53 | text: qsTr("From Address Book") 54 | color: UbuntuColors.orange 55 | onClicked: { 56 | PopupUtils.close(dlg) 57 | root.requestContact(); 58 | } 59 | } 60 | Button { 61 | text: qsTr("Cancel") 62 | onClicked: PopupUtils.close(dlg) 63 | } 64 | } 65 | } 66 | 67 | Component { 68 | id: contentHubDialog 69 | 70 | Popups.PopupBase { 71 | id: dialogue 72 | 73 | property alias activeTransfer: signalConnections.target 74 | focus: true 75 | 76 | Rectangle { 77 | anchors.fill: parent 78 | 79 | ContentHub.ContentPeerPicker { 80 | id: peerPicker 81 | 82 | anchors.fill: parent 83 | contentType: ContentHub.ContentType.Contacts 84 | handler: ContentHub.ContentHandler.Source 85 | 86 | onPeerSelected: { 87 | peer.selectionType = ContentHub.ContentTransfer.Multiple 88 | dialogue.activeTransfer = peer.request() 89 | } 90 | 91 | onCancelPressed: { 92 | PopupUtils.close(root.importDialog) 93 | } 94 | } 95 | } 96 | 97 | Connections { 98 | id: signalConnections 99 | 100 | onStateChanged: { 101 | if (dialogue.activeTransfer.state === ContentHub.ContentTransfer.Charged) { 102 | dialogue.hide() 103 | if (dialogue.activeTransfer.items.length > 0) { 104 | importContacts(dialogue.activeTransfer.items[0].url); 105 | } 106 | } 107 | } 108 | } 109 | } 110 | } 111 | } 112 | -------------------------------------------------------------------------------- /qml/phoneui/components/DelegateUtils.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Content 1.1 3 | 4 | Item { 5 | function getMediaTypeString(mediaType) { 6 | switch (mediaType) { 7 | case ContentType.Pictures: 8 | return "Photo" 9 | case ContentType.Videos: 10 | return "Video" 11 | case ContentType.Music: 12 | return "Audio" 13 | default: 14 | return "Text"; 15 | } 16 | } 17 | 18 | function humanFileSize(bytes, si) { 19 | var thresh = si ? 1000 : 1024; 20 | if (bytes < thresh) return bytes + ' B'; 21 | var units = si ? ['kB','MB','GB','TB','PB','EB','ZB','YB'] : ['KiB','MiB','GiB','TiB','PiB','EiB','ZiB','YiB']; 22 | var u = -1; 23 | do { 24 | bytes /= thresh; 25 | ++u; 26 | } while(bytes >= thresh); 27 | return bytes.toFixed(1) + ' ' + units[u]; 28 | } 29 | } 30 | -------------------------------------------------------------------------------- /qml/phoneui/components/DocumentDelegate.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.3 2 | import Ubuntu.Components 1.1 3 | 4 | Item { 5 | id: documentBox 6 | 7 | signal clicked(var mouse) 8 | 9 | width: units.gu(28) 10 | height: units.gu(8) 11 | 12 | Rectangle { 13 | id: documentBoxBackground 14 | anchors { 15 | left: parent.left 16 | top: parent.top 17 | bottom: parent.bottom 18 | } 19 | width: height 20 | color: Qt.rgba(0, 0, 0, 0.1) 21 | } 22 | 23 | Icon { 24 | id: attachmentIcon 25 | anchors { 26 | centerIn: documentBoxBackground 27 | } 28 | color: textColor 29 | height: parent.height - units.gu(3) 30 | width: height 31 | name: "attachment" 32 | } 33 | 34 | Image { 35 | anchors { 36 | fill: documentBoxBackground 37 | } 38 | source: Qt.resolvedUrl(thumbnail) 39 | asynchronous: true 40 | fillMode: Image.PreserveAspectCrop 41 | } 42 | 43 | Image { 44 | anchors { 45 | fill: documentBoxBackground 46 | margins: units.gu(1) 47 | } 48 | visible: needsDownload 49 | source: { 50 | if (needsDownload) { 51 | if (isDownloading) { 52 | return Qt.resolvedUrl("../images/photocancel.png"); 53 | } else { 54 | return Qt.resolvedUrl("../images/photoload.png"); 55 | } 56 | } 57 | return "" 58 | } 59 | } 60 | 61 | Label { 62 | id: documentFileNameLabel 63 | anchors { 64 | top: parent.top 65 | left: documentBoxBackground.right 66 | right: parent.right 67 | topMargin: units.dp(4) 68 | leftMargin: units.gu(1) 69 | } 70 | elide: Text.ElideRight 71 | fontSize: userSettings.contents.fontSize 72 | text: documentFileName 73 | color: textColor 74 | } 75 | 76 | Label { 77 | anchors { 78 | top: documentFileNameLabel.bottom 79 | left: documentFileNameLabel.left 80 | topMargin: units.gu(1) 81 | } 82 | fontSize: userSettings.contents.fontSize 83 | text: delegateUtils.humanFileSize(documentSize, true) 84 | color: textColor 85 | } 86 | 87 | MouseArea { 88 | anchors.fill: parent 89 | onClicked: documentBox.clicked(mouse) 90 | } 91 | } 92 | -------------------------------------------------------------------------------- /qml/phoneui/components/EdgeShadow.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Canonical Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtGraphicalEffects 1.0 18 | 19 | DropShadow { 20 | property int depth: 1 21 | property bool topShadow: false 22 | 23 | property real __hOffset: 2 + 2 * depth 24 | property real __vOffset: 2 + 2 * depth 25 | 26 | anchors.fill: source 27 | horizontalOffset: topShadow ? 0 : __hOffset 28 | verticalOffset: topShadow ? - __vOffset : __vOffset 29 | color: Qt.rgba(0.6, 0.6, 0.6, 0.6) 30 | radius: 8 31 | samples: 16 // radius * 2 32 | transparentBorder: true 33 | visible: source.visible 34 | } 35 | -------------------------------------------------------------------------------- /qml/phoneui/components/MediaImport.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012-2014 Canonical, Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.2 18 | import Ubuntu.Components 1.1 19 | import Ubuntu.Components.Popups 1.0 as Popups 20 | import Ubuntu.Content 1.1 as ContentHub 21 | 22 | Item { 23 | id: root 24 | 25 | property var importDialog: null 26 | property var contentType: ContentHub.ContentType.All 27 | 28 | signal mediaReceived(string mediaUrl) 29 | 30 | function requestMedia() { 31 | if (!root.importDialog) { 32 | root.importDialog = PopupUtils.open(contentHubDialog, root) 33 | } else { 34 | console.warn("Import dialog already running") 35 | } 36 | } 37 | 38 | Component { 39 | id: contentHubDialog 40 | 41 | Popups.PopupBase { 42 | id: dialogue 43 | 44 | property alias activeTransfer: signalConnections.target 45 | focus: true 46 | 47 | Rectangle { 48 | anchors.fill: parent 49 | 50 | ContentHub.ContentPeerPicker { 51 | id: peerPicker 52 | 53 | anchors.fill: parent 54 | contentType: root.contentType 55 | handler: ContentHub.ContentHandler.Source 56 | 57 | onPeerSelected: { 58 | peer.selectionType = ContentHub.ContentTransfer.Single 59 | dialogue.activeTransfer = peer.request() 60 | } 61 | 62 | onCancelPressed: { 63 | PopupUtils.close(root.importDialog) 64 | } 65 | } 66 | } 67 | 68 | Connections { 69 | id: signalConnections 70 | 71 | onStateChanged: { 72 | var done = (dialogue.activeTransfer.state === ContentHub.ContentTransfer.Charged) 73 | // (dialogue.activeTransfer.state === ContentHub.ContentTransfer.Aborted)) 74 | 75 | if (dialogue.activeTransfer.state === ContentHub.ContentTransfer.Charged) { 76 | dialogue.hide() 77 | if (dialogue.activeTransfer.items.length > 0) { 78 | root.mediaReceived(dialogue.activeTransfer.items[0].url) 79 | } 80 | } 81 | 82 | if (done) { 83 | acceptTimer.restart() 84 | } 85 | } 86 | } 87 | 88 | // WORKAROUND: Work around for application becoming insensitive to touch events 89 | // if the dialog is dismissed while the application is inactive. 90 | // Just listening for changes to Qt.application.active doesn't appear 91 | // to be enough to resolve this, so it seems that something else needs 92 | // to be happening first. As such there's a potential for a race 93 | // condition here, although as yet no problem has been encountered. 94 | Timer { 95 | id: acceptTimer 96 | 97 | interval: 100 98 | repeat: true 99 | running: false 100 | onTriggered: { 101 | if(Qt.application.active) { 102 | PopupUtils.close(root.importDialog) 103 | } 104 | } 105 | } 106 | 107 | Component.onDestruction: root.importDialog = null 108 | } 109 | } 110 | } 111 | -------------------------------------------------------------------------------- /qml/phoneui/components/MessageStatus.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.3 2 | import Ubuntu.Components 1.1 3 | import "TelegramColors.js" as Color 4 | 5 | Item { 6 | property string time 7 | 8 | Rectangle { 9 | visible: isPhotoOrVideo 10 | anchors { 11 | leftMargin: units.gu(-1) 12 | rightMargin: units.gu(-1) 13 | topMargin: units.dp(-2) 14 | bottomMargin: units.dp(-2) 15 | fill: messageStatusRow 16 | } 17 | color: Qt.rgba(0, 0, 0, 0.4) 18 | radius: units.dp(3) 19 | } 20 | 21 | height: messageStatusRow.height 22 | width: messageStatusRow.width 23 | 24 | Row { 25 | id: messageStatusRow 26 | spacing: units.dp(4) 27 | 28 | Label { 29 | id: timeLabel 30 | anchors.verticalCenter: parent.verticalCenter 31 | font.weight: Font.DemiBold 32 | fontSize: "x-small" 33 | color: { 34 | if (isPhotoOrVideo) { 35 | return Color.white; 36 | } 37 | return outgoing ? "black" : "white" 38 | } 39 | text: time 40 | } 41 | 42 | Image { 43 | id: messageSentStatus 44 | anchors.verticalCenter: parent.verticalCenter 45 | width: units.gu(2) 46 | height: width 47 | visible: outgoing 48 | z: 1 49 | fillMode: Image.PreserveAspectFit 50 | source: { 51 | var icon="" 52 | var c = "" 53 | 54 | if (!isSent) { 55 | icon = "msg_clock" 56 | } else if (!isRead) { 57 | icon="Checks1_2x" 58 | } else { 59 | icon="Checks2_2x" 60 | } 61 | if (isPhotoOrVideo) { 62 | c = "_white" 63 | } 64 | return Qt.resolvedUrl("../images/"+icon+c+".png"); 65 | } 66 | } 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /qml/phoneui/components/MultipleSelectionVisualModel.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012-2013 Canonical, Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.2 18 | 19 | VisualDataModel { 20 | id: contactVisualModel 21 | 22 | property alias selectedItems: selectedGroup 23 | 24 | groups: [ 25 | VisualDataGroup { 26 | id: selectedGroup 27 | 28 | name: "selected" 29 | } 30 | ] 31 | } 32 | -------------------------------------------------------------------------------- /qml/phoneui/components/PageLoader.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | 3 | Loader { 4 | property bool valid: item !== null 5 | 6 | active: false 7 | asynchronous: false 8 | anchors { 9 | left: parent.left 10 | bottom: parent.bottom 11 | right: parent.right 12 | } 13 | } 14 | -------------------------------------------------------------------------------- /qml/phoneui/components/PhotoVideoDelegate.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.3 2 | import Ubuntu.Components 1.1 3 | import QtGraphicalEffects 1.0 4 | 5 | Item { 6 | id: thumbnailBox 7 | 8 | signal clicked(var mouse) 9 | 10 | width: { 11 | if (isPhotoOrVideo) { 12 | if (thumbnailImage.source == "") { 13 | height = units.gu(12); 14 | return units.gu(12); 15 | } else { 16 | if (thumbnailImage.isLandscape) { 17 | height = units.gu(14); 18 | return units.gu(26); 19 | } else { 20 | height = units.gu(26); 21 | return units.gu(14); 22 | } 23 | } 24 | } else { 25 | height = 0; 26 | return 0; 27 | } 28 | } 29 | 30 | visible: isPhotoOrVideo 31 | 32 | Image { 33 | id: thumbnailImage 34 | 35 | property bool isLandscape: false 36 | property real aspectRatio: 1 37 | 38 | ActivityIndicator { 39 | id: ai 40 | anchors { 41 | fill: parent 42 | } 43 | visible: running 44 | running: thumbnailImage.status != Image.Ready 45 | } 46 | 47 | anchors { 48 | fill: parent 49 | } 50 | asynchronous: true 51 | fillMode: Image.PreserveAspectFit 52 | 53 | sourceSize.width: 128 54 | sourceSize.height: 128 55 | source: Qt.resolvedUrl(thumbnail) 56 | 57 | onStatusChanged: { 58 | if (status === Image.Error) { 59 | width = 128 60 | height = 128 61 | source = "image://theme/image-missing" 62 | console.warn("Image error, source is: _" + source + "_"); 63 | } else if (status === Image.Ready) { 64 | isLandscape = implicitWidth > implicitHeight 65 | aspectRatio = implicitWidth / implicitHeight 66 | } 67 | } 68 | } 69 | 70 | FastBlur { 71 | anchors.fill: thumbnailImage 72 | transparentBorder: true 73 | radius: isVideo ? 32 : 0 // Workaround for: enabled 74 | // enabled: isVideo // This doesn't work! 75 | source: thumbnailImage 76 | clip: true 77 | } 78 | 79 | Rectangle { 80 | id: videoIndicator 81 | anchors { 82 | top: thumbnailImage.top 83 | topMargin: units.gu(0.5) 84 | left: thumbnailImage.left 85 | leftMargin: units.gu(0.5) 86 | } 87 | width: childrenRect.width + units.gu(1) 88 | height: units.gu(2) 89 | visible: isVideo 90 | 91 | color: "#64000000" 92 | radius: 2 93 | 94 | Image { 95 | anchors { 96 | left: parent.left 97 | leftMargin: units.gu(0.5) 98 | verticalCenter: parent.verticalCenter 99 | } 100 | height: units.gu(1.5) 101 | fillMode: Image.PreserveAspectFit 102 | smooth: true 103 | antialiasing: true 104 | asynchronous: true 105 | source: Qt.resolvedUrl("../images/ic_video.png") 106 | } 107 | } 108 | 109 | Image { 110 | id: thumbnailImageOverlay 111 | anchors.centerIn: thumbnailImage 112 | width: units.gu(6) 113 | height: width 114 | visible: isVideo || (isPhoto && needsDownload) 115 | 116 | source: { 117 | if (needsDownload) { 118 | if (isDownloading) { 119 | return Qt.resolvedUrl("../images/photocancel.png"); 120 | } else { 121 | return Qt.resolvedUrl("../images/photoload.png"); 122 | } 123 | } else { 124 | return Qt.resolvedUrl("../images/playvideo.png"); 125 | } 126 | } 127 | } 128 | 129 | MouseArea { 130 | anchors.fill: thumbnailImage 131 | onClicked: { thumbnailBox.clicked(mouse) } 132 | } 133 | } 134 | -------------------------------------------------------------------------------- /qml/phoneui/components/TelegramBubble.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Components 1.1 3 | 4 | Rectangle { 5 | id: root 6 | 7 | property bool outgoing 8 | property bool groupUpdate 9 | color: { 10 | if (outgoing) { 11 | return "#3fb24f" 12 | } else { 13 | return "#aaaaaa" 14 | } 15 | } 16 | radius: units.dp(3) 17 | 18 | ColoredImage { 19 | id: bubbleArrow 20 | visible: ! groupUpdate 21 | source: Qt.resolvedUrl("../images/conversation_bubble_arrow.png") 22 | color: root.color 23 | asynchronous: false 24 | anchors { 25 | bottom: parent.bottom 26 | bottomMargin: units.gu(1.7) 27 | } 28 | width: units.gu(1) 29 | height: units.gu(1.5) 30 | 31 | states: [ 32 | State { 33 | when: !root.outgoing 34 | name: "incoming" 35 | AnchorChanges { 36 | target: bubbleArrow 37 | anchors.right: root.left 38 | } 39 | }, 40 | State { 41 | when: root.outgoing 42 | name: "outgoing" 43 | AnchorChanges { 44 | target: bubbleArrow 45 | anchors.left: root.right 46 | } 47 | PropertyChanges { 48 | target: bubbleArrow 49 | mirror: true 50 | } 51 | } 52 | ] 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /qml/phoneui/components/TelegramButton.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import "TelegramColors.js" as TelegramColors 3 | 4 | Rectangle { 5 | property alias text: buttonLabel.text 6 | property alias textColor: buttonLabel.color 7 | 8 | signal clicked 9 | 10 | width: buttonLabel.width + units.gu(5) 11 | height: buttonLabel.height + units.gu(2) 12 | color: enabled ? TelegramColors.blue : TelegramColors.grey 13 | radius: 3 14 | 15 | Behavior on color { 16 | ColorAnimation { 17 | duration: 300 18 | } 19 | } 20 | 21 | Text { 22 | id: buttonLabel 23 | anchors.centerIn: parent 24 | horizontalAlignment: TextInput.AlignHCenter 25 | verticalAlignment: TextInput.AlignVCenter 26 | 27 | color: TelegramColors.white 28 | font.pixelSize: FontUtils.sizeToPixels("large") 29 | } 30 | 31 | MouseArea { 32 | id: startMessaging 33 | anchors.fill: parent 34 | 35 | onPressed: parent.onPressed() 36 | onReleased: parent.onReleased() 37 | onClicked: parent.clicked() 38 | } 39 | 40 | function onPressed() { 41 | color = TelegramColors.dark_blue; 42 | } 43 | 44 | function onReleased() { 45 | color = TelegramColors.blue 46 | } 47 | } 48 | -------------------------------------------------------------------------------- /qml/phoneui/components/TelegramColors.js: -------------------------------------------------------------------------------- 1 | .pragma library 2 | 3 | var black = "#000000" 4 | var white = "#ffffff" 5 | var grey = "#777777" 6 | var blue = "#2ca5e0" 7 | var dark_blue = "#1c94cf" 8 | 9 | var page_background = "#eeeeee" 10 | 11 | var unread_green = "#5ec245" 12 | var dark_green = "#267932" 13 | var secret_green = "#00a80e" 14 | 15 | var list_pressed = "#efefef" 16 | 17 | var transparent = "#00000000" 18 | 19 | var outgoing = "#e6ffd1" 20 | var incoming = "#ffffff" 21 | 22 | var chat_section = "#99a6bcca" 23 | -------------------------------------------------------------------------------- /qml/phoneui/components/TelegramContactsListItem.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Components 1.1 3 | import Ubuntu.Components.ListItems 1.0 as ListItem 4 | import "listitems" 5 | import "../js/avatar.js" as Avatar 6 | import "../js/time.js" as Time 7 | import "TelegramColors.js" as TelegramColors 8 | 9 | ListItemWithActions { 10 | id: listitem 11 | 12 | property int userId: 0 // to get avatar if thumbnail not set 13 | property string photo: "" 14 | property string title: "" 15 | property string subtitle: "" 16 | property bool isOnline: false 17 | property int lastSeen: 0 18 | 19 | width: parent.width 20 | height: units.gu(8) 21 | showDivider: true 22 | color: TelegramColors.page_background 23 | 24 | Avatar { 25 | id: imageShape 26 | anchors { 27 | top: parent.top 28 | topMargin: units.dp(4) 29 | left: parent.left 30 | leftMargin: units.gu(2) 31 | bottom: parent.bottom 32 | bottomMargin: units.dp(4) 33 | rightMargin: units.gu(1) 34 | } 35 | width: height 36 | 37 | chatId: listitem.userId 38 | chatTitle: listitem.title 39 | chatPhoto: listitem.photo 40 | } 41 | 42 | Text { 43 | id: titleText 44 | width: implicitWidth 45 | anchors { 46 | top: parent.top 47 | topMargin: units.gu(1) 48 | left: imageShape.right 49 | leftMargin: units.gu(1.5) 50 | right: parent.right 51 | rightMargin: units.gu(1.5) 52 | } 53 | verticalAlignment: TextInput.AlignVCenter 54 | 55 | font.pixelSize: FontUtils.sizeToPixels("large") 56 | color: TelegramColors.black 57 | elide: Text.ElideRight 58 | text: title 59 | } 60 | 61 | Text { 62 | id: subtitleText 63 | anchors { 64 | top: titleText.bottom 65 | topMargin: units.gu(0.5) 66 | left: imageShape.right 67 | leftMargin: units.gu(1.5) 68 | right: parent.right 69 | rightMargin: units.gu(1.5) 70 | } 71 | horizontalAlignment: TextInput.AlignLeft 72 | verticalAlignment: TextInput.AlignVCenter 73 | 74 | font.pixelSize: FontUtils.sizeToPixels("medium") 75 | color: TelegramColors.grey 76 | elide: Text.ElideRight 77 | text: subtitle 78 | } 79 | } 80 | -------------------------------------------------------------------------------- /qml/phoneui/components/TelegramLabel.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import "../components" 3 | import "TelegramColors.js" as TelegramColors 4 | 5 | Text { 6 | verticalAlignment: TextInput.AlignVCenter 7 | horizontalAlignment: TextInput.AlignHCenter 8 | 9 | color: TelegramColors.grey 10 | } 11 | -------------------------------------------------------------------------------- /qml/phoneui/components/TelegramPage.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import Ubuntu.Components 1.1 3 | import Ubuntu.Connectivity 1.0 4 | import "TelegramColors.js" as TelegramColors 5 | 6 | Page { 7 | id: page 8 | 9 | property bool isInSelectionMode: false 10 | property bool isSearching: false 11 | property bool isOnline: NetworkingStatus.online 12 | property bool isConnected: { 13 | if (onlineIndicationOnly) { 14 | return isOnline; 15 | } else if (root.activeFocus) { 16 | return isOnline; 17 | } return true; // Don't indicate connectivity. 18 | } 19 | property bool onlineIndicationOnly: false 20 | 21 | property alias title: header.title 22 | property string pageImage: "" 23 | property string pageTitle: i18n.tr("TextSecure") 24 | property string pageSubtitle: "" 25 | property string pageSubtitleAlt: "" 26 | property int chatId: 0 27 | property string firstName: "" 28 | property string lastName: "" 29 | 30 | property alias body: body.children 31 | property alias searchTerm: searchField.text 32 | property alias busy: activityIndicator.running 33 | 34 | signal headerClicked(); 35 | 36 | TelegramHeader { 37 | id: header 38 | chatId: page.chatId 39 | chatPhoto: pageImage 40 | title: pageTitle 41 | subtitle: pageSubtitleAlt.length > 0 ? pageSubtitleAlt : pageSubtitle 42 | isConnecting: !page.isConnected 43 | visible: !isSearching 44 | width: parent ? parent.width - units.gu(2) : undefined 45 | 46 | onClicked: headerClicked() 47 | } 48 | 49 | TextField { 50 | id: searchField 51 | visible: isSearching 52 | anchors { 53 | left: parent.left 54 | right: parent.right 55 | rightMargin: units.gu(2) 56 | } 57 | inputMethodHints: Qt.ImhNoPredictiveText 58 | 59 | onTextChanged: { 60 | if (typeof onSearchTermChanged === 'function') { 61 | onSearchTermChanged(text); 62 | } 63 | } 64 | } 65 | 66 | head { 67 | id: head 68 | contents: isSearching ? searchField : header 69 | 70 | backAction: Action { 71 | id: backAction 72 | iconName: isInSelectionMode ? "close" : "back" 73 | onTriggered: { 74 | if (isSearching) { 75 | searchFinished(); 76 | return; 77 | } 78 | if (isInSelectionMode) { 79 | selectionCanceled(); 80 | return; 81 | } 82 | back(); 83 | if (typeof onBackPressed === 'function') { 84 | onBackPressed(); 85 | } 86 | } 87 | } 88 | } 89 | 90 | Rectangle { 91 | id: body 92 | anchors.fill: parent 93 | // Due to some fancy Page behavior, in fact, 94 | // this doesn't end up as white anyway.. 95 | color: TelegramColors.page_background 96 | } 97 | 98 | ActivityIndicator { 99 | id: activityIndicator 100 | anchors.centerIn: parent 101 | z: 101 102 | } 103 | 104 | Rectangle { 105 | id: activityBackground 106 | anchors.fill: parent 107 | z: 100 108 | color: "#44000000" 109 | visible: activityIndicator.running 110 | MouseArea { 111 | anchors.fill: parent 112 | preventStealing: true 113 | enabled: activityIndicator.running 114 | } 115 | } 116 | 117 | function searchPressed() { 118 | isSearching = true; 119 | searchField.forceActiveFocus(); 120 | } 121 | 122 | function searchFinished() { 123 | if (!isSearching) return; 124 | 125 | isSearching = false; 126 | searchField.text = ""; 127 | } 128 | 129 | function back() { 130 | pageStack.pop(); 131 | } 132 | 133 | signal selectionCanceled() 134 | } 135 | -------------------------------------------------------------------------------- /qml/phoneui/components/TelegramSection.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Components 0.1 3 | import "TelegramColors.js" as Color 4 | 5 | Item { 6 | id: item 7 | property alias text: sectionLabel.text 8 | property string image: "" 9 | 10 | width: parent.width 11 | height: labelRect.height + sectionImage.height 12 | + (image !== "" ? units.gu(1) : 0) 13 | 14 | Rectangle { 15 | id: labelRect 16 | anchors.horizontalCenter: parent.horizontalCenter 17 | width: sectionLabel.paintedWidth + units.gu(2) 18 | height: sectionLabel.height + units.gu(1) 19 | 20 | color: Color.chat_section 21 | radius: 3 22 | 23 | Text { 24 | id: sectionLabel 25 | anchors.centerIn: parent 26 | horizontalAlignment: Text.AlignHCenter 27 | width: item.width - units.gu(4) 28 | 29 | color: Color.white 30 | font.weight: Font.DemiBold 31 | font.pixelSize: FontUtils.sizeToPixels("medium") 32 | elide: Text.ElideRight 33 | wrapMode: Text.WordWrap 34 | text: section 35 | } 36 | 37 | } 38 | 39 | Image { 40 | id: sectionImage 41 | anchors { 42 | top: labelRect.bottom 43 | topMargin: units.gu(1) 44 | horizontalCenter: parent.horizontalCenter 45 | } 46 | width: visible ? units.gu(12) : 0 47 | height: width 48 | fillMode: Image.PreserveAspectCrop 49 | visible: source != "" 50 | source: image 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /qml/phoneui/components/TelegramSubtitledListItem.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Components 1.1 3 | import Ubuntu.Components.ListItems 0.1 as ListItem 4 | 5 | import "TelegramColors.js" as TelegramColors 6 | 7 | ListItem.Empty { 8 | id: item 9 | width: parent.width 10 | height: units.gu(8) 11 | 12 | property string title: "" 13 | property string titleColor: TelegramColors.black 14 | property bool titleIsBold: false 15 | property int titleMaxLineCount: 1 16 | property string subtitle: "" 17 | property string subtitleColor: TelegramColors.grey 18 | property bool subtitleIsBold: false 19 | 20 | Rectangle { 21 | id: background 22 | anchors.fill: parent 23 | color: item.selected ? TelegramColors.blue : TelegramColors.transparent 24 | } 25 | 26 | Text { 27 | id: title 28 | anchors { 29 | top: parent.top 30 | topMargin: units.gu(1) 31 | left: parent.left 32 | leftMargin: units.gu(2) 33 | right: parent.right 34 | rightMargin: units.gu(2) 35 | } 36 | width: parent.width 37 | verticalAlignment: TextInput.AlignVCenter 38 | 39 | maximumLineCount: item.titleMaxLineCount 40 | wrapMode: "WordWrap" 41 | 42 | elide: Text.ElideRight 43 | font.pixelSize: FontUtils.sizeToPixels("large") 44 | font.weight: item.titleIsBold ? Font.Bold : Font.Light 45 | color: item.titleColor 46 | text: item.title 47 | } 48 | 49 | Text { 50 | id: subtitle 51 | anchors { 52 | top: title.bottom 53 | topMargin: units.dp(4) 54 | left: title.left 55 | bottom: parent.bottom 56 | bottomMargin: units.gu(1) 57 | right: title.right 58 | } 59 | width: parent.width 60 | verticalAlignment: TextInput.AlignVCenter 61 | 62 | elide: Text.ElideRight 63 | font.pixelSize: FontUtils.sizeToPixels("medium") 64 | font.weight: item.subtitleIsBold ? Font.Bold : Font.Light 65 | color: item.subtitleColor 66 | text: item.subtitle 67 | } 68 | } 69 | -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/IconVisual.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Canonical Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU Lesser General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU Lesser General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.0 18 | import Ubuntu.Components 0.1 19 | 20 | // internal helper class to create the visuals 21 | // for the icon. 22 | Item { 23 | id: iconVisual 24 | 25 | /*! 26 | \qmlproperty url source 27 | */ 28 | property alias source: icon.source 29 | /*! 30 | \qmlproperty url fallbackSource 31 | */ 32 | property alias fallbackSource: icon.fallbackSource 33 | visible: source != "" 34 | property bool hasFrame: true 35 | 36 | ImageWithFallback { 37 | id: icon 38 | visible: !iconVisual.hasFrame 39 | opacity: iconVisual.enabled ? 1.0 : 0.5 40 | fillMode: Image.PreserveAspectCrop 41 | anchors.fill: parent 42 | smooth: true 43 | asynchronous: true 44 | } 45 | 46 | UbuntuShape { 47 | id: shape 48 | visible: iconVisual.hasFrame 49 | anchors.fill: parent 50 | image: icon 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/ImageWithFallback.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Canonical Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU Lesser General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU Lesser General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.0 18 | 19 | Image { 20 | id: image 21 | 22 | property url fallbackSource 23 | property bool fallbackRequired: false 24 | 25 | function isSourceDefined(sourceUrl) { 26 | return sourceUrl != "" && sourceUrl != undefined 27 | } 28 | 29 | function tryLoadingFallbackSource() { 30 | if (isSourceDefined(fallbackSource)) { 31 | source = fallbackSource 32 | } 33 | } 34 | 35 | function checkStatus() { 36 | if (!isSourceDefined(source) || (status == Image.Error && source != fallbackSource)) { 37 | fallbackRequired = true 38 | tryLoadingFallbackSource() 39 | } 40 | } 41 | 42 | onSourceChanged: fallbackRequired = false 43 | onFallbackSourceChanged: if (fallbackRequired) tryLoadingFallbackSource() 44 | onStatusChanged: checkStatus() 45 | Component.onCompleted: checkStatus() 46 | } 47 | -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/LabelVisual.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Canonical Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU Lesser General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU Lesser General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.0 18 | import Ubuntu.Components 0.1 19 | 20 | // internal helper class for text inside the list items. 21 | Label { 22 | id: label 23 | property bool selected: false 24 | property bool secondary: false 25 | 26 | // FIXME: very ugly hack to detect whether the list item is inside a Popover 27 | property bool overlay: isInsideOverlay(label) 28 | function isInsideOverlay(item) { 29 | if (!item.parent) return false; 30 | return item.parent.hasOwnProperty("pointerTarget") || label.isInsideOverlay(item.parent) 31 | } 32 | 33 | fontSize: "medium" 34 | elide: Text.ElideRight 35 | color: selected ? UbuntuColors.orange : secondary ? overlay ? Theme.palette.normal.overlayText : Theme.palette.normal.backgroundText 36 | : overlay ? Theme.palette.selected.overlayText : Theme.palette.selected.backgroundText 37 | opacity: label.enabled ? 1.0 : 0.5 38 | } 39 | -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/ListItemWithActionsCheckBox.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2012-2014 Canonical, Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.2 18 | import Ubuntu.Components 1.1 19 | 20 | CheckBox { 21 | checked: root.selected 22 | width: implicitWidth 23 | // disable item mouse area to avoid conflicts with parent mouse area 24 | __mouseArea.enabled: false 25 | } 26 | -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/ProgressionVisual.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2012 Canonical Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU Lesser General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU Lesser General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU Lesser General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.0 18 | 19 | // Internal helper class for the visuals of 20 | // the progression symbol. 21 | Item { 22 | id: progressionVisual 23 | 24 | width: progressIcon.width + (showSplit ? splitMargin + progressionDivider.width : 0) 25 | 26 | property bool showSplit: false 27 | property real splitMargin 28 | 29 | Image { 30 | id: progressIcon 31 | source: "artwork/ListItemProgressionArrow.png" 32 | anchors { 33 | verticalCenter: parent.verticalCenter 34 | right: parent.right 35 | } 36 | 37 | opacity: enabled ? 1.0 : 0.5 38 | } 39 | 40 | Image { 41 | id: progressionDivider 42 | visible: progressionVisual.showSplit 43 | anchors { 44 | top: parent.top 45 | bottom: parent.bottom 46 | right: progressIcon.left 47 | rightMargin: splitMargin 48 | } 49 | source: "artwork/ListItemDividerVertical.png" 50 | opacity: enabled ? 1.0 : 0.5 51 | } 52 | } 53 | -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/artwork/ListItemDivider24px@8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/components/listitems/artwork/ListItemDivider24px@8.png -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/artwork/ListItemDivider6px@8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/components/listitems/artwork/ListItemDivider6px@8.png -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/artwork/ListItemDividerHorizontal@18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/components/listitems/artwork/ListItemDividerHorizontal@18.png -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/artwork/ListItemDividerVertical@18.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/components/listitems/artwork/ListItemDividerVertical@18.png -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/artwork/ListItemProgressionArrow@8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/components/listitems/artwork/ListItemProgressionArrow@8.png -------------------------------------------------------------------------------- /qml/phoneui/components/listitems/artwork/delete@8.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/components/listitems/artwork/delete@8.png -------------------------------------------------------------------------------- /qml/phoneui/images/Checks1_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/Checks1_2x.png -------------------------------------------------------------------------------- /qml/phoneui/images/Checks1_2x_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/Checks1_2x_white.png -------------------------------------------------------------------------------- /qml/phoneui/images/Checks2_2x.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/Checks2_2x.png -------------------------------------------------------------------------------- /qml/phoneui/images/Checks2_2x_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/Checks2_2x_white.png -------------------------------------------------------------------------------- /qml/phoneui/images/call.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/call.png -------------------------------------------------------------------------------- /qml/phoneui/images/conversation_bubble_arrow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/conversation_bubble_arrow.png -------------------------------------------------------------------------------- /qml/phoneui/images/files/android/attach_audio.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/files/android/attach_audio.png -------------------------------------------------------------------------------- /qml/phoneui/images/files/android/attach_contact.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/files/android/attach_contact.png -------------------------------------------------------------------------------- /qml/phoneui/images/files/android/attach_gallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/files/android/attach_gallery.png -------------------------------------------------------------------------------- /qml/phoneui/images/files/android/attach_hide1.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/files/android/attach_hide1.png -------------------------------------------------------------------------------- /qml/phoneui/images/files/android/attach_hide2.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/files/android/attach_hide2.png -------------------------------------------------------------------------------- /qml/phoneui/images/files/android/attach_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/files/android/attach_video.png -------------------------------------------------------------------------------- /qml/phoneui/images/group_aqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/group_aqua.png -------------------------------------------------------------------------------- /qml/phoneui/images/group_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/group_blue.png -------------------------------------------------------------------------------- /qml/phoneui/images/group_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/group_green.png -------------------------------------------------------------------------------- /qml/phoneui/images/group_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/group_orange.png -------------------------------------------------------------------------------- /qml/phoneui/images/group_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/group_pink.png -------------------------------------------------------------------------------- /qml/phoneui/images/group_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/group_red.png -------------------------------------------------------------------------------- /qml/phoneui/images/group_violet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/group_violet.png -------------------------------------------------------------------------------- /qml/phoneui/images/group_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/group_yellow.png -------------------------------------------------------------------------------- /qml/phoneui/images/grouplist.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/grouplist.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_ab_attach.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_ab_attach.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_ab_doc.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_ab_doc.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_attach_gallery.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_attach_gallery.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_attach_location.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_attach_location.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_attach_photo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_attach_photo.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_attach_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_attach_video.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_lock_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_lock_green.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_profile_send_message.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_profile_send_message.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_send.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_send.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_send_disabled.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_send_disabled.png -------------------------------------------------------------------------------- /qml/phoneui/images/ic_video.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/ic_video.png -------------------------------------------------------------------------------- /qml/phoneui/images/logo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/logo.png -------------------------------------------------------------------------------- /qml/phoneui/images/msg_clock.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/msg_clock.png -------------------------------------------------------------------------------- /qml/phoneui/images/msg_clock_white.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/msg_clock_white.png -------------------------------------------------------------------------------- /qml/phoneui/images/photocancel.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/photocancel.png -------------------------------------------------------------------------------- /qml/phoneui/images/photoload.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/photoload.png -------------------------------------------------------------------------------- /qml/phoneui/images/photopause.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/photopause.png -------------------------------------------------------------------------------- /qml/phoneui/images/phototime.9.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/phototime.9.png -------------------------------------------------------------------------------- /qml/phoneui/images/playvideo.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/playvideo.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_aqua.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_aqua.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_blue.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_blue.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_green.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_green.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_orange.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_orange.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_pink.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_pink.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_placeholder.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_placeholder.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_red.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_red.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_violet.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_violet.png -------------------------------------------------------------------------------- /qml/phoneui/images/user_yellow.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/janimo/textsecure-qml/6eadece1a563510d3251fd125194a374814a2e5f/qml/phoneui/images/user_yellow.png -------------------------------------------------------------------------------- /qml/phoneui/js/avatar.js: -------------------------------------------------------------------------------- 1 | .pragma library 2 | 3 | var AVATARS = [ 4 | ["#8179d7", "_violet.png"], 5 | ["#f2749a", "_pink.png" ], 6 | ["#7ec455", "_green.png" ], 7 | ["#f3c34a", "_yellow.png"], 8 | ["#5b9dd8", "_blue.png" ], 9 | ["#62b8cd", "_aqua.png" ], 10 | ["#ed8b4a", "_orange.png"], 11 | ["#d95848", "_red.png" ] 12 | ] 13 | 14 | function getColor(userId) { 15 | return AVATARS[userId % 8][0]; 16 | } 17 | 18 | function getAvatar(userId, isGroup) { 19 | isGroup = isGroup || false; 20 | return (isGroup ? "group" : "user") + AVATARS[userId % 8][1]; 21 | } 22 | 23 | -------------------------------------------------------------------------------- /qml/phoneui/js/time.js: -------------------------------------------------------------------------------- 1 | .pragma library 2 | 3 | var MILLIS_IN_DAY = 1000 * 60 * 60 * 24; 4 | var MILLIS_IN_WEEK = 7 * MILLIS_IN_DAY; 5 | 6 | function format(i18n, time) { 7 | var date = new Date(time); 8 | var today = new Date(); 9 | // TRANSLATORS: localized time string, see available formats at 10 | // http://doc.qt.io/qt-5/qml-qtqml-qt.html#formatDateTime-method 11 | var timeFormatted = Qt.formatTime(date, i18n.tr("hh:mm")); 12 | // TRANSLATORS: localized date string, see available formats at 13 | // http://doc.qt.io/qt-5/qml-qtqml-qt.html#formatDateTime-method 14 | var dateFormatted = Qt.formatDate(date, i18n.tr("MMM d")); 15 | 16 | var isToday = date.getDate() === today.getDate(); 17 | if (isToday) { 18 | return timeFormatted; 19 | } else { 20 | var oneWeekAgo = new Date(today.getTime() - MILLIS_IN_WEEK); 21 | var isLessThanWeek = 22 | date.getTime() > oneWeekAgo.getTime() && 23 | date.getDate() !== oneWeekAgo.getDate(); 24 | if (isLessThanWeek) { 25 | return Qt.formatDate(date, "ddd"); 26 | } 27 | } 28 | return dateFormatted; 29 | } 30 | 31 | function formatSection(i18n, time) { 32 | var date = new Date(time); 33 | // TRANSLATORS: localized date string, see available formats at 34 | // http://doc.qt.io/qt-5/qml-qtqml-qt.html#formatDateTime-method 35 | var dateFormatted = Qt.formatDate(date, i18n.tr("MMM d")); 36 | 37 | return dateFormatted; 38 | } 39 | 40 | function formatLastSeen(i18n, time) { 41 | var date = new Date(time); 42 | var today = new Date(); 43 | var yesterday = new Date(today - MILLIS_IN_DAY); 44 | // TRANSLATORS: localized time string, see available formats at 45 | // http://doc.qt.io/qt-5/qml-qtqml-qt.html#formatDateTime-method 46 | var timeFormatted = Qt.formatTime(date, i18n.tr("hh:mm")); 47 | // TRANSLATORS: localized date string, see available formats at 48 | // http://doc.qt.io/qt-5/qml-qtqml-qt.html#formatDateTime-method 49 | var dateFormatted = Qt.formatDate(date, i18n.tr("MMM d")); 50 | 51 | var isToday = date.getDate() === today.getDate(); 52 | if (isToday) { 53 | // TRANSLATORS %1 refers to a time of the day 54 | return i18n.tr("today at %1").arg(timeFormatted); 55 | } else if (date.getDate() === yesterday.getDate()) { 56 | // TRANSLATORS %1 refers to a time of the day 57 | return i18n.tr("yesterday at %1").arg(timeFormatted); 58 | } else { 59 | // TRANSLATORS %1 refers to a date, and %1 to a time of the day 60 | return i18n.tr("%1 at %2").arg(dateFormatted).arg(timeFormatted); 61 | } 62 | } 63 | 64 | function formatTimeOnly(i18n, time) { 65 | var date = new Date(time); 66 | // TRANSLATORS: localized time string, see available formats at 67 | // http://doc.qt.io/qt-5/qml-qtqml-qt.html#formatDateTime-method 68 | var timeFormatted = Qt.formatTime(date, i18n.tr("hh:mm")); 69 | 70 | return timeFormatted; 71 | } 72 | 73 | function areSameDay(date1, date2) { 74 | var firstDate = new Date(date1) 75 | var secondDate = new Date(date2) 76 | if (!firstDate || !secondDate) 77 | return false 78 | return firstDate.getFullYear() == secondDate.getFullYear() 79 | && firstDate.getMonth() == secondDate.getMonth() 80 | && firstDate.getDate() == secondDate.getDate() 81 | } 82 | -------------------------------------------------------------------------------- /qml/phoneui/main.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.2 2 | import Ubuntu.Components 1.1 3 | import Ubuntu.Components.Popups 1.0 4 | import Ubuntu.PushNotifications 0.1 5 | 6 | import 'components' 7 | import 'ui' 8 | 9 | MainView { 10 | applicationName: "textsecure.jani" 11 | 12 | automaticOrientation: false 13 | 14 | useDeprecatedToolbar: false 15 | 16 | anchorToKeyboard: true 17 | 18 | id: root 19 | 20 | property var messagesModel 21 | 22 | visible: true 23 | width: units.gu(45) 24 | height: units.gu(80) 25 | 26 | PageStack { 27 | id: pageStack 28 | 29 | Component { 30 | id: dialogPage 31 | DialogPage {} 32 | } 33 | 34 | Component { 35 | id: dialogsPage 36 | DialogsPage {} 37 | } 38 | 39 | Component { 40 | id: contactsPage 41 | ContactsPage {} 42 | } 43 | 44 | Component { 45 | id: settingsPage 46 | SettingsPage {} 47 | } 48 | 49 | Component { 50 | id: verifyCodePage 51 | VerificationCodePage {} 52 | } 53 | 54 | Component { 55 | id: passwordPage 56 | PasswordPage {} 57 | } 58 | 59 | Component { 60 | id: signInPage 61 | SignInPage {} 62 | } 63 | 64 | Component { 65 | id: picker 66 | PickerPage {} 67 | } 68 | 69 | Component { 70 | id: previewPage 71 | PreviewPage {} 72 | } 73 | 74 | Component { 75 | id: introPage 76 | IntroPage {} 77 | } 78 | 79 | Component.onCompleted: initialize() 80 | } 81 | 82 | PushClient { 83 | id: pushClient 84 | appId: "textsecure.jani_textsecure" 85 | onTokenChanged: { 86 | //console.log("Push client token is", token) 87 | } 88 | } 89 | 90 | function initialize() { 91 | pageStack.push(dialogsPage) 92 | } 93 | 94 | function getPhoneNumber() { 95 | pageStack.push(signInPage) 96 | } 97 | 98 | function getVerificationCode() { 99 | pageStack.push(verifyCodePage) 100 | } 101 | 102 | function registered() { 103 | pageStack.push(dialogsPage) 104 | } 105 | 106 | function error(errorMsg) { 107 | var properties = {'text':errorMsg} 108 | PopupUtils.open(Qt.resolvedUrl("ui/dialogs/ErrorMessageDialog.qml"), root, properties) 109 | } 110 | 111 | function openSettings() { 112 | pageStack.push(settingsPage); 113 | } 114 | 115 | function openHelp() { 116 | Qt.openUrlExternally("https://github.com/janimo/textsecure-qml/issues") 117 | } 118 | 119 | function newChat() { 120 | openContacts(false); 121 | } 122 | 123 | function newGroupChat() { 124 | openContacts(true); 125 | } 126 | 127 | function markAllRead() { 128 | textsecure.markSessionsRead("") 129 | } 130 | 131 | function getStoragePassword() { 132 | pageStack.push(passwordPage) 133 | } 134 | 135 | function openContacts(groupChatMode) { 136 | var properties = { groupChatMode: groupChatMode }; 137 | pageStack.push(contactsPage, properties); 138 | } 139 | 140 | function backToDialogsPage() { 141 | while (pageStack.depth > 0 && 142 | pageStack.currentPage.objectName !== "dialogsPage") { 143 | pageStack.pop(); 144 | } 145 | if (pageStack.depth === 0) { 146 | pageStack.push(dialogsPage); 147 | } 148 | } 149 | 150 | function openChatById(chatId, tel, properties) { 151 | if (pageStack.depth > 0 && pageStack.currentPage.objectName === "chatPage") { 152 | if (pageStack.currentPage.chatId === chatId) return; 153 | } 154 | if (typeof properties === "undefined") properties = { }; 155 | backToDialogsPage(); 156 | textsecure.activeSessionID = tel 157 | textsecure.markSessionsRead(tel) 158 | messagesModel = sessionsModel.get(tel); 159 | properties['chatId'] = uid(tel); 160 | pageStack.push(dialogPage, properties); 161 | } 162 | 163 | function forwardMessages(messages) { 164 | var properties = { messagesToForward: messages }; 165 | console.log(messages) 166 | pageStack.push(dialogsPage, properties); 167 | } 168 | 169 | function uid(tel) { 170 | return parseInt(tel.substring(3, 10), 16) 171 | } 172 | 173 | function avatarImage(id) { 174 | return textsecure.avatarImage(id) 175 | } 176 | } 177 | -------------------------------------------------------------------------------- /qml/phoneui/ui/DialogsPage.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Components 1.1 3 | import Ubuntu.Components.ListItems 1.0 4 | import Ubuntu.Components.Popups 1.0 5 | import "../components" 6 | import "../components/listitems" 7 | import "../js/time.js" as Time 8 | 9 | TelegramPage { 10 | id: dialogsPage 11 | 12 | property var messagesToForward: [] 13 | 14 | head.actions: [ 15 | Action { 16 | iconName: "search" 17 | text: i18n.tr("Search") 18 | visible: !isSearching 19 | onTriggered: searchPressed() 20 | }, 21 | Action { 22 | iconName: "compose" 23 | enabled: isConnected 24 | onTriggered: newChat() 25 | }, 26 | Action { 27 | iconName: "contact-group" 28 | text: i18n.tr("New group") 29 | enabled: isConnected 30 | onTriggered: newGroupChat() 31 | }, 32 | Action { 33 | iconName: "ok" 34 | text: i18n.tr("Mark all read") 35 | enabled: isConnected 36 | onTriggered: markAllRead() 37 | }, 38 | Action { 39 | iconName: "settings" 40 | text: i18n.tr("Settings") 41 | onTriggered: openSettings() 42 | }, 43 | Action { 44 | iconName: "help" 45 | text: i18n.tr("Help") 46 | onTriggered: openHelp() 47 | } 48 | ] 49 | 50 | head.backAction.visible: isSearching || messagesToForward.length > 0 51 | 52 | body: Item { 53 | anchors.fill: parent 54 | 55 | ListView { 56 | id: dialogsListView 57 | anchors { 58 | top: parent.top 59 | left: parent.left 60 | right: parent.right 61 | bottom: parent.bottom 62 | } 63 | clip: true 64 | z: 1 65 | 66 | cacheBuffer: units.gu(8)*20 67 | model: sessionsModel.len 68 | delegate: TelegramDialogsListItem { 69 | id: dialogsListItem 70 | property var ses: sessionsModel.session(index) 71 | thumbnail: avatarImage(ses.tel) 72 | dialogId: uid(ses.tel) 73 | message: ses.last 74 | unreadCount: ses.unread 75 | mediaType: ses.cType 76 | height: visible? (messagesToForward.length > 0 ? 0 : units.gu(8)) : 0 77 | visible: ses.len > 0 78 | 79 | title: ses.name 80 | messageDate: ses.when 81 | isGroupChat: ses.isGroup 82 | 83 | onItemClicked: { 84 | mouse.accepted = true; 85 | searchFinished(); 86 | var properties = {}; 87 | if (messagesToForward.length > 0) { 88 | PopupUtils.open(Qt.resolvedUrl("dialogs/ConfirmationDialog.qml"), 89 | dialogsListItem, { 90 | text: i18n.tr("Forward message to %1?".arg(title)), 91 | onAccept: function() { 92 | properties['messagesToForward'] = messagesToForward; 93 | openChatById(dialogId, ses.tel, properties); 94 | messagesToForward = []; 95 | } 96 | } 97 | ); 98 | } else { 99 | openChatById(dialogsListItem.title, ses.tel, properties); 100 | messagesToForward = []; 101 | } 102 | } 103 | } 104 | 105 | Component.onCompleted: { 106 | // FIXME: workaround for qtubuntu not returning values depending on the grid unit definition 107 | // for Flickable.maximumFlickVelocity and Flickable.flickDeceleration 108 | var scaleFactor = units.gridUnit / 8; 109 | maximumFlickVelocity = maximumFlickVelocity * scaleFactor; 110 | flickDeceleration = flickDeceleration * scaleFactor; 111 | } 112 | } 113 | 114 | Scrollbar { 115 | flickableItem: dialogsListView 116 | } 117 | 118 | DelegateUtils { 119 | id: delegateUtils 120 | } 121 | } 122 | 123 | function onSearchTermChanged(t) { 124 | textsecure.filterSessions(t) 125 | } 126 | 127 | } 128 | -------------------------------------------------------------------------------- /qml/phoneui/ui/IntroPage.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Components 0.1 3 | import "../components" 4 | 5 | TelegramPage { 6 | id: page 7 | 8 | head.backAction.visible: false 9 | 10 | body: Item { 11 | anchors { 12 | fill: parent 13 | margins: units.gu(2) 14 | } 15 | 16 | Text { 17 | id: infoText 18 | elide: Text.ElideRight 19 | anchors { 20 | top: parent.top 21 | margins: units.gu(1) 22 | } 23 | width: parent.width 24 | wrapMode: Text.WordWrap 25 | text: "

Thanks for trying out TextSecure!



\ 26 | File bugs and feature requests on github:
\ 27 | https://github.com/janimo/textsecure-qml/issues
" 28 | onLinkActivated:Qt.openUrlExternally(link) 29 | } 30 | 31 | TelegramButton { 32 | anchors { 33 | top: infoText.bottom 34 | topMargin: units.gu(1) 35 | right: parent.right 36 | left: parent.left 37 | } 38 | width: parent.width 39 | 40 | text: i18n.tr("OK") 41 | onClicked: pageStack.push(dialogsPage) 42 | } 43 | } 44 | } 45 | -------------------------------------------------------------------------------- /qml/phoneui/ui/PasswordPage.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Components 0.1 3 | import "../components" 4 | 5 | TelegramPage { 6 | property alias passwordTextField: passwordTextField 7 | property alias errorLabel: errorLabel 8 | 9 | id: page 10 | head.backAction.visible: false 11 | objectName: "passwordPage" 12 | pageTitle: i18n.tr("Master password") 13 | onlineIndicationOnly: true 14 | 15 | body: Item { 16 | anchors { 17 | fill: parent 18 | margins: units.gu(2) 19 | } 20 | 21 | TelegramLabel { 22 | id: infoLabel 23 | anchors { 24 | top: parent.top 25 | margins: units.gu(1) 26 | } 27 | width: parent.width 28 | text: i18n.tr("Please enter the password.\n") 29 | } 30 | 31 | TelegramLabel { 32 | id: errorLabel 33 | anchors { 34 | top: infoLabel.bottom 35 | topMargin: units.gu(1) 36 | } 37 | width: parent.width 38 | visible: false 39 | color: "red" 40 | } 41 | 42 | TextField { 43 | id: passwordTextField 44 | anchors { 45 | top: errorLabel.bottom 46 | topMargin: units.gu(1) 47 | left: parent.left 48 | right: parent.right 49 | } 50 | 51 | placeholderText: i18n.tr("Master password") 52 | echoMode: TextInput.Password 53 | Keys.onEnterPressed: done() 54 | Keys.onReturnPressed: done() 55 | 56 | horizontalAlignment: TextInput.AlignHCenter 57 | 58 | Component.onCompleted: { 59 | forceActiveFocus(); 60 | } 61 | 62 | } 63 | 64 | TelegramButton { 65 | id: doneButton 66 | anchors { 67 | top: passwordTextField.bottom 68 | topMargin: units.gu(1) 69 | right: parent.right 70 | left: parent.left 71 | } 72 | width: parent.width 73 | 74 | enabled: isConnected && passwordTextField.text !== "" 75 | text: i18n.tr("Enter") 76 | onClicked: done() 77 | } 78 | } 79 | 80 | signal error(int id, int errorCode, int errorText); 81 | 82 | signal passwordEntered(string text) 83 | 84 | function done() { 85 | if (busy) return; 86 | 87 | Qt.inputMethod.commit(); 88 | Qt.inputMethod.hide(); 89 | 90 | if (passwordTextField.text.length > 0) { 91 | busy = true; 92 | clearError(); 93 | passwordEntered(passwordTextField.text); 94 | pageStack.push(dialogsPage) 95 | } 96 | } 97 | 98 | function onError(errorMessage) { 99 | passwordTextField.text = ""; 100 | busy = false; 101 | setError(errorMessage); 102 | } 103 | 104 | function setError(message) { 105 | errorLabel.text = message; 106 | errorLabel.visible = true; 107 | } 108 | 109 | function clearError() { 110 | if (errorLabel.visible) { 111 | errorLabel.visible = false; 112 | errorLabel.text = ""; 113 | } 114 | } 115 | } 116 | -------------------------------------------------------------------------------- /qml/phoneui/ui/PickerPage.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.0 2 | import Ubuntu.Components 0.1 3 | import "../components" 4 | import Ubuntu.Content 1.1 5 | 6 | TelegramPage { 7 | 8 | id: picker 9 | 10 | Component { 11 | id: resultComponent 12 | ContentItem {} 13 | } 14 | 15 | visible: false 16 | property var url 17 | property var handler 18 | property var contentType 19 | property var curTransfer 20 | 21 | function __exportItems(url) { 22 | if (picker.curTransfer.state === ContentTransfer.InProgress) 23 | { 24 | picker.curTransfer.items = [ resultComponent.createObject(root, {"url": url}) ]; 25 | picker.curTransfer.state = ContentTransfer.Charged; 26 | } 27 | } 28 | 29 | ContentPeerPicker { 30 | visible: parent.visible 31 | contentType: picker.contentType 32 | handler: picker.handler 33 | showTitle: false 34 | onPeerSelected: { 35 | picker.curTransfer = peer.request(); 36 | pageStack.pop(); 37 | if (picker.curTransfer.state === ContentTransfer.InProgress) 38 | picker.__exportItems(picker.url); 39 | } 40 | onCancelPressed: { 41 | pageStack.pop(); 42 | } 43 | } 44 | 45 | Connections { 46 | target: picker.curTransfer 47 | onStateChanged: { 48 | console.log("curTransfer StateChanged: " + picker.curTransfer.state); 49 | if (picker.curTransfer.state === ContentTransfer.InProgress) { 50 | picker.__exportItems(picker.url); 51 | } 52 | } 53 | } 54 | } 55 | -------------------------------------------------------------------------------- /qml/phoneui/ui/PreviewPage.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright 2015 Canonical Ltd. 3 | * 4 | * This program is free software; you can redistribute it and/or modify 5 | * it under the terms of the GNU General Public License as published by 6 | * the Free Software Foundation; version 3. 7 | * 8 | * This program is distributed in the hope that it will be useful, 9 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 10 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 11 | * GNU General Public License for more details. 12 | * 13 | * You should have received a copy of the GNU General Public License 14 | * along with this program. If not, see . 15 | */ 16 | 17 | import QtQuick 2.0 18 | import Ubuntu.Components 1.0 19 | import Ubuntu.Content 1.1 20 | 21 | import "../components" 22 | import "../components/TelegramColors.js" as TelegramColors 23 | 24 | TelegramPage { 25 | property int chatId: 0 26 | property string senderName: "" 27 | property string photoPreviewSource: "" 28 | property string audioPreviewSource: "" 29 | property string videoPreviewSource: "" 30 | 31 | id: previewPage 32 | title: i18n.tr("From: ") + senderName 33 | 34 | head.actions: [ 35 | 36 | Action { 37 | iconName: "save" 38 | text: i18n.tr("Save") 39 | onTriggered: save() 40 | visible: saveAndShareVisible() 41 | } 42 | ] 43 | 44 | function saveAndShareVisible() { 45 | return (photoPreviewSource !== "" || videoPreviewSource !== ""); 46 | } 47 | 48 | function save() { 49 | singleMediaViewer.reset(); 50 | 51 | if (photoPreviewSource !== "") { 52 | pageStack.push(picker, { 53 | "url": photoPreviewSource, 54 | "handler": ContentHandler.Destination, 55 | "contentType": ContentType.Pictures 56 | }); 57 | } else if (videoPreviewSource !== "") { 58 | pageStack.push(picker, { 59 | "url": videoPreviewSource, 60 | "handler": ContentHandler.Destination, 61 | "contentType": ContentType.Videos 62 | }); 63 | } 64 | } 65 | 66 | body: Item { 67 | 68 | anchors { 69 | fill: parent 70 | } 71 | 72 | Rectangle { 73 | anchors.fill: parent 74 | color: TelegramColors.page_background 75 | } 76 | 77 | SingleMediaViewer { 78 | id: singleMediaViewer 79 | anchors.fill: parent 80 | maxDimension: 2*Math.max(previewPage.width, previewPage.height) 81 | } 82 | } 83 | } 84 | -------------------------------------------------------------------------------- /qml/phoneui/ui/SettingsPage.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Canonical Ltd 3 | * 4 | * This file is part of Ubuntu Weather App 5 | * 6 | * Ubuntu Weather App is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License version 3 as 8 | * published by the Free Software Foundation. 9 | * 10 | * Ubuntu Weather App is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import QtQuick 2.4 20 | import Ubuntu.Components 1.1 21 | import "../components" 22 | 23 | TelegramPage { 24 | title: i18n.tr("Settings") 25 | property bool bug1341671workaround: true 26 | 27 | Column { 28 | id: settingsColumn 29 | 30 | anchors.fill: parent 31 | 32 | StandardListItem { 33 | title: i18n.tr("Advanced") 34 | onClicked: pageStack.push(Qt.resolvedUrl("settings/AdvancedPage.qml")) 35 | } 36 | } 37 | } 38 | -------------------------------------------------------------------------------- /qml/phoneui/ui/dialogs/ConfirmationDialog.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.3 2 | import Ubuntu.Components 1.1 3 | import Ubuntu.Components.Popups 1.0 4 | 5 | Dialog { 6 | id: dialogue 7 | 8 | property string acceptText: i18n.tr("OK") 9 | property string altText: "" 10 | property string cancelText: i18n.tr("Cancel") 11 | property var onAccept: function() {} 12 | property var onAlt: function() {} 13 | property var onCancel: function() { 14 | PopupUtils.close(dialogue); 15 | } 16 | 17 | Button { 18 | text: acceptText 19 | color: UbuntuColors.green 20 | onClicked: optionSelected(onAccept) 21 | } 22 | 23 | Button { 24 | text: altText 25 | strokeColor: UbuntuColors.lightGrey 26 | visible: text.length > 0 27 | onClicked: optionSelected(onAlt) 28 | } 29 | 30 | Button { 31 | text: cancelText 32 | color: UbuntuColors.lightGrey 33 | onClicked: optionSelected(onCancel) 34 | } 35 | 36 | function optionSelected(option) { 37 | option(); 38 | PopupUtils.close(dialogue); 39 | } 40 | } 41 | -------------------------------------------------------------------------------- /qml/phoneui/ui/dialogs/ErrorMessageDialog.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.3 2 | import Ubuntu.Components 1.1 3 | import Ubuntu.Components.Popups 1.0 4 | 5 | Dialog { 6 | id: dialogue 7 | title: "TextSecure error" 8 | 9 | text: "Unknown error" 10 | 11 | Button { 12 | text: i18n.tr("OK") 13 | color: UbuntuColors.red 14 | onClicked: PopupUtils.close(dialogue); 15 | } 16 | } 17 | -------------------------------------------------------------------------------- /qml/phoneui/ui/dialogs/InfoDialog.qml: -------------------------------------------------------------------------------- 1 | import QtQuick 2.3 2 | import Ubuntu.Components 1.1 3 | import Ubuntu.Components.Popups 1.0 4 | 5 | Dialog { 6 | id: dialogue 7 | 8 | property alias textWithLink:textBox.text 9 | 10 | Text { 11 | id: textBox 12 | wrapMode: Text.WordWrap 13 | onLinkActivated:Qt.openUrlExternally(link) 14 | } 15 | 16 | Button { 17 | text: i18n.tr("OK") 18 | color: UbuntuColors.green 19 | onClicked: PopupUtils.close(dialogue); 20 | } 21 | } 22 | -------------------------------------------------------------------------------- /qml/phoneui/ui/settings/AdvancedPage.qml: -------------------------------------------------------------------------------- 1 | /* 2 | * Copyright (C) 2015 Canonical Ltd 3 | * 4 | * This file is part of Ubuntu Weather App 5 | * 6 | * Ubuntu Weather App is free software: you can redistribute it and/or modify 7 | * it under the terms of the GNU General Public License version 3 as 8 | * published by the Free Software Foundation. 9 | * 10 | * Ubuntu Weather App is distributed in the hope that it will be useful, 11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of 12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 13 | * GNU General Public License for more details. 14 | * 15 | * You should have received a copy of the GNU General Public License 16 | * along with this program. If not, see . 17 | */ 18 | 19 | import QtQuick 2.4 20 | import Ubuntu.Components 1.1 21 | import Ubuntu.Components.ListItems 1.0 as ListItem 22 | import Ubuntu.Components.Popups 1.0 23 | 24 | Page { 25 | title: i18n.tr("Advanced") 26 | id: root 27 | 28 | Column { 29 | anchors.fill: parent 30 | 31 | ListItem.Subtitled { 32 | text: i18n.tr("Unregistering") 33 | subText: textsecure.phoneNumber 34 | onClicked: { 35 | PopupUtils.open(Qt.resolvedUrl("../dialogs/ConfirmationDialog.qml"), 36 | root, { 37 | title: i18n.tr("Disable Signal messages and calls?"), 38 | text: i18n.tr("Disable Signal messages and calls by unregistering from the server. You will need to re-register your phone number to use them again in the future."), 39 | onAccept: function() { 40 | textsecure.unregister() 41 | } 42 | }) 43 | } 44 | } 45 | 46 | ListItem.ThinDivider {} 47 | ListItem.Standard { 48 | control: CheckBox { 49 | checked: settingsModel.sendByEnter 50 | 51 | onCheckedChanged: { 52 | settingsModel.sendByEnter = checked 53 | textsecure.saveSettings() 54 | } 55 | 56 | } 57 | text: i18n.tr("Enter key sends") 58 | 59 | onClicked: control.checked = !control.checked 60 | } 61 | 62 | ListItem.ThinDivider {} 63 | ListItem.Subtitled { 64 | text: i18n.tr("Submit debug log") 65 | subText: "Signal "+appVersion 66 | onClicked: { 67 | var ret = textsecure.submitDebugLog() 68 | 69 | var url = ret[0] 70 | 71 | if (url != "") { 72 | PopupUtils.open(Qt.resolvedUrl("../dialogs/InfoDialog.qml"), 73 | root, { 74 | title: i18n.tr("Success!"), 75 | textWithLink: i18n.tr("Copy this URL and add it to your issue report or support email:")+"
"+url+"" 76 | }) 77 | } 78 | } 79 | } 80 | } 81 | } 82 | --------------------------------------------------------------------------------