i18n: integrate translations to packaging

This commit adds internationalization support
We interface with Transifex as our web translation platform.

Two new scripts:
- generate-strings.sh: generates source files in English.
We need one source file by UI file
(Apple's law) + one Localizable.strings for strings in code.

- update-translations.sh: pulls translations completes at 75% at least
from transifex, and cleanup the files (UTF-16LE to UTF-8 encoding,
and remove first line with corrupted char)

Issue: #80347
Change-Id: Iefd297e424aaacefe6e867192e10dabd21bfb8d2
diff --git a/.tx/config b/.tx/config
new file mode 100644
index 0000000..2ec6f6f
--- /dev/null
+++ b/.tx/config
@@ -0,0 +1,110 @@
+[main]
+host = https://www.transifex.com
+
+[ring.localizablestrings]
+file_filter = ui/<lang>.lproj/Localizable.strings
+source_file = ui/Base.lproj/Localizable.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxAccAdvanced]
+file_filter = ui/<lang>.lproj/AccAdvanced.strings
+source_file = ui/Base.lproj/AccAdvanced.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxAccAudio]
+file_filter = ui/<lang>.lproj/AccAudio.strings
+source_file = ui/Base.lproj/AccAudio.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxAccGeneral]
+file_filter = ui/<lang>.lproj/AccGeneral.strings
+source_file = ui/Base.lproj/AccGeneral.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxAccounts]
+file_filter = ui/<lang>.lproj/Accounts.strings
+source_file = ui/Base.lproj/Accounts.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxAccRing]
+file_filter = ui/<lang>.lproj/AccRing.strings
+source_file = ui/Base.lproj/AccRing.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxAccSecurity]
+file_filter = ui/<lang>.lproj/AccSecurity.strings
+source_file = ui/Base.lproj/AccSecurity.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxAccVideo]
+file_filter = ui/<lang>.lproj/AccVideo.strings
+source_file = ui/Base.lproj/AccVideo.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxAudioPrefs]
+file_filter = ui/<lang>.lproj/AudioPrefs.strings
+source_file = ui/Base.lproj/AudioPrefs.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxCertificateWindow]
+file_filter = ui/<lang>.lproj/CertificateWindow.strings
+source_file = ui/Base.lproj/CertificateWindow.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxCurrentCall]
+file_filter = ui/<lang>.lproj/CurrentCall.strings
+source_file = ui/Base.lproj/CurrentCall.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxGeneralPrefs]
+file_filter = ui/<lang>.lproj/GeneralPrefs.strings
+source_file = ui/Base.lproj/GeneralPrefs.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxMainMenu]
+file_filter = ui/<lang>.lproj/MainMenu.strings
+source_file = ui/Base.lproj/MainMenu.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxPersonLinker]
+file_filter = ui/<lang>.lproj/PersonLinker.strings
+source_file = ui/Base.lproj/PersonLinker.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxPreferencesScreen]
+file_filter = ui/<lang>.lproj/PreferencesScreen.strings
+source_file = ui/Base.lproj/PreferencesScreen.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxRingWindow]
+file_filter = ui/<lang>.lproj/RingWindow.strings
+source_file = ui/Base.lproj/RingWindow.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxRingWizard]
+file_filter = ui/<lang>.lproj/RingWizard.strings
+source_file = ui/Base.lproj/RingWizard.strings
+source_lang = en
+type = STRINGS
+
+[ring.osxVideoPrefs]
+file_filter = ui/<lang>.lproj/VideoPrefs.strings
+source_file = ui/Base.lproj/VideoPrefs.strings
+source_lang = en
+type = STRINGS
diff --git a/CMakeLists.txt b/CMakeLists.txt
index 3c00835..ec841d5 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -201,6 +201,31 @@
                 PROPERTIES MACOSX_PACKAGE_LOCATION Resources/QtTranslations)
     SET(LOCALIZED_${LANG} ${LOCALIZED_${LANG}}
                 "${LRC_TRANSLATIONS_PATH}/lrc_${LANG}.qm")
+ENDFOREACH()
+
+# Check which translations are found for the client
+FILE(GLOB LPROJ_LIST ui/*.lproj)
+
+FOREACH(LPROJ ${LPROJ_LIST})
+    # Extract country code from <lang>.lproj folder name
+    GET_FILENAME_COMPONENT(LANG ${LPROJ} NAME_WE)
+    IF(EXISTS "${LPROJ}/Localizable.strings")
+        MESSAGE("Localizable:" ${LANG})
+        SET_SOURCE_FILES_PROPERTIES(${LPROJ}/Localizable.strings
+                        PROPERTIES MACOSX_PACKAGE_LOCATION Resources/${LANG}.lproj/)
+
+        SET(LOCALIZED_${LANG} ${LOCALIZED_${LANG}}
+                        ${LPROJ}/Localizable.strings)
+    ENDIF()
+    FOREACH(xib ${ringclient_XIBS})
+       IF(EXISTS "${LPROJ}/${xib}.strings")
+            SET_SOURCE_FILES_PROPERTIES(${LPROJ}/${xib}.strings
+                        PROPERTIES MACOSX_PACKAGE_LOCATION Resources/${LANG}.lproj/)
+
+        SET(LOCALIZED_${LANG} ${LOCALIZED_${LANG}}
+                        ${LPROJ}/${xib}.strings)
+        ENDIF()
+    ENDFOREACH()
 
     # Regroup those files under a .lproj folder
     SOURCE_GROUP("Resources\\${LANG}.lproj" FILES
@@ -211,7 +236,7 @@
 
 # append '.xib' extension before linking xib files in executable
 FOREACH(xib ${ringclient_XIBS})
-  SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ui/${xib}.xib)
+  SET(ringclient_XIBS_FOR_EXECUTABLE ${ringclient_XIBS_FOR_EXECUTABLE} ui/Base.lproj/${xib}.xib)
 ENDFOREACH()
 
 SET(TO_ADD
@@ -288,9 +313,9 @@
 FOREACH(xib ${ringclient_XIBS})
   ADD_CUSTOM_COMMAND(TARGET ${PROJ_NAME} POST_BUILD
                       COMMAND ${IBTOOL} --errors --warnings --notices --output-format human-readable-text
-                              --compile ${CMAKE_CURRENT_BINARY_DIR}/\${CONFIGURATION}/${PROJ_NAME}.app/Contents/Resources/${xib}.nib
-                             ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib
-                      COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/ui/${xib}.xib")
+                              --compile ${CMAKE_CURRENT_BINARY_DIR}/\${CONFIGURATION}/${PROJ_NAME}.app/Contents/Resources/Base.lproj/${xib}.nib
+                             ${CMAKE_CURRENT_SOURCE_DIR}/ui/Base.lproj/${xib}.xib
+                      COMMENT "Compiling ${CMAKE_CURRENT_SOURCE_DIR}/ui/Base.lproj/${xib}.xib")
 
 ENDFOREACH()
 
diff --git a/generate-string.sh b/generate-string.sh
new file mode 100755
index 0000000..480bb00
--- /dev/null
+++ b/generate-string.sh
@@ -0,0 +1,43 @@
+#!/bin/bash
+
+#  Copyright (C) 2015 Savoir-faire Linux Inc.
+#  Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 3 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
+
+# This scripts generates .strings files for Base language (e.g: english)
+# These files are encoded in UTF-16LE which is interpreted as binary in Git,
+# and therefore not visible when using 'git diff'
+
+echo "Regenerating Localizable.strings..."
+find src -name '*.mm' | xargs genstrings -o ui/Base.lproj
+iconv -f UTF-16LE -t UTF-8 ui/Base.lproj/Localizable.strings > ui/Base.lproj/Localizable.strings.8
+sed '1s/.*//' ui/Base.lproj/Localizable.strings.8 > ui/Base.lproj/Localizable.strings
+rm ui/Base.lproj/Localizable.strings.8
+
+# generate strings from XIBs
+
+for file in `find ui -name '*.xib' -and -path '*/Base.lproj/*'`; do
+    strings_file=`echo $file | sed s/\.xib/.strings/`
+    echo "Regenerating $strings_file..."
+    ibtool --generate-strings-file $strings_file $file
+
+    # Change file encoding
+    iconv -f UTF-16LE -t UTF-8 $strings_file > $strings_file.8
+
+    # Empty first line
+    sed '1s/.*//' $strings_file.8 > $strings_file
+    rm $strings_file.8
+done
diff --git a/src/AccRingVC.mm b/src/AccRingVC.mm
index 448a500..54e99dd 100644
--- a/src/AccRingVC.mm
+++ b/src/AccRingVC.mm
@@ -113,7 +113,8 @@
     [bootstrapField setStringValue:account->hostname().toNSString()];
 
     if([account->username().toNSString() isEqualToString:@""])
-        [hashField setStringValue:@"Reopen account to see your hash"];
+        [hashField setStringValue:NSLocalizedString(@"Reopen account to see your hash",
+                                                    @"Show advice to user")];
     else
         [hashField setStringValue:account->username().toNSString()];
 
diff --git a/src/AccSecurityVC.mm b/src/AccSecurityVC.mm
index ef955c8..859c430 100644
--- a/src/AccSecurityVC.mm
+++ b/src/AccSecurityVC.mm
@@ -353,7 +353,7 @@
         [openPanel setTitle:NSLocalizedString(@"Choose a private key file", @"Open panel title")];
     }
 
-    [openPanel setPrompt:NSLocalizedString(@"Choose", @"Open panel prompt for 'Choose a file'")];
+    [openPanel setPrompt:NSLocalizedString(@"Choose CA", @"Open panel prompt for 'Choose a file'")];
     [openPanel setDelegate:self];
 }
 
diff --git a/src/AudioPrefsVC.mm b/src/AudioPrefsVC.mm
index 1248932..25218be 100644
--- a/src/AudioPrefsVC.mm
+++ b/src/AudioPrefsVC.mm
@@ -166,7 +166,7 @@
     [openPanel setCanChooseFiles:NO];
     [openPanel setResolvesAliases:YES];
     [openPanel setTitle:NSLocalizedString(@"Choose a file", @"Open panel title")];
-    [openPanel setPrompt:NSLocalizedString(@"Choose", @"Open panel prompt for 'Choose a directory'")];
+    [openPanel setPrompt:NSLocalizedString(@"Choose file", @"Open panel prompt for 'Choose a directory'")];
     [openPanel setDelegate:self];
 }
 
diff --git a/src/HistoryVC.mm b/src/HistoryVC.mm
index b1b4400..8eb1b5a 100644
--- a/src/HistoryVC.mm
+++ b/src/HistoryVC.mm
@@ -200,7 +200,7 @@
                 if (!contactmethod->contact() || contactmethod->contact()->isPlaceHolder()) {
                     NSMenu *theMenu = [[NSMenu alloc]
                                        initWithTitle:@""];
-                    [theMenu insertItemWithTitle:@"Add to contact"
+                    [theMenu insertItemWithTitle:NSLocalizedString(@"Add to contacts", @"Contextual menu action")
                                           action:@selector(addToContact)
                                    keyEquivalent:@"a"
                                          atIndex:0];
diff --git a/src/RingWizardWC.mm b/src/RingWizardWC.mm
index dfbf31c..9f262fb 100644
--- a/src/RingWizardWC.mm
+++ b/src/RingWizardWC.mm
@@ -81,7 +81,8 @@
     if(![self checkForRingAccount]) {
         accountToCreate = AccountModel::instance()->add("", Account::Protocol::RING);
     } else {
-        [indicationLabel setStringValue:@"Ring is already ready to work"];
+        [indicationLabel setStringValue:NSLocalizedString(@"Ring is already ready to work",
+                                                          @"Display message to user")];
         auto accList = AccountModel::instance()->getAccountsByProtocol(Account::Protocol::RING);
         [self displayHash:accList[0]->username().toNSString()];
         [showCustomCertsButton setHidden:YES];
@@ -115,7 +116,8 @@
 
     NSSharingService* emailSharingService = [NSSharingService sharingServiceNamed:NSSharingServiceNameComposeEmail];
 
-    [createButton setTitle:@"Share by mail"];
+    [createButton setTitle:NSLocalizedString(@"Share by mail",
+                                             @"Share button")];
     [createButton setAlternateImage:emailSharingService.alternateImage];
     [createButton setAction:@selector(shareByEmail)];
 }
@@ -125,7 +127,8 @@
     [nickname setHidden:YES];
     [progressBar setHidden:NO];
     [createButton setEnabled:NO];
-    [indicationLabel setStringValue:@"Just a moment..."];
+    [indicationLabel setStringValue:NSLocalizedString(@"Just a moment...",
+                                                      @"Indication for user")];
 
     QModelIndex qIdx =  AccountModel::instance()->protocolModel()->selectionModel()->currentIndex();
 
@@ -166,7 +169,7 @@
                          NSLog(@"Account created!");
                          [progressBar setHidden:YES];
                          [createButton setEnabled:YES];
-                         [indicationLabel setStringValue:@"This is your number, share it with your friends!"];
+                         [indicationLabel setStringValue:NSLocalizedString(@"This is your number, share it with your friends!", @"Indication to user")];
                          [self displayHash:account->username().toNSString()];
                      });
 }
diff --git a/src/main.mm b/src/main.mm
index 248dc7e..5a8f5e0 100644
--- a/src/main.mm
+++ b/src/main.mm
@@ -38,6 +38,9 @@
 #import <QTranslator>
 #import <QLocale>
 
+//LRC
+#import <personmodel.h>
+
 #import "backends/AddressBookBackend.h"
 #import "delegates/ImageManipulationDelegate.h"
 
diff --git a/ui/Base.lproj/AccAdvanced.strings b/ui/Base.lproj/AccAdvanced.strings
new file mode 100644
index 0000000..69a3843
--- /dev/null
+++ b/ui/Base.lproj/AccAdvanced.strings
@@ -0,0 +1,72 @@
+
+/* Class = "NSTextFieldCell"; placeholderString = "Server url..."; ObjectID = "0eY-9x-bAr"; */
+"0eY-9x-bAr.placeholderString" = "Server url...";
+
+/* Class = "NSTextFieldCell"; placeholderString = "realm..."; ObjectID = "6u9-cM-ep0"; */
+"6u9-cM-ep0.placeholderString" = "realm...";
+
+/* Class = "NSButtonCell"; title = "Same as local parameters"; ObjectID = "Atv-t7-5YJ"; */
+"Atv-t7-5YJ.title" = "Same as local parameters";
+
+/* Class = "NSTextFieldCell"; title = "Min"; ObjectID = "FQ4-fp-Pxj"; */
+"FQ4-fp-Pxj.title" = "Min";
+
+/* Class = "NSTextFieldCell"; title = "Audio RTP port Range"; ObjectID = "Jho-hi-Mvg"; */
+"Jho-hi-Mvg.title" = "Audio RTP port Range";
+
+/* Class = "NSTextFieldCell"; title = "Network Interface"; ObjectID = "K9I-vh-jeu"; */
+"K9I-vh-jeu.title" = "Network Interface";
+
+/* Class = "NSButtonCell"; title = "Set published address and port"; ObjectID = "OL5-DI-aCq"; */
+"OL5-DI-aCq.title" = "Set published address and port";
+
+/* Class = "NSSecureTextFieldCell"; placeholderString = "password..."; ObjectID = "OR2-la-DUE"; */
+"OR2-la-DUE.placeholderString" = "password...";
+
+/* Class = "NSTextFieldCell"; placeholderString = "username..."; ObjectID = "P7k-xH-2mr"; */
+"P7k-xH-2mr.placeholderString" = "username...";
+
+/* Class = "NSButtonCell"; title = "Using TURN"; ObjectID = "QS0-TJ-NQh"; */
+"QS0-TJ-NQh.title" = "Using TURN";
+
+/* Class = "NSTextFieldCell"; title = "Published Address"; ObjectID = "Qf3-E3-5U6"; */
+"Qf3-E3-5U6.title" = "Published Address";
+
+/* Class = "NSTextFieldCell"; title = "Video RTP port Range"; ObjectID = "XA8-Sy-CYG"; */
+"XA8-Sy-CYG.title" = "Video RTP port Range";
+
+/* Class = "NSTextFieldCell"; title = "Min"; ObjectID = "a6W-wm-OmC"; */
+"a6W-wm-OmC.title" = "Min";
+
+/* Class = "NSTextFieldCell"; title = "Max"; ObjectID = "dbq-qU-93x"; */
+"dbq-qU-93x.title" = "Max";
+
+/* Class = "NSButtonCell"; title = "Radio"; ObjectID = "fB0-X8-GXk"; */
+"fB0-X8-GXk.title" = "Radio";
+
+/* Class = "NSTextFieldCell"; title = "Registration expire:"; ObjectID = "fCd-4d-sP0"; */
+"fCd-4d-sP0.title" = "Registration expire:";
+
+/* Class = "NSButtonCell"; title = "Using STUN"; ObjectID = "gVd-Dw-1B4"; */
+"gVd-Dw-1B4.title" = "Using STUN";
+
+/* Class = "NSTextFieldCell"; title = "Max"; ObjectID = "oa2-Pe-6Uw"; */
+"oa2-Pe-6Uw.title" = "Max";
+
+/* Class = "NSTextFieldCell"; title = "Address"; ObjectID = "sTk-1C-1KO"; */
+"sTk-1C-1KO.title" = "Address";
+
+/* Class = "NSTextFieldCell"; title = "Local port:"; ObjectID = "shs-Xm-qnY"; */
+"shs-Xm-qnY.title" = "Local port:";
+
+/* Class = "NSTextFieldCell"; placeholderString = "Server url..."; ObjectID = "uzg-09-8vi"; */
+"uzg-09-8vi.placeholderString" = "Server url...";
+
+/* Class = "NSTextFieldCell"; title = "Port"; ObjectID = "wl8-YK-M76"; */
+"wl8-YK-M76.title" = "Port";
+
+/* Class = "NSTextFieldCell"; title = "seconds"; ObjectID = "xGw-j0-4ID"; */
+"xGw-j0-4ID.title" = "seconds";
+
+/* Class = "NSTextFieldCell"; title = "Registration"; ObjectID = "yB5-ET-gBL"; */
+"yB5-ET-gBL.title" = "Registration";
diff --git a/ui/AccAdvanced.xib b/ui/Base.lproj/AccAdvanced.xib
similarity index 99%
rename from ui/AccAdvanced.xib
rename to ui/Base.lproj/AccAdvanced.xib
index 2e15fd9..039b131 100644
--- a/ui/AccAdvanced.xib
+++ b/ui/Base.lproj/AccAdvanced.xib
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14F27" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
     </dependencies>
diff --git a/ui/Base.lproj/AccAudio.strings b/ui/Base.lproj/AccAudio.strings
new file mode 100644
index 0000000..bf4499e
--- /dev/null
+++ b/ui/Base.lproj/AccAudio.strings
@@ -0,0 +1,36 @@
+
+/* Class = "NSButtonCell"; title = "Down"; ObjectID = "Bbz-hd-1CE"; */
+"Bbz-hd-1CE.title" = "Down";
+
+/* Class = "NSButtonCell"; title = "Enable ringtones"; ObjectID = "KkI-i1-mfY"; */
+"KkI-i1-mfY.title" = "Enable ringtones";
+
+/* Class = "NSButtonCell"; title = "Up"; ObjectID = "MbZ-7X-K5I"; */
+"MbZ-7X-K5I.title" = "Up";
+
+/* Class = "NSTableColumn"; headerCell.title = "Codecs"; ObjectID = "PGV-RF-f13"; */
+"PGV-RF-f13.headerCell.title" = "Codecs";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "PYp-JZ-g1v"; */
+"PYp-JZ-g1v.title" = "Text Cell";
+
+/* Class = "NSTextFieldCell"; title = "Text"; ObjectID = "RBO-p6-Wej"; */
+"RBO-p6-Wej.title" = "Text";
+
+/* Class = "NSTextFieldCell"; title = "Ringtones"; ObjectID = "aMg-uJ-Krx"; */
+"aMg-uJ-Krx.title" = "Ringtones";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "bZK-L6-HSm"; */
+"bZK-L6-HSm.title" = "Text Cell";
+
+/* Class = "NSTextFieldCell"; title = "Codecs"; ObjectID = "biN-bX-qM1"; */
+"biN-bX-qM1.title" = "Codecs";
+
+/* Class = "NSTableColumn"; headerCell.title = "Frequency"; ObjectID = "hjc-hd-CQe"; */
+"hjc-hd-CQe.headerCell.title" = "Frequency";
+
+/* Class = "NSTableColumn"; headerCell.title = "Bitrate"; ObjectID = "sd4-Co-8hS"; */
+"sd4-Co-8hS.headerCell.title" = "Bitrate";
+
+/* Class = "NSTableColumn"; headerCell.title = "Enabled"; ObjectID = "txE-JZ-54H"; */
+"txE-JZ-54H.headerCell.title" = "Enabled";
diff --git a/ui/AccAudio.xib b/ui/Base.lproj/AccAudio.xib
similarity index 100%
rename from ui/AccAudio.xib
rename to ui/Base.lproj/AccAudio.xib
diff --git a/ui/Base.lproj/AccGeneral.strings b/ui/Base.lproj/AccGeneral.strings
new file mode 100644
index 0000000..c251f4a
--- /dev/null
+++ b/ui/Base.lproj/AccGeneral.strings
@@ -0,0 +1,39 @@
+
+/* Class = "NSButtonCell"; title = "Upnp enabled"; ObjectID = "66H-HH-dbA"; */
+"66H-HH-dbA.title" = "Upnp enabled";
+
+/* Class = "NSButtonCell"; title = "Use custom user-agent"; ObjectID = "G7B-Zc-Ssi"; */
+"G7B-Zc-Ssi.title" = "Use custom user-agent";
+
+/* Class = "NSButtonCell"; title = "Show password"; ObjectID = "Ue3-ai-FBV"; */
+"Ue3-ai-FBV.title" = "Show password";
+
+/* Class = "NSButtonCell"; title = "Auto-answer calls"; ObjectID = "bMM-fn-lDE"; */
+"bMM-fn-lDE.title" = "Auto-answer calls";
+
+/* Class = "NSTextFieldCell"; title = "Alias"; ObjectID = "c1H-HN-jVv"; */
+"c1H-HN-jVv.title" = "Alias";
+
+/* Class = "NSTextFieldCell"; title = "Account"; ObjectID = "iDL-4x-HD7"; */
+"iDL-4x-HD7.title" = "Account";
+
+/* Class = "NSTextFieldCell"; title = "Username:"; ObjectID = "iP9-Y8-f6g"; */
+"iP9-Y8-f6g.title" = "Username:";
+
+/* Class = "NSButtonCell"; title = "Try Registration"; ObjectID = "j6w-ZG-17T"; */
+"j6w-ZG-17T.title" = "Try Registration";
+
+/* Class = "NSTextFieldCell"; title = "Server hostname:"; ObjectID = "jfA-bh-FEA"; */
+"jfA-bh-FEA.title" = "Server hostname:";
+
+/* Class = "NSTextFieldCell"; title = "Type:"; ObjectID = "kBP-se-g6m"; */
+"kBP-se-g6m.title" = "Type:";
+
+/* Class = "NSTextFieldCell"; title = "TYPE"; ObjectID = "oqm-WC-cUn"; */
+"oqm-WC-cUn.title" = "TYPE";
+
+/* Class = "NSTextFieldCell"; title = "Password:"; ObjectID = "rbi-vX-SIf"; */
+"rbi-vX-SIf.title" = "Password:";
+
+/* Class = "NSTextFieldCell"; title = "Parameters"; ObjectID = "yHO-fn-nw5"; */
+"yHO-fn-nw5.title" = "Parameters";
diff --git a/ui/AccGeneral.xib b/ui/Base.lproj/AccGeneral.xib
similarity index 100%
rename from ui/AccGeneral.xib
rename to ui/Base.lproj/AccGeneral.xib
diff --git a/ui/Base.lproj/AccRing.strings b/ui/Base.lproj/AccRing.strings
new file mode 100644
index 0000000..3fb5b90
--- /dev/null
+++ b/ui/Base.lproj/AccRing.strings
@@ -0,0 +1,51 @@
+
+/* Class = "NSTextFieldCell"; title = "This will be displayed to unknow peers"; ObjectID = "0Yt-xC-OWa"; */
+"0Yt-xC-OWa.title" = "This will be displayed to unknow peers";
+
+/* Class = "NSTextFieldCell"; title = "Account"; ObjectID = "1Sx-Et-CDM"; */
+"1Sx-Et-CDM.title" = "Account";
+
+/* Class = "NSTextFieldCell"; title = "Bootstrap server"; ObjectID = "B6b-iB-REZ"; */
+"B6b-iB-REZ.title" = "Bootstrap server";
+
+/* Class = "NSTextFieldCell"; title = "TYPE"; ObjectID = "Bqr-Gq-OgA"; */
+"Bqr-Gq-OgA.title" = "TYPE";
+
+/* Class = "NSTextFieldCell"; title = "Permissions"; ObjectID = "EDd-FX-wcz"; */
+"EDd-FX-wcz.title" = "Permissions";
+
+/* Class = "NSTextFieldCell"; placeholderString = "Name or nickname..."; ObjectID = "HN3-i9-zmw"; */
+"HN3-i9-zmw.placeholderString" = "Name or nickname...";
+
+/* Class = "NSButtonCell"; title = "Auto-answer calls"; ObjectID = "OeY-na-0YT"; */
+"OeY-na-0YT.title" = "Auto-answer calls";
+
+/* Class = "NSButtonCell"; title = "Allow calls from peers in your call history"; ObjectID = "PaC-xE-SHA"; */
+"PaC-xE-SHA.title" = "Allow calls from peers in your call history";
+
+/* Class = "NSTextFieldCell"; title = "Alias"; ObjectID = "Wzq-V2-YLU"; */
+"Wzq-V2-YLU.title" = "Alias";
+
+/* Class = "NSTextFieldCell"; title = "This is the hash you need to communicate to pass calls with a RING account"; ObjectID = "bca-Wv-Xul"; */
+"bca-Wv-Xul.title" = "This is the hash you need to communicate to pass calls with a RING account";
+
+/* Class = "NSTextFieldCell"; title = "hash"; ObjectID = "cf0-xD-2WZ"; */
+"cf0-xD-2WZ.title" = "hash";
+
+/* Class = "NSTextFieldCell"; title = "Hash DHT"; ObjectID = "dPO-b1-o58"; */
+"dPO-b1-o58.title" = "Hash DHT";
+
+/* Class = "NSButtonCell"; title = "Use custom user-agent"; ObjectID = "ddk-1G-0jU"; */
+"ddk-1G-0jU.title" = "Use custom user-agent";
+
+/* Class = "NSButtonCell"; title = "Allow calls from peers in your contact list"; ObjectID = "fX7-9W-XFl"; */
+"fX7-9W-XFl.title" = "Allow calls from peers in your contact list";
+
+/* Class = "NSButtonCell"; title = "Allow calls from unknown peers"; ObjectID = "kmI-jb-aal"; */
+"kmI-jb-aal.title" = "Allow calls from unknown peers";
+
+/* Class = "NSButtonCell"; title = "Upnp enabled"; ObjectID = "lHI-bz-ddQ"; */
+"lHI-bz-ddQ.title" = "Upnp enabled";
+
+/* Class = "NSTextFieldCell"; title = "Type:"; ObjectID = "ubB-AZ-nAm"; */
+"ubB-AZ-nAm.title" = "Type:";
diff --git a/ui/AccRing.xib b/ui/Base.lproj/AccRing.xib
similarity index 99%
rename from ui/AccRing.xib
rename to ui/Base.lproj/AccRing.xib
index dba5cfc..266cc65 100644
--- a/ui/AccRing.xib
+++ b/ui/Base.lproj/AccRing.xib
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14F27" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
     <dependencies>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
     </dependencies>
diff --git a/ui/Base.lproj/AccSecurity.strings b/ui/Base.lproj/AccSecurity.strings
new file mode 100644
index 0000000..79cdda5
--- /dev/null
+++ b/ui/Base.lproj/AccSecurity.strings
@@ -0,0 +1,48 @@
+
+/* Class = "NSButtonCell"; title = "Require certificates for incoming TLS connections"; ObjectID = "1f9-X5-ykb"; */
+"1f9-X5-ykb.title" = "Require certificates for incoming TLS connections";
+
+/* Class = "NSButtonCell"; title = "Verify certificates, as a client"; ObjectID = "1xi-9G-zOX"; */
+"1xi-9G-zOX.title" = "Verify certificates, as a client";
+
+/* Class = "NSButtonCell"; title = "Use custom cipher list"; ObjectID = "2e5-zS-ghg"; */
+"2e5-zS-ghg.title" = "Use custom cipher list";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "5LC-T6-hpk"; */
+"5LC-T6-hpk.title" = "Text Cell";
+
+/* Class = "NSSecureTextFieldCell"; placeholderString = "Password..."; ObjectID = "7c2-kF-dcs"; */
+"7c2-kF-dcs.placeholderString" = "Password...";
+
+/* Class = "NSTextFieldCell"; title = "Negociation timeout"; ObjectID = "9Q3-1W-Lh3"; */
+"9Q3-1W-Lh3.title" = "Negociation timeout";
+
+/* Class = "NSButtonCell"; title = "Fallback on RTP"; ObjectID = "Ig9-B1-7N3"; */
+"Ig9-B1-7N3.title" = "Fallback on RTP";
+
+/* Class = "NSTextFieldCell"; title = "Private key"; ObjectID = "JHb-iu-ZwI"; */
+"JHb-iu-ZwI.title" = "Private key";
+
+/* Class = "NSTextFieldCell"; title = "User Certificate"; ObjectID = "Jqz-P0-zAz"; */
+"Jqz-P0-zAz.title" = "User Certificate";
+
+/* Class = "NSTextFieldCell"; title = "Server name instance for outgoing TLS connection"; ObjectID = "UxS-et-whJ"; */
+"UxS-et-whJ.title" = "Server name instance for outgoing TLS connection";
+
+/* Class = "NSButtonCell"; title = "Use SRTP"; ObjectID = "YtQ-hx-hih"; */
+"YtQ-hx-hih.title" = "Use SRTP";
+
+/* Class = "NSMenu"; title = "tlsmethodlist"; ObjectID = "hOG-SW-CBI"; */
+"hOG-SW-CBI.title" = "tlsmethodlist";
+
+/* Class = "NSButtonCell"; title = "Use TLS transport"; ObjectID = "oTT-gO-fqM"; */
+"oTT-gO-fqM.title" = "Use TLS transport";
+
+/* Class = "NSTextFieldCell"; title = "TLS protocol method"; ObjectID = "uOE-XA-5gW"; */
+"uOE-XA-5gW.title" = "TLS protocol method";
+
+/* Class = "NSTextFieldCell"; title = "Certificate Authority list"; ObjectID = "vPF-Rp-aR6"; */
+"vPF-Rp-aR6.title" = "Certificate Authority list";
+
+/* Class = "NSButtonCell"; title = "Verify incoming certificates, as a server"; ObjectID = "x2s-ov-cVQ"; */
+"x2s-ov-cVQ.title" = "Verify incoming certificates, as a server";
diff --git a/ui/AccSecurity.xib b/ui/Base.lproj/AccSecurity.xib
similarity index 99%
rename from ui/AccSecurity.xib
rename to ui/Base.lproj/AccSecurity.xib
index f9069fe..5c0e4c8 100644
--- a/ui/AccSecurity.xib
+++ b/ui/Base.lproj/AccSecurity.xib
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14F27" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
     <dependencies>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
     </dependencies>
diff --git a/ui/Base.lproj/AccVideo.strings b/ui/Base.lproj/AccVideo.strings
new file mode 100644
index 0000000..faba9a0
--- /dev/null
+++ b/ui/Base.lproj/AccVideo.strings
@@ -0,0 +1,33 @@
+
+/* Class = "NSTableColumn"; headerCell.title = "Codecs"; ObjectID = "DSk-Vi-l91"; */
+"DSk-Vi-l91.headerCell.title" = "Codecs";
+
+/* Class = "NSTextFieldCell"; title = "Codecs"; ObjectID = "DlW-RF-2xv"; */
+"DlW-RF-2xv.title" = "Codecs";
+
+/* Class = "NSTextFieldCell"; title = "Text"; ObjectID = "DmR-7J-s8s"; */
+"DmR-7J-s8s.title" = "Text";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "HcP-F1-RiZ"; */
+"HcP-F1-RiZ.title" = "Text Cell";
+
+/* Class = "NSTableColumn"; headerCell.title = "Frequency"; ObjectID = "WAr-DG-2aa"; */
+"WAr-DG-2aa.headerCell.title" = "Frequency";
+
+/* Class = "NSButtonCell"; title = "Down"; ObjectID = "YYh-3p-JG5"; */
+"YYh-3p-JG5.title" = "Down";
+
+/* Class = "NSButtonCell"; title = "Enable video"; ObjectID = "ZYO-6G-DC2"; */
+"ZYO-6G-DC2.title" = "Enable video";
+
+/* Class = "NSButtonCell"; title = "Up"; ObjectID = "ZYZ-Vd-MXi"; */
+"ZYZ-Vd-MXi.title" = "Up";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "dRe-pp-ok2"; */
+"dRe-pp-ok2.title" = "Text Cell";
+
+/* Class = "NSTableColumn"; headerCell.title = "Enabled"; ObjectID = "eGS-FS-4hO"; */
+"eGS-FS-4hO.headerCell.title" = "Enabled";
+
+/* Class = "NSTableColumn"; headerCell.title = "Bitrate"; ObjectID = "jvv-dK-jMu"; */
+"jvv-dK-jMu.headerCell.title" = "Bitrate";
diff --git a/ui/AccVideo.xib b/ui/Base.lproj/AccVideo.xib
similarity index 100%
rename from ui/AccVideo.xib
rename to ui/Base.lproj/AccVideo.xib
diff --git a/ui/Base.lproj/Accounts.strings b/ui/Base.lproj/Accounts.strings
new file mode 100644
index 0000000..04718df
--- /dev/null
+++ b/ui/Base.lproj/Accounts.strings
@@ -0,0 +1,42 @@
+
+/* Class = "NSTabViewItem"; label = "Ring"; ObjectID = "1HC-kF-Jun"; */
+"1HC-kF-Jun.label" = "Ring";
+
+/* Class = "NSButtonCell"; title = "Down"; ObjectID = "6Co-ei-tUA"; */
+"6Co-ei-tUA.title" = "Down";
+
+/* Class = "NSTableColumn"; headerCell.title = "Status"; ObjectID = "GB3-Dr-Fey"; */
+"GB3-Dr-Fey.headerCell.title" = "Status";
+
+/* Class = "NSTabViewItem"; label = "Video"; ObjectID = "GIU-kn-D57"; */
+"GIU-kn-D57.label" = "Video";
+
+/* Class = "NSButtonCell"; title = "Up"; ObjectID = "HoA-BH-xam"; */
+"HoA-BH-xam.title" = "Up";
+
+/* Class = "NSTextFieldCell"; title = "Create Account"; ObjectID = "OZ9-qH-dYW"; */
+"OZ9-qH-dYW.title" = "Create Account";
+
+/* Class = "NSTableColumn"; headerCell.title = "Accounts"; ObjectID = "Ppv-dQ-Azf"; */
+"Ppv-dQ-Azf.headerCell.title" = "Accounts";
+
+/* Class = "NSTabViewItem"; label = "Advanced"; ObjectID = "RT7-u6-bhe"; */
+"RT7-u6-bhe.label" = "Advanced";
+
+/* Class = "NSTabViewItem"; label = "Security"; ObjectID = "Vp5-yV-ScC"; */
+"Vp5-yV-ScC.label" = "Security";
+
+/* Class = "NSTableColumn"; headerCell.title = "Enabled"; ObjectID = "Ybc-ak-pA6"; */
+"Ybc-ak-pA6.headerCell.title" = "Enabled";
+
+/* Class = "NSTabViewItem"; label = "Audio"; ObjectID = "hiU-GG-6Eg"; */
+"hiU-GG-6Eg.label" = "Audio";
+
+/* Class = "NSTextFieldCell"; title = "State"; ObjectID = "ntA-Li-XNQ"; */
+"ntA-Li-XNQ.title" = "State";
+
+/* Class = "NSTextFieldCell"; title = "Text"; ObjectID = "qIw-uf-vBM"; */
+"qIw-uf-vBM.title" = "Text";
+
+/* Class = "NSTabViewItem"; label = "General"; ObjectID = "tPR-Ac-N5Y"; */
+"tPR-Ac-N5Y.label" = "General";
diff --git a/ui/Accounts.xib b/ui/Base.lproj/Accounts.xib
similarity index 100%
rename from ui/Accounts.xib
rename to ui/Base.lproj/Accounts.xib
diff --git a/ui/Base.lproj/AudioPrefs.strings b/ui/Base.lproj/AudioPrefs.strings
new file mode 100644
index 0000000..d260183
--- /dev/null
+++ b/ui/Base.lproj/AudioPrefs.strings
@@ -0,0 +1,30 @@
+
+/* Class = "NSTextFieldCell"; title = "Output:"; ObjectID = "2gZ-Ab-XHf"; */
+"2gZ-Ab-XHf.title" = "Output:";
+
+/* Class = "NSTextFieldCell"; title = "Recordings"; ObjectID = "9HH-Pa-4Aq"; */
+"9HH-Pa-4Aq.title" = "Recordings";
+
+/* Class = "NSTextFieldCell"; title = "Audio devices"; ObjectID = "B0r-wh-wc3"; */
+"B0r-wh-wc3.title" = "Audio devices";
+
+/* Class = "NSTextFieldCell"; title = "Tone settings:"; ObjectID = "NvN-ip-svk"; */
+"NvN-ip-svk.title" = "Tone settings:";
+
+/* Class = "NSMenu"; title = "outputlist"; ObjectID = "eao-Bf-buc"; */
+"eao-Bf-buc.title" = "outputlist";
+
+/* Class = "NSButtonCell"; title = "Always recording"; ObjectID = "jeD-Nk-KHA"; */
+"jeD-Nk-KHA.title" = "Always recording";
+
+/* Class = "NSTextFieldCell"; title = "Save in"; ObjectID = "ksV-r2-EVJ"; */
+"ksV-r2-EVJ.title" = "Save in";
+
+/* Class = "NSButtonCell"; title = "Mute DTMF"; ObjectID = "pAA-Iv-EmI"; */
+"pAA-Iv-EmI.title" = "Mute DTMF";
+
+/* Class = "NSMenu"; title = "inputlist"; ObjectID = "szZ-RR-Ewo"; */
+"szZ-RR-Ewo.title" = "inputlist";
+
+/* Class = "NSTextFieldCell"; title = "Input:"; ObjectID = "x1o-rT-jy6"; */
+"x1o-rT-jy6.title" = "Input:";
diff --git a/ui/AudioPrefs.xib b/ui/Base.lproj/AudioPrefs.xib
similarity index 100%
rename from ui/AudioPrefs.xib
rename to ui/Base.lproj/AudioPrefs.xib
diff --git a/ui/Base.lproj/CertificateWindow.strings b/ui/Base.lproj/CertificateWindow.strings
new file mode 100644
index 0000000..2f0b2b0
--- /dev/null
+++ b/ui/Base.lproj/CertificateWindow.strings
@@ -0,0 +1,21 @@
+
+/* Class = "NSTextFieldCell"; title = "Certificate information"; ObjectID = "BrE-Hz-sVE"; */
+"BrE-Hz-sVE.title" = "Certificate information";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "G7a-wY-fOS"; */
+"G7a-wY-fOS.title" = "Text Cell";
+
+/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "Od1-pH-TGO"; */
+"Od1-pH-TGO.title" = "Table View Cell";
+
+/* Class = "NSWindow"; title = "Window"; ObjectID = "QvC-M9-y7g"; */
+"QvC-M9-y7g.title" = "Window";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "RMj-fd-OsX"; */
+"RMj-fd-OsX.title" = "Text Cell";
+
+/* Class = "NSTextFieldCell"; title = "Table View Cell"; ObjectID = "khh-uZ-Keh"; */
+"khh-uZ-Keh.title" = "Table View Cell";
+
+/* Class = "NSButtonCell"; title = "OK"; ObjectID = "x6p-u4-4Ot"; */
+"x6p-u4-4Ot.title" = "OK";
diff --git a/ui/CertificateWindow.xib b/ui/Base.lproj/CertificateWindow.xib
similarity index 100%
rename from ui/CertificateWindow.xib
rename to ui/Base.lproj/CertificateWindow.xib
diff --git a/ui/Base.lproj/CurrentCall.strings b/ui/Base.lproj/CurrentCall.strings
new file mode 100644
index 0000000..a7e8651
--- /dev/null
+++ b/ui/Base.lproj/CurrentCall.strings
@@ -0,0 +1,30 @@
+
+/* Class = "NSTextFieldCell"; title = "URI"; ObjectID = "Dqv-um-UUk"; */
+"Dqv-um-UUk.title" = "URI";
+
+/* Class = "NSButtonCell"; title = "Answer"; ObjectID = "KPG-pB-gPm"; */
+"KPG-pB-gPm.title" = "Answer";
+
+/* Class = "NSTextFieldCell"; title = "+"; ObjectID = "b3D-0u-zMG"; */
+"b3D-0u-zMG.title" = "+";
+
+/* Class = "NSTextFieldCell"; title = "-"; ObjectID = "gB4-S1-mny"; */
+"gB4-S1-mny.title" = "-";
+
+/* Class = "NSButtonCell"; title = "Button"; ObjectID = "kxH-yM-TLd"; */
+"kxH-yM-TLd.title" = "Button";
+
+/* Class = "NSTextFieldCell"; title = "Person name"; ObjectID = "osk-LS-0Qg"; */
+"osk-LS-0Qg.title" = "Person name";
+
+/* Class = "NSButtonCell"; title = "Record"; ObjectID = "rhz-4Z-avV"; */
+"rhz-4Z-avV.title" = "Record";
+
+/* Class = "NSTextFieldCell"; title = "State"; ObjectID = "ugy-uK-901"; */
+"ugy-uK-901.title" = "State";
+
+/* Class = "NSTextFieldCell"; title = "wants to talk with you!"; ObjectID = "yZ6-1A-ZLT"; */
+"yZ6-1A-ZLT.title" = "wants to talk with you!";
+
+/* Class = "NSTextFieldCell"; title = "Time"; ObjectID = "zsO-T7-9yi"; */
+"zsO-T7-9yi.title" = "Time";
diff --git a/ui/CurrentCall.xib b/ui/Base.lproj/CurrentCall.xib
similarity index 92%
rename from ui/CurrentCall.xib
rename to ui/Base.lproj/CurrentCall.xib
index ff13abc..0f54aee 100644
--- a/ui/CurrentCall.xib
+++ b/ui/Base.lproj/CurrentCall.xib
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14F27" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
     <dependencies>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
     </dependencies>
@@ -436,7 +436,7 @@
                     </connections>
                 </slider>
             </subviews>
-            <point key="canvasLocation" x="637" y="-70.5"/>
+            <point key="canvasLocation" x="772" y="-259.5"/>
         </customView>
         <viewController id="7rr-Wk-Nn8" customClass="BitrateVC">
             <connections>
@@ -449,9 +449,51 @@
                 <outlet property="contentViewController" destination="7rr-Wk-Nn8" id="43w-Ab-FTh"/>
             </connections>
         </popover>
+        <customView id="vW1-8R-ebu">
+            <rect key="frame" x="-1" y="0.0" width="719" height="497"/>
+            <autoresizingMask key="autoresizingMask" flexibleMaxX="YES" flexibleMinY="YES"/>
+            <subviews>
+                <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="Pze-W9-iSO">
+                    <rect key="frame" x="232" y="123" width="86" height="32"/>
+                    <buttonCell key="cell" type="push" title="Answer" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="KPG-pB-gPm">
+                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="system"/>
+                    </buttonCell>
+                </button>
+                <imageView horizontalHuggingPriority="251" verticalHuggingPriority="251" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="hiA-1v-jOb">
+                    <rect key="frame" x="290" y="268" width="105" height="89"/>
+                    <imageCell key="cell" refusesFirstResponder="YES" alignment="left" imageScaling="proportionallyDown" image="NSUser" id="A33-8N-kr9"/>
+                </imageView>
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="lT0-mL-HHV">
+                    <rect key="frame" x="323" y="240" width="27" height="17"/>
+                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="URI" id="Dqv-um-UUk">
+                        <font key="font" metaFont="system"/>
+                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <textField horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ZYE-KE-soE">
+                    <rect key="frame" x="276" y="189" width="143" height="17"/>
+                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="wants to talk with you!" id="yZ6-1A-ZLT">
+                        <font key="font" metaFont="system"/>
+                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+                <button verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="dKf-ye-SIo">
+                    <rect key="frame" x="394" y="123" width="82" height="32"/>
+                    <buttonCell key="cell" type="push" title="Button" bezelStyle="rounded" alignment="center" borderStyle="border" imageScaling="proportionallyDown" inset="2" id="kxH-yM-TLd">
+                        <behavior key="behavior" pushIn="YES" lightByBackground="YES" lightByGray="YES"/>
+                        <font key="font" metaFont="system"/>
+                    </buttonCell>
+                </button>
+            </subviews>
+            <point key="canvasLocation" x="469.5" y="143.5"/>
+        </customView>
     </objects>
     <resources>
         <image name="NSGoRightTemplate" width="9" height="12"/>
+        <image name="NSUser" width="32" height="32"/>
         <image name="ic_action_call" width="72" height="72"/>
         <image name="ic_action_chat" width="72" height="72"/>
         <image name="ic_action_hangup" width="72" height="72"/>
diff --git a/ui/Base.lproj/GeneralPrefs.strings b/ui/Base.lproj/GeneralPrefs.strings
new file mode 100644
index 0000000..3e1e495
--- /dev/null
+++ b/ui/Base.lproj/GeneralPrefs.strings
@@ -0,0 +1,54 @@
+
+/* Class = "NSButtonCell"; title = "Keep my history for at least"; ObjectID = "3Pb-Ec-zl5"; */
+"3Pb-Ec-zl5.title" = "Keep my history for at least";
+
+/* Class = "NSMenuItem"; title = "Monthly"; ObjectID = "42E-UY-qlP"; */
+"42E-UY-qlP.title" = "Monthly";
+
+/* Class = "NSMenuItem"; title = "Weekly"; ObjectID = "AId-am-73Q"; */
+"AId-am-73Q.title" = "Weekly";
+
+/* Class = "NSTextFieldCell"; title = "History"; ObjectID = "DSD-yl-noX"; */
+"DSD-yl-noX.title" = "History";
+
+/* Class = "NSTextFieldCell"; title = "30"; ObjectID = "JvS-c4-OeT"; */
+"JvS-c4-OeT.title" = "30";
+
+/* Class = "NSButtonCell"; title = "Launch on Startup"; ObjectID = "O2C-xR-mHF"; */
+"O2C-xR-mHF.title" = "Launch on Startup";
+
+/* Class = "NSTextFieldCell"; title = "(Applied on application restart)"; ObjectID = "OTl-vx-S43"; */
+"OTl-vx-S43.title" = "(Applied on application restart)";
+
+/* Class = "NSTextFieldCell"; title = "Interruptions"; ObjectID = "Rzy-Gh-3wQ"; */
+"Rzy-Gh-3wQ.title" = "Interruptions";
+
+/* Class = "NSButtonCell"; title = "Automatically check for updates"; ObjectID = "T3a-yx-ZaW"; */
+"T3a-yx-ZaW.title" = "Automatically check for updates";
+
+/* Class = "NSMenuItem"; title = "Daily"; ObjectID = "cB6-4m-9MU"; */
+"cB6-4m-9MU.title" = "Daily";
+
+/* Class = "NSButtonCell"; title = "Clear History"; ObjectID = "cd5-9L-Bbb"; */
+"cd5-9L-Bbb.title" = "Clear History";
+
+/* Class = "NSTextFieldCell"; title = "days"; ObjectID = "e5K-l0-Nfw"; */
+"e5K-l0-Nfw.title" = "days";
+
+/* Class = "NSMenuItem"; title = "Hourly"; ObjectID = "mbu-TH-bs8"; */
+"mbu-TH-bs8.title" = "Hourly";
+
+/* Class = "NSTextFieldCell"; title = "Update"; ObjectID = "r4u-t3-gBc"; */
+"r4u-t3-gBc.title" = "Update";
+
+/* Class = "NSTextFieldCell"; title = "Window behaviour:"; ObjectID = "sog-Ok-Y0N"; */
+"sog-Ok-Y0N.title" = "Window behaviour:";
+
+/* Class = "NSButtonCell"; title = "Enable Notifications"; ObjectID = "uCL-ye-tsv"; */
+"uCL-ye-tsv.title" = "Enable Notifications";
+
+/* Class = "NSButtonCell"; title = "Bring Ring to foreground on incoming calls"; ObjectID = "uYI-hA-JHk"; */
+"uYI-hA-JHk.title" = "Bring Ring to foreground on incoming calls";
+
+/* Class = "NSTextFieldCell"; title = "Desktop Notifications:"; ObjectID = "xlz-zw-IJI"; */
+"xlz-zw-IJI.title" = "Desktop Notifications:";
diff --git a/ui/GeneralPrefs.xib b/ui/Base.lproj/GeneralPrefs.xib
similarity index 100%
rename from ui/GeneralPrefs.xib
rename to ui/Base.lproj/GeneralPrefs.xib
diff --git a/ui/Base.lproj/Localizable.strings b/ui/Base.lproj/Localizable.strings
new file mode 100644
index 0000000..dad6904
--- /dev/null
+++ b/ui/Base.lproj/Localizable.strings
@@ -0,0 +1,39 @@
+
+"Add to contacts" = "Add to contacts";
+
+/* Open panel prompt for 'Choose a file' */
+"Choose" = "Choose";
+
+/* Open panel title */
+"Choose a CA list" = "Choose a CA list";
+
+/* Open panel title */
+"Choose a certificate" = "Choose a certificate";
+
+/* Open panel title */
+"Choose a file" = "Choose a file";
+
+/* Open panel title */
+"Choose a private key file" = "Choose a private key file";
+
+/* Open panel prompt for 'Choose a file' */
+"Choose CA" = "Choose CA";
+
+/* Open panel prompt for 'Choose a directory' */
+"Choose file" = "Choose file";
+
+/* No comment provided by engineer. */
+"Just a moment..." = "Just a moment...";
+
+/* No comment provided by engineer. */
+"Reopen account to see your hash" = "Reopen account to see your hash";
+
+/* No comment provided by engineer. */
+"Ring is already ready to work" = "Ring is already ready to work";
+
+/* No comment provided by engineer. */
+"Share by mail" = "Share by mail";
+
+/* No comment provided by engineer. */
+"This is your number, share it with your friends!" = "This is your number, share it with your friends!";
+
diff --git a/ui/Base.lproj/MainMenu.strings b/ui/Base.lproj/MainMenu.strings
new file mode 100644
index 0000000..85f2bf9
--- /dev/null
+++ b/ui/Base.lproj/MainMenu.strings
@@ -0,0 +1,201 @@
+
+/* Class = "NSMenuItem"; title = "Bring All to Front"; ObjectID = "5"; */
+"5.title" = "Bring All to Front";
+
+/* Class = "NSMenuItem"; title = "Window"; ObjectID = "19"; */
+"19.title" = "Window";
+
+/* Class = "NSMenuItem"; title = "Minimize"; ObjectID = "23"; */
+"23.title" = "Minimize";
+
+/* Class = "NSMenu"; title = "Window"; ObjectID = "24"; */
+"24.title" = "Window";
+
+/* Class = "NSMenu"; title = "AMainMenu"; ObjectID = "29"; */
+"29.title" = "AMainMenu";
+
+/* Class = "NSMenuItem"; title = "Ring"; ObjectID = "56"; */
+"56.title" = "Ring";
+
+/* Class = "NSMenu"; title = "Ring"; ObjectID = "57"; */
+"57.title" = "Ring";
+
+/* Class = "NSMenuItem"; title = "About Ring"; ObjectID = "58"; */
+"58.title" = "About Ring";
+
+/* Class = "NSMenuItem"; title = "Preferences…"; ObjectID = "129"; */
+"129.title" = "Preferences…";
+
+/* Class = "NSMenu"; title = "Services"; ObjectID = "130"; */
+"130.title" = "Services";
+
+/* Class = "NSMenuItem"; title = "Services"; ObjectID = "131"; */
+"131.title" = "Services";
+
+/* Class = "NSMenuItem"; title = "Hide Ring"; ObjectID = "134"; */
+"134.title" = "Hide Ring";
+
+/* Class = "NSMenuItem"; title = "Quit Ring"; ObjectID = "136"; */
+"136.title" = "Quit Ring";
+
+/* Class = "NSMenuItem"; title = "Hide Others"; ObjectID = "145"; */
+"145.title" = "Hide Others";
+
+/* Class = "NSMenuItem"; title = "Show All"; ObjectID = "150"; */
+"150.title" = "Show All";
+
+/* Class = "NSMenuItem"; title = "Stop Speaking"; ObjectID = "195"; */
+"195.title" = "Stop Speaking";
+
+/* Class = "NSMenuItem"; title = "Start Speaking"; ObjectID = "196"; */
+"196.title" = "Start Speaking";
+
+/* Class = "NSMenuItem"; title = "Copy"; ObjectID = "197"; */
+"197.title" = "Copy";
+
+/* Class = "NSMenuItem"; title = "Select All"; ObjectID = "198"; */
+"198.title" = "Select All";
+
+/* Class = "NSMenuItem"; title = "Cut"; ObjectID = "199"; */
+"199.title" = "Cut";
+
+/* Class = "NSMenu"; title = "Spelling and Grammar"; ObjectID = "200"; */
+"200.title" = "Spelling and Grammar";
+
+/* Class = "NSMenuItem"; title = "Check Document Now"; ObjectID = "201"; */
+"201.title" = "Check Document Now";
+
+/* Class = "NSMenuItem"; title = "Delete"; ObjectID = "202"; */
+"202.title" = "Delete";
+
+/* Class = "NSMenuItem"; title = "Paste"; ObjectID = "203"; */
+"203.title" = "Paste";
+
+/* Class = "NSMenuItem"; title = "Show Spelling and Grammar"; ObjectID = "204"; */
+"204.title" = "Show Spelling and Grammar";
+
+/* Class = "NSMenu"; title = "Edit"; ObjectID = "205"; */
+"205.title" = "Edit";
+
+/* Class = "NSMenuItem"; title = "Undo"; ObjectID = "207"; */
+"207.title" = "Undo";
+
+/* Class = "NSMenuItem"; title = "Find Next"; ObjectID = "208"; */
+"208.title" = "Find Next";
+
+/* Class = "NSMenuItem"; title = "Find…"; ObjectID = "209"; */
+"209.title" = "Find…";
+
+/* Class = "NSMenuItem"; title = "Jump to Selection"; ObjectID = "210"; */
+"210.title" = "Jump to Selection";
+
+/* Class = "NSMenuItem"; title = "Speech"; ObjectID = "211"; */
+"211.title" = "Speech";
+
+/* Class = "NSMenu"; title = "Speech"; ObjectID = "212"; */
+"212.title" = "Speech";
+
+/* Class = "NSMenuItem"; title = "Find Previous"; ObjectID = "213"; */
+"213.title" = "Find Previous";
+
+/* Class = "NSMenuItem"; title = "Redo"; ObjectID = "215"; */
+"215.title" = "Redo";
+
+/* Class = "NSMenuItem"; title = "Spelling and Grammar"; ObjectID = "216"; */
+"216.title" = "Spelling and Grammar";
+
+/* Class = "NSMenuItem"; title = "Edit"; ObjectID = "217"; */
+"217.title" = "Edit";
+
+/* Class = "NSMenuItem"; title = "Find"; ObjectID = "218"; */
+"218.title" = "Find";
+
+/* Class = "NSMenuItem"; title = "Check Spelling While Typing"; ObjectID = "219"; */
+"219.title" = "Check Spelling While Typing";
+
+/* Class = "NSMenu"; title = "Find"; ObjectID = "220"; */
+"220.title" = "Find";
+
+/* Class = "NSMenuItem"; title = "Use Selection for Find"; ObjectID = "221"; */
+"221.title" = "Use Selection for Find";
+
+/* Class = "NSMenuItem"; title = "Zoom"; ObjectID = "239"; */
+"239.title" = "Zoom";
+
+/* Class = "NSMenuItem"; title = "View"; ObjectID = "295"; */
+"295.title" = "View";
+
+/* Class = "NSMenu"; title = "View"; ObjectID = "296"; */
+"296.title" = "View";
+
+/* Class = "NSMenuItem"; title = "Show Toolbar"; ObjectID = "297"; */
+"297.title" = "Show Toolbar";
+
+/* Class = "NSMenuItem"; title = "Customize Toolbar…"; ObjectID = "298"; */
+"298.title" = "Customize Toolbar…";
+
+/* Class = "NSMenuItem"; title = "Check Grammar With Spelling"; ObjectID = "346"; */
+"346.title" = "Check Grammar With Spelling";
+
+/* Class = "NSMenuItem"; title = "Substitutions"; ObjectID = "348"; */
+"348.title" = "Substitutions";
+
+/* Class = "NSMenu"; title = "Substitutions"; ObjectID = "349"; */
+"349.title" = "Substitutions";
+
+/* Class = "NSMenuItem"; title = "Smart Copy/Paste"; ObjectID = "350"; */
+"350.title" = "Smart Copy/Paste";
+
+/* Class = "NSMenuItem"; title = "Smart Quotes"; ObjectID = "351"; */
+"351.title" = "Smart Quotes";
+
+/* Class = "NSMenuItem"; title = "Smart Links"; ObjectID = "354"; */
+"354.title" = "Smart Links";
+
+/* Class = "NSMenuItem"; title = "Transformations"; ObjectID = "450"; */
+"450.title" = "Transformations";
+
+/* Class = "NSMenu"; title = "Transformations"; ObjectID = "451"; */
+"451.title" = "Transformations";
+
+/* Class = "NSMenuItem"; title = "Make Upper Case"; ObjectID = "452"; */
+"452.title" = "Make Upper Case";
+
+/* Class = "NSMenuItem"; title = "Correct Spelling Automatically"; ObjectID = "454"; */
+"454.title" = "Correct Spelling Automatically";
+
+/* Class = "NSMenuItem"; title = "Show Substitutions"; ObjectID = "457"; */
+"457.title" = "Show Substitutions";
+
+/* Class = "NSMenuItem"; title = "Smart Dashes"; ObjectID = "460"; */
+"460.title" = "Smart Dashes";
+
+/* Class = "NSMenuItem"; title = "Text Replacement"; ObjectID = "462"; */
+"462.title" = "Text Replacement";
+
+/* Class = "NSMenuItem"; title = "Make Lower Case"; ObjectID = "465"; */
+"465.title" = "Make Lower Case";
+
+/* Class = "NSMenuItem"; title = "Capitalize"; ObjectID = "466"; */
+"466.title" = "Capitalize";
+
+/* Class = "NSMenuItem"; title = "Paste and Match Style"; ObjectID = "485"; */
+"485.title" = "Paste and Match Style";
+
+/* Class = "NSMenuItem"; title = "Help"; ObjectID = "490"; */
+"490.title" = "Help";
+
+/* Class = "NSMenu"; title = "Help"; ObjectID = "491"; */
+"491.title" = "Help";
+
+/* Class = "NSMenuItem"; title = "Ring Help"; ObjectID = "492"; */
+"492.title" = "Ring Help";
+
+/* Class = "NSMenuItem"; title = "Find and Replace…"; ObjectID = "534"; */
+"534.title" = "Find and Replace…";
+
+/* Class = "NSMenuItem"; title = "Setup Ring"; ObjectID = "589"; */
+"589.title" = "Setup Ring";
+
+/* Class = "NSMenuItem"; title = "Check for Update..."; ObjectID = "593"; */
+"593.title" = "Check for Update...";
diff --git a/ui/MainMenu.xib b/ui/Base.lproj/MainMenu.xib
similarity index 100%
rename from ui/MainMenu.xib
rename to ui/Base.lproj/MainMenu.xib
diff --git a/ui/Base.lproj/PersonLinker.strings b/ui/Base.lproj/PersonLinker.strings
new file mode 100644
index 0000000..5e37214
--- /dev/null
+++ b/ui/Base.lproj/PersonLinker.strings
@@ -0,0 +1,21 @@
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "2uY-eS-Evg"; */
+"2uY-eS-Evg.title" = "Text Cell";
+
+/* Class = "NSTextFieldCell"; title = "Contact Method"; ObjectID = "a9R-r5-K3w"; */
+"a9R-r5-K3w.title" = "Contact Method";
+
+/* Class = "NSTextFieldCell"; placeholderString = "Last name..."; ObjectID = "cGT-nu-sPa"; */
+"cGT-nu-sPa.placeholderString" = "Last name...";
+
+/* Class = "NSButtonCell"; title = "Add new contact"; ObjectID = "had-9Y-eza"; */
+"had-9Y-eza.title" = "Add new contact";
+
+/* Class = "NSButtonCell"; title = "Create"; ObjectID = "qZc-Z2-TpP"; */
+"qZc-Z2-TpP.title" = "Create";
+
+/* Class = "NSTextFieldCell"; title = "New Contact"; ObjectID = "v7b-de-MVd"; */
+"v7b-de-MVd.title" = "New Contact";
+
+/* Class = "NSTextFieldCell"; placeholderString = "First name..."; ObjectID = "vyb-95-XaF"; */
+"vyb-95-XaF.placeholderString" = "First name...";
diff --git a/ui/PersonLinker.xib b/ui/Base.lproj/PersonLinker.xib
similarity index 99%
rename from ui/PersonLinker.xib
rename to ui/Base.lproj/PersonLinker.xib
index 6ee92aa..aabd7a6 100644
--- a/ui/PersonLinker.xib
+++ b/ui/Base.lproj/PersonLinker.xib
@@ -1,5 +1,5 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14E46" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14F27" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES">
     <dependencies>
         <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
     </dependencies>
@@ -41,7 +41,7 @@
                                 <autoresizingMask key="autoresizingMask" widthSizable="YES" heightSizable="YES"/>
                                 <subviews>
                                     <outlineView verticalHuggingPriority="750" allowsExpansionToolTips="YES" columnAutoresizingStyle="lastColumnOnly" multipleSelection="NO" autosaveColumns="NO" rowHeight="40" indentationPerLevel="16" autoresizesOutlineColumn="YES" outlineTableColumn="eFy-j5-uaG" id="eKe-7i-c79">
-                                        <rect key="frame" x="0.0" y="0.0" width="238" height="42"/>
+                                        <rect key="frame" x="0.0" y="0.0" width="306" height="42"/>
                                         <autoresizingMask key="autoresizingMask"/>
                                         <size key="intercellSpacing" width="3" height="2"/>
                                         <color key="backgroundColor" name="controlBackgroundColor" catalog="System" colorSpace="catalog"/>
diff --git a/ui/Base.lproj/PreferencesScreen.strings b/ui/Base.lproj/PreferencesScreen.strings
new file mode 100644
index 0000000..faff796
--- /dev/null
+++ b/ui/Base.lproj/PreferencesScreen.strings
@@ -0,0 +1,3 @@
+
+/* Class = "NSTextFieldCell"; title = "placeholder"; ObjectID = "quz-UQ-8oJ"; */
+"quz-UQ-8oJ.title" = "placeholder";
diff --git a/ui/PreferencesScreen.xib b/ui/Base.lproj/PreferencesScreen.xib
similarity index 60%
rename from ui/PreferencesScreen.xib
rename to ui/Base.lproj/PreferencesScreen.xib
index 8bd4000..28b3f46 100644
--- a/ui/PreferencesScreen.xib
+++ b/ui/Base.lproj/PreferencesScreen.xib
@@ -1,8 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6254" systemVersion="13F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
+<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="7706" systemVersion="14F27" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
     <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6254"/>
+        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="7706"/>
     </dependencies>
     <objects>
         <customObject id="-2" userLabel="File's Owner" customClass="PreferencesViewController">
@@ -14,6 +13,16 @@
         <customObject id="-3" userLabel="Application" customClass="NSObject"/>
         <customView wantsLayer="YES" focusRingType="none" translatesAutoresizingMaskIntoConstraints="NO" id="tP7-RI-Nc4">
             <rect key="frame" x="0.0" y="0.0" width="700" height="500"/>
+            <subviews>
+                <textField hidden="YES" horizontalHuggingPriority="251" verticalHuggingPriority="750" fixedFrame="YES" translatesAutoresizingMaskIntoConstraints="NO" id="ffh-yn-qu9">
+                    <rect key="frame" x="312" y="242" width="77" height="17"/>
+                    <textFieldCell key="cell" scrollable="YES" lineBreakMode="clipping" sendsActionOnEndEditing="YES" title="placeholder" id="quz-UQ-8oJ">
+                        <font key="font" metaFont="system"/>
+                        <color key="textColor" name="labelColor" catalog="System" colorSpace="catalog"/>
+                        <color key="backgroundColor" name="controlColor" catalog="System" colorSpace="catalog"/>
+                    </textFieldCell>
+                </textField>
+            </subviews>
             <constraints>
                 <constraint firstAttribute="height" relation="greaterThanOrEqual" constant="500" id="GrH-eh-xjo"/>
                 <constraint firstAttribute="width" relation="greaterThanOrEqual" constant="700" id="hH2-R5-frs"/>
diff --git a/ui/Base.lproj/RingWindow.strings b/ui/Base.lproj/RingWindow.strings
new file mode 100644
index 0000000..387fd6a
--- /dev/null
+++ b/ui/Base.lproj/RingWindow.strings
@@ -0,0 +1,33 @@
+
+/* Class = "NSTextFieldCell"; title = "Text"; ObjectID = "3Bh-xR-4Vn"; */
+"3Bh-xR-4Vn.title" = "Text";
+
+/* Class = "NSWindow"; title = "Ring"; ObjectID = "F0z-JX-Cv5"; */
+"F0z-JX-Cv5.title" = "Ring";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "GAa-pQ-t4g"; */
+"GAa-pQ-t4g.title" = "Text Cell";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "TeI-6b-R8a"; */
+"TeI-6b-R8a.title" = "Text Cell";
+
+/* Class = "NSTableColumn"; headerCell.title = "Conversations"; ObjectID = "VDO-Cu-h8f"; */
+"VDO-Cu-h8f.headerCell.title" = "Conversations";
+
+/* Class = "NSTabViewItem"; label = "History"; ObjectID = "Wi9-Zd-O1N"; */
+"Wi9-Zd-O1N.label" = "History";
+
+/* Class = "NSTextFieldCell"; title = "This is your RingID. Copy and share it with your friends!"; ObjectID = "Xb9-UT-M2F"; */
+"Xb9-UT-M2F.title" = "This is your RingID. Copy and share it with your friends!";
+
+/* Class = "NSTabViewItem"; label = "Contacts"; ObjectID = "Zbi-X6-DLT"; */
+"Zbi-X6-DLT.label" = "Contacts";
+
+/* Class = "NSTextFieldCell"; title = "Ring is a secure and distributed voice, video and chat communication platform that requires no centralized server and leaves the power of privacy in the hands of the user."; ObjectID = "eln-Vm-t0d"; */
+"eln-Vm-t0d.title" = "Ring is a secure and distributed voice, video and chat communication platform that requires no centralized server and leaves the power of privacy in the hands of the user.";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "fca-40-NK1"; */
+"fca-40-NK1.title" = "Text Cell";
+
+/* Class = "NSTextFieldCell"; title = "Text Cell"; ObjectID = "hsi-nD-XUY"; */
+"hsi-nD-XUY.title" = "Text Cell";
diff --git a/ui/RingWindow.xib b/ui/Base.lproj/RingWindow.xib
similarity index 100%
rename from ui/RingWindow.xib
rename to ui/Base.lproj/RingWindow.xib
diff --git a/ui/Base.lproj/RingWizard.strings b/ui/Base.lproj/RingWizard.strings
new file mode 100644
index 0000000..f938125
--- /dev/null
+++ b/ui/Base.lproj/RingWizard.strings
@@ -0,0 +1,36 @@
+
+/* Class = "NSWindow"; title = "Ring"; ObjectID = "4LP-GX-BkH"; */
+"4LP-GX-BkH.title" = "Ring";
+
+/* Class = "NSTextFieldCell"; title = "Choose your own certificates"; ObjectID = "4ls-Yq-mDp"; */
+"4ls-Yq-mDp.title" = "Choose your own certificates";
+
+/* Class = "NSTextFieldCell"; title = "Advanced security (optionnal)"; ObjectID = "Gnn-K9-PTH"; */
+"Gnn-K9-PTH.title" = "Advanced security (optionnal)";
+
+/* Class = "NSSecureTextFieldCell"; placeholderString = "Password..."; ObjectID = "Hsc-U9-2RV"; */
+"Hsc-U9-2RV.placeholderString" = "Password...";
+
+/* Class = "NSButtonCell"; title = "Continue"; ObjectID = "Kwr-LJ-K8C"; */
+"Kwr-LJ-K8C.title" = "Continue";
+
+/* Class = "NSTextFieldCell"; title = "Certificate Authority list"; ObjectID = "SpA-zX-ytE"; */
+"SpA-zX-ytE.title" = "Certificate Authority list";
+
+/* Class = "NSTextFieldCell"; title = "User Certificate"; ObjectID = "V1U-ew-Ge2"; */
+"V1U-ew-Ge2.title" = "User Certificate";
+
+/* Class = "NSButton"; ibShadowedToolTip = "Choose custom certificates"; ObjectID = "aZl-bU-psB"; */
+"aZl-bU-psB.ibShadowedToolTip" = "Choose custom certificates";
+
+/* Class = "NSTextFieldCell"; title = "First tell us who you are"; ObjectID = "meL-TZ-VQO"; */
+"meL-TZ-VQO.title" = "First tell us who you are";
+
+/* Class = "NSTextFieldCell"; title = "Private key"; ObjectID = "poP-JD-MDa"; */
+"poP-JD-MDa.title" = "Private key";
+
+/* Class = "NSTextFieldCell"; title = "Welcome to Ring"; ObjectID = "uqu-uh-Wao"; */
+"uqu-uh-Wao.title" = "Welcome to Ring";
+
+/* Class = "NSButtonCell"; title = "OK"; ObjectID = "wDw-Ut-RUm"; */
+"wDw-Ut-RUm.title" = "OK";
diff --git a/ui/RingWizard.xib b/ui/Base.lproj/RingWizard.xib
similarity index 100%
rename from ui/RingWizard.xib
rename to ui/Base.lproj/RingWizard.xib
diff --git a/ui/Base.lproj/VideoPrefs.strings b/ui/Base.lproj/VideoPrefs.strings
new file mode 100644
index 0000000..b0874a7
--- /dev/null
+++ b/ui/Base.lproj/VideoPrefs.strings
@@ -0,0 +1,24 @@
+
+/* Class = "NSTextFieldCell"; title = "Device:"; ObjectID = "170-NP-CSP"; */
+"170-NP-CSP.title" = "Device:";
+
+/* Class = "NSTextFieldCell"; title = "Size:"; ObjectID = "4bq-ls-mCp"; */
+"4bq-ls-mCp.title" = "Size:";
+
+/* Class = "NSTextFieldCell"; title = "Rate:"; ObjectID = "5Im-df-jdd"; */
+"5Im-df-jdd.title" = "Rate:";
+
+/* Class = "NSTextFieldCell"; title = "Selection"; ObjectID = "VqO-Gm-CbB"; */
+"VqO-Gm-CbB.title" = "Selection";
+
+/* Class = "NSTextFieldCell"; title = "Camera"; ObjectID = "YCM-JC-jin"; */
+"YCM-JC-jin.title" = "Camera";
+
+/* Class = "NSMenu"; title = "rates"; ObjectID = "aKL-76-vSP"; */
+"aKL-76-vSP.title" = "rates";
+
+/* Class = "NSMenu"; title = "sizes"; ObjectID = "ykd-50-las"; */
+"ykd-50-las.title" = "sizes";
+
+/* Class = "NSMenu"; title = "devices"; ObjectID = "zJ9-1a-cpr"; */
+"zJ9-1a-cpr.title" = "devices";
diff --git a/ui/VideoPrefs.xib b/ui/Base.lproj/VideoPrefs.xib
similarity index 100%
rename from ui/VideoPrefs.xib
rename to ui/Base.lproj/VideoPrefs.xib
diff --git a/ui/PreferencesWindow.xib b/ui/PreferencesWindow.xib
deleted file mode 100644
index e4e5e3d..0000000
--- a/ui/PreferencesWindow.xib
+++ /dev/null
@@ -1,39 +0,0 @@
-<?xml version="1.0" encoding="UTF-8" standalone="no"?>
-<document type="com.apple.InterfaceBuilder3.Cocoa.XIB" version="3.0" toolsVersion="6254" systemVersion="13F34" targetRuntime="MacOSX.Cocoa" propertyAccessControl="none" useAutolayout="YES" customObjectInstantitationMethod="direct">
-    <dependencies>
-        <deployment identifier="macosx"/>
-        <plugIn identifier="com.apple.InterfaceBuilder.CocoaPlugin" version="6254"/>
-    </dependencies>
-    <objects>
-        <customObject id="-2" userLabel="File's Owner"/>
-        <customObject id="-1" userLabel="First Responder" customClass="FirstResponder"/>
-        <customObject id="-3" userLabel="Application" customClass="NSObject"/>
-        <window title="Preferences" allowsToolTipsWhenApplicationIsInactive="NO" autorecalculatesKeyViewLoop="NO" oneShot="NO" releasedWhenClosed="NO" animationBehavior="default" id="QvC-M9-y7g">
-            <windowStyleMask key="styleMask" titled="YES" closable="YES" miniaturizable="YES" resizable="YES"/>
-            <windowPositionMask key="initialPositionMask" leftStrut="YES" rightStrut="YES" topStrut="YES" bottomStrut="YES"/>
-            <rect key="contentRect" x="196" y="240" width="529" height="361"/>
-            <rect key="screenRect" x="0.0" y="0.0" width="1680" height="1050"/>
-            <view key="contentView" identifier="preferences" id="EiT-Mj-1SZ">
-                <rect key="frame" x="0.0" y="0.0" width="529" height="361"/>
-                <autoresizingMask key="autoresizingMask"/>
-            </view>
-            <toolbar key="toolbar" implicitIdentifier="CF45A262-676F-4F7B-8607-AE007CC9BD32" autosavesConfiguration="NO" displayMode="iconAndLabel" sizeMode="regular" id="rLh-7J-Daz">
-                <allowedToolbarItems>
-                    <toolbarItem implicitItemIdentifier="NSToolbarShowColorsItem" id="m2m-v6-Cr4"/>
-                    <toolbarItem implicitItemIdentifier="NSToolbarShowFontsItem" id="Frm-v0-exu"/>
-                    <toolbarItem implicitItemIdentifier="NSToolbarPrintItem" id="Aqg-6t-nId"/>
-                    <toolbarItem implicitItemIdentifier="NSToolbarSpaceItem" id="MMp-QI-cJm"/>
-                    <toolbarItem implicitItemIdentifier="NSToolbarFlexibleSpaceItem" id="8Mn-HP-gRX"/>
-                </allowedToolbarItems>
-                <defaultToolbarItems>
-                    <toolbarItem reference="8Mn-HP-gRX"/>
-                    <toolbarItem reference="m2m-v6-Cr4"/>
-                    <toolbarItem reference="Frm-v0-exu"/>
-                    <toolbarItem reference="Aqg-6t-nId"/>
-                    <toolbarItem reference="8Mn-HP-gRX"/>
-                </defaultToolbarItems>
-            </toolbar>
-            <point key="canvasLocation" x="116.5" y="274.5"/>
-        </window>
-    </objects>
-</document>
diff --git a/update-translations.sh b/update-translations.sh
new file mode 100755
index 0000000..15671e2
--- /dev/null
+++ b/update-translations.sh
@@ -0,0 +1,48 @@
+#!/bin/bash
+
+#  Copyright (C) 2015 Savoir-faire Linux Inc.
+#  Author: Alexandre Lision <alexandre.lision@savoirfairelinux.com>
+#
+#  This program is free software; you can redistribute it and/or modify
+#  it under the terms of the GNU General Public License as published by
+#  the Free Software Foundation; either version 3 of the License, or
+#  (at your option) any later version.
+#
+#  This program is distributed in the hope that it will be useful,
+#  but WITHOUT ANY WARRANTY; without even the implied warranty of
+#  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+#  GNU General Public License for more details.
+#
+#  You should have received a copy of the GNU General Public License
+#  along with this program; if not, write to the Free Software
+#  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301 USA.
+
+# This scripts pulls translations from transifex
+# It also converts files to UTF-8 and replace the first line which contains a
+# corrupted BMO (byte order mark) placed by Transifex
+
+# Get the translations from Transifex
+# TODO: add contraints on what we pull
+tx pull -a --minimum-perc=75
+cd ui/
+
+# List languages pulled
+languages="$(ls -1)"
+
+for dir in "${languages[@]}"; do
+    cd $dir
+    # in each country dir cleanup the files
+    for file in `find . -name '*.strings'`; do
+        # Convert file if encoding is utf-16le
+        if [ `file -I $file | awk '{print $3;}'` = "charset=utf-16le" ]; then
+            iconv -f UTF-16LE -t UTF-8 $file > $file.8
+        else
+            mv $file $file.8
+        fi
+
+        # Empty first line
+        sed '1s/.*//' $file.8 > $file
+        rm $file.8
+    done
+    cd ..
+done