diff --git a/.gitignore b/.gitignore index 254cc98a7..6271162ee 100644 --- a/.gitignore +++ b/.gitignore @@ -77,3 +77,8 @@ tools/xml2lpc_test coreapi/help/filetransfer tester/receive_file.dump tester/tmp.db +.DS_Store +Linphone.app +*.dmg +tester/linphone*.log +tester/linphone_log.txt diff --git a/.tx/config b/.tx/config new file mode 100644 index 000000000..4c2a2acd7 --- /dev/null +++ b/.tx/config @@ -0,0 +1,10 @@ +[main] +host = https://www.transifex.com +minimum_perc = 1 +type = PO + +[linphone-gtk.linphonepot] +file_filter = po/.po +source_file = po/linphone.pot +source_lang = en + diff --git a/CMakeLists.txt b/CMakeLists.txt index 4311101fd..ac04dc879 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -30,6 +30,8 @@ set(LINPHONE_MICRO_VERSION "0") set(LINPHONE_VERSION "${LINPHONE_MAJOR_VERSION}.${LINPHONE_MINOR_VERSION}.${LINPHONE_MICRO_VERSION}") set(LINPHONE_SO_VERSION "6") +set(LINPHONE_ALL_LANGS "cs de es fr he hu it ja nb_NO nl pl pt_BR ru sr sv zh_CN zh_TW") + include(CMakeDependentOption) @@ -39,9 +41,9 @@ option(ENABLE_DATE "Use build date in internal version number." NO) option(ENABLE_GTK_UI "Turn on or off compilation of gtk interface." YES) option(ENABLE_LDAP "Enable LDAP support." NO) option(ENABLE_MSG_STORAGE "Turn on compilation of message storage." YES) -option(ENABLE_NOTIFY "Enable libnotify support." YES) +cmake_dependent_option(ENABLE_NOTIFY "Enable libnotify support." YES "ENABLE_GTK_UI" NO) option(ENABLE_RELATIVE_PREFIX "Find resources relatively to the installation directory." NO) -option(ENABLE_TOOLS "Turn on or off compilation of console interface" YES) +option(ENABLE_TOOLS "Turn on or off compilation of tools." YES) option(ENABLE_TUNNEL "Turn on compilation of tunnel support." NO) option(ENABLE_TUTORIALS "Enable compilation of tutorials." YES) option(ENABLE_UNIT_TESTS "Enable compilation of unit tests." YES) @@ -50,22 +52,47 @@ option(ENABLE_VIDEO "Build with video support." YES) cmake_dependent_option(ENABLE_ASSISTANT "Turn on assistant compiling." YES "ENABLE_GTK_UI" NO) -list(APPEND CMAKE_MODULE_PATH ${CMAKE_PREFIX_PATH}/share/cmake/Modules) +list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/cmake") +list(APPEND CMAKE_MODULE_PATH "${CMAKE_PREFIX_PATH}/share/cmake/Modules") include(CheckIncludeFile) +include(CheckSymbolExists) if(MSVC) - list(APPEND CMAKE_REQUIRED_INCLUDES ${CMAKE_PREFIX_PATH}/include/MSVC) + list(APPEND CMAKE_REQUIRED_INCLUDES "${CMAKE_PREFIX_PATH}/include/MSVC") endif() find_package(BelleSIP REQUIRED) find_package(MS2 REQUIRED) find_package(XML2 REQUIRED) +if(ENABLE_UNIT_TESTS) + find_package(CUnit) + if(CUNIT_FOUND) + cmake_push_check_state(RESET) + list(APPEND CMAKE_REQUIRED_INCLUDES ${CUNIT_INCLUDE_DIRS}) + list(APPEND CMAKE_REQUIRED_LIBRARIES ${CUNIT_LIBRARIES}) + check_symbol_exists("CU_get_suite" "CUnit/CUnit.h" HAVE_CU_GET_SUITE) + check_symbol_exists("CU_curses_run_tests" "CUnit/CUnit.h" HAVE_CU_CURSES) + cmake_pop_check_state() + else() + message(WARNING "Could not find the cunit library!") + set(ENABLE_UNIT_TESTS OFF CACHE BOOL "Enable compilation of unit tests." FORCE) + endif() +endif() if(ENABLE_TUNNEL) find_package(Tunnel) if(NOT TUNNEL_FOUND) message(WARNING "Could not find the tunnel library!") - set(ENABLE_TUNNEL OFF CACHE BOOL "Enable tunnel support" FORCE) + set(ENABLE_TUNNEL OFF CACHE BOOL "Enable tunnel support." FORCE) + endif() +endif() +if(ENABLE_NOTIFY) + find_package(Notify) + if(NOTIFY_FOUND) + set(HAVE_NOTIFY4 1) + else() + message(WARNING "Could not find the notify library!") + set(ENABLE_NOTIFY OFF CACHE BOOL "Enable libnotify support." FORCE) endif() endif() @@ -87,7 +114,29 @@ if(MSVC) include_directories(${CMAKE_PREFIX_PATH}/include/MSVC) endif() +add_definitions(-DIN_LINPHONE) + +if(MSVC) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} /W3") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} /W3") +else() + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wall -Wuninitialized -Wdeclaration-after-statement -fno-strict-aliasing -Werror") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wall -Wuninitialized -Werror") + if(CMAKE_C_COMPILER_ID STREQUAL "Clang") + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Qunused-arguments -Wno-array-bounds") + endif() + if(CMAKE_CXX_COMPILER_ID STREQUAL "Clang") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Qunused-arguments -Wno-array-bounds") + endif() + if(APPLE) + set(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -Wno-error=unknown-warning-option -Wno-tautological-compare -Wno-unused-function") + set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -Wno-error=unknown-warning-option -Wno-tautological-compare -Wno-unused-function") + endif() +endif() + + +set(GETTEXT_PACKAGE "linphone") if(ENABLE_RELATIVE_PREFIX) set(LINPHONE_DATA_DIR ".") else() @@ -97,19 +146,33 @@ set(LINPHONE_PLUGINS_DIR "${LINPHONE_DATA_DIR}/lib/liblinphone/plugins") set(PACKAGE_LOCALE_DIR "${LINPHONE_DATA_DIR}/share/locale") set(PACKAGE_DATA_DIR "${LINPHONE_DATA_DIR}/share") set(PACKAGE_SOUND_DIR "${LINPHONE_DATA_DIR}/share/sounds/linphone") +set(PACKAGE_RING_DIR "${PACKAGE_SOUND_DIR}/rings") +set(PACKAGE_FREEDESKTOP_DIR "${PACKAGE_DATA_DIR}/applications") configure_file(${CMAKE_CURRENT_SOURCE_DIR}/config.h.cmake ${CMAKE_CURRENT_BINARY_DIR}/config.h) set_source_files_properties(${CMAKE_CURRENT_BINARY_DIR}/config.h PROPERTIES GENERATED ON) add_definitions(-DHAVE_CONFIG_H) -add_subdirectory(coreapi) -add_subdirectory(share) -if(ENABLE_TOOLS) - add_subdirectory(tools) +if(ENABLE_VIDEO) + add_definitions(-DVIDEO_ENABLED) endif() -install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/FindLinphone.cmake +add_subdirectory(coreapi) +add_subdirectory(share) +if(ENABLE_GTK_UI) + add_subdirectory(gtk) + add_subdirectory(pixmaps) +endif() +if(ENABLE_TOOLS) + add_subdirectory(tools) +endif() +if(ENABLE_UNIT_TESTS) + add_subdirectory(tester) +endif() + + +install(FILES ${CMAKE_CURRENT_SOURCE_DIR}/cmake/FindLinphone.cmake DESTINATION share/cmake/Modules PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ ) diff --git a/Makefile.am b/Makefile.am index 89439c9f1..c838f4d48 100644 --- a/Makefile.am +++ b/Makefile.am @@ -50,7 +50,7 @@ PACKAGE_BUNDLE_FILE=$(top_srcdir)/build/macos/$(PACKAGE).bundle EXTRA_DIST = BUGS \ README.arm \ README.mingw \ - README.macos \ + README.macos.md \ autogen.sh \ linphone.spec \ linphone.spec.in \ @@ -171,7 +171,7 @@ filelist: zip setup.exe: filelist cp $(ISS_SCRIPT) $(INSTALLDIR_WITH_PREFIX)/. cd $(INSTALLDIR_WITH_PREFIX) && \ - $(ISCC) $(ISS_SCRIPT) + $(ISCC) $(ISS_SCRIPT) mv $(INSTALLDIR_WITH_PREFIX)/Output/setup.exe $(PACKAGE)-$(VERSION)-setup.exe rm -rf $(INSTALLDIR_WITH_PREFIX)/Output rm -f $(INSTALLDIR_WITH_PREFIX)/$(PACKAGE_WIN32_FILELIST) diff --git a/README b/README index e10ecc2d2..30666070a 100644 --- a/README +++ b/README @@ -11,12 +11,12 @@ This is Linphone, a free (GPL) video softphone based on the SIP protocol. - belle-sip>=1.3.0 - speex>=1.2.0 (including libspeexdsp part) - libxml2 - + + if you want the gtk/glade interface: - libgtk >=2.16.0 + if you want video support: - libvpx (VP8 codec) - - libavcodec (ffmpeg) + - libavcodec (ffmpeg) - libswscale (part of ffmpeg too) for better scaling performance - libxv (x11 video extension) - libgl1-mesa (OpenGL API -- GLX development files) @@ -31,7 +31,7 @@ This is Linphone, a free (GPL) video softphone based on the SIP protocol. + if you want uPnP support (optional): - libupnp (version 1.6 branch (not patched with 18-url-upnpstrings.patch)) - Here is the command line to get these dependencies installed for Ubuntu && Debian + Here is the command line to get these dependencies installed for Ubuntu && Debian $ sudo apt-get install libtool intltool libgtk2.0-dev libspeexdsp-dev \ libavcodec-dev libswscale-dev libx11-dev libxv-dev libgl1-mesa-dev \ @@ -43,22 +43,19 @@ libsoup2.4-dev libsqlite3-dev libupnp4-dev + Install srtp (optional) for call encryption : $ git clone git://git.linphone.org/srtp.git - $ cd srtp && autoconf && ./configure && make - $ sudo make install + $ cd srtp && autoconf && ./configure && make + $ sudo make install - + Install zrtpcpp (optional), for unbreakable call encryption - $ sudo apt-get install cmake - $ git clone https://github.com/wernerd/ZRTPCPP.git - $ cd ZRTPCPP - $ cmake -DCORE_LIB=true -DSDES=false . && make - $ sudo make install - If you get this error: "cc1plus: error: unrecognized command line option ‘-std=c++11’", edit CMakeLists.txt and replace c++11 by c++0x . + + Install zrtp (optional), for unbreakable call encryption + $ git clone git://git.linphone.org:bzrtp + $ cd bzrtp && ./autogen.sh && ./configure && make + $ sudo make install - Compile linphone $ ./autogen.sh - $ ./configure - $ make && sudo make install + $ ./configure + $ make && sudo make install $ sudo ldconfig @@ -71,10 +68,10 @@ For macOS X, see README.macos Here is a short description of the content of the source tree. -- oRTP/ is a poweful implementation of the RTP protocol. See the oRTP/README for more details. +- oRTP/ is a poweful implementation of the RTP protocol. See the oRTP/README for more details. It is used by the mediastreamer to send and receive streams to the network. -- mediastreamer2/ is one of the important part of linphone. It is a framework library for audio +- mediastreamer2/ is one of the important part of linphone. It is a framework library for audio and video processing. It contains several objects for grabing audio and video and outputing it (through rtp, to file). It contains also codec objects to compress audio and video streams. @@ -89,6 +86,6 @@ Here is a short description of the content of the source tree. * linphonec.c is the main file for the console version of linphone. * sipomatic.c / sipomatic.h contains the code for sipomatic, the test program that auto-answer to linphone calls. * shell.c (program name: linphonecsh) is a small utilities to send interactive commands to a running linphonec daemon. - + - share/ contains translation, documentation, rings and hello sound files. diff --git a/README.macos b/README.macos deleted file mode 100644 index e3ffb72d5..000000000 --- a/README.macos +++ /dev/null @@ -1,146 +0,0 @@ -********************************** -* Compiling linphone on macos X * -********************************** - -You need: - - Xcode (download from apple or using appstore application) - - Java SE - - Macports: http://www.macports.org/ - Download and install macports using its user friendly installer. - -- In order to enable generation of bundle for multiple macos version and 32 bit processors, it is recommended to: - 1) edit /opt/local/etc/macports/macports.conf to add the following line: - macosx_deployment_target 10.6 - 2) edit /opt/local/etc/macports/variants.conf to add the following line: - +universal - -- Install build time dependencies - $ sudo port install automake autoconf libtool intltool wget cunit - -- Install some linphone dependencies with macports - $ sudo port install antlr3 speex libvpx readline sqlite3 libsoup openldap libupnp - $ sudo port install ffmpeg-devel -gpl2 - -- Install gtk. It is recommended to use the quartz backend for better integration. - $ sudo port install gtk2 +quartz +no_x11 - $ sudo port install gtk-osx-application -python27 - $ sudo port install hicolor-icon-theme - -The next pieces need to be compiled manually. To ensure compatibility with multiple mac os version it is recommended to do: - $ export MACOSX_DEPLOYMENT_TARGET=10.6 - $ export CFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" - $ export OBJCFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" - $ export CXXFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" - $ export LDFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5 -Wl,-headerpad_max_install_names -Wl,-read_only_relocs -Wl,suppress" - -- (Optional) libvpx-1.2 has a bug on macos resulting in ugly video. It is recommended to upgrade it manually to 1.3 from source. - The libvpx build isn't able to produce dual architecture files. To workaround this, configure libvpx twice and use lipo to create a dual architecture - libvpx.a . - -- Install libantlr3c (library used by belle-sip for parsing) - $ git clone -b linphone git://git.linphone.org/antlr3.git - $ cd antlr3/runtime/C - $ ./autogen.sh - $ ./configure --disable-static --prefix=/opt/local && make - $ sudo make install - -- Install polarssl (encryption library used by belle-sip) - $ git clone git://git.linphone.org/polarssl.git -b linphone - $ cd polarssl - $ ./autogen.sh && ./configure --prefix=/opt/local && make - $ sudo make install - -- Install belle-sip (sip stack) - $ git clone git://git.linphone.org/belle-sip.git - $ cd belle-sip - $ ./autogen.sh && ./configure --prefix=/opt/local && make - $ sudo make install - -- Install srtp (optional) for call encryption - $ git clone git://git.linphone.org/srtp.git - $ cd srtp && autoconf && ./configure --prefix=/opt/local && make libsrtp.a - $ sudo make install - -- Install zrtpcpp (optional), for unbreakable call encryption - $ sudo port install cmake - $ git clone https://github.com/wernerd/ZRTPCPP.git - $ cd ZRTPCPP - $ cmake -DCORE_LIB=true -DSDES=false CMAKE_INSTALL_NAME_DIR=/usr/local/lib/ -DCMAKE_C_FLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" -DCMAKE_CXX_FLAGS="-arch i386 -arch x86_64 --stdlib=libstdc++ -std=c++11 -lstdc++ -mmacosx-version-min=10.5" -DCMAKE_C_COMPILER=`xcrun --find clang` -DCMAKE_CXX_COMPILER=`xcrun --find clang` . -$ sudo make install - - -- Install gsm codec (optional) - $ git clone git://git.linphone.org/gsm.git - $ cd gsm - $ make CCFLAGS="$CFLAGS -c -O2 -DNeedFunctionPrototypes=1" - $ sudo make install INSTALL_ROOT=/opt/local GSM_INSTALL_INC=/opt/local/include - -- Compile and install the tunnel library (optional, proprietary extension only) - - If you got the source code from git, run ./autogen.sh first. - Then or otherwise, do: - - $ ./configure --prefix=/opt/local && make && sudo make install - -- Compile linphone - - If you got the source code from git, run ./autogen.sh first. - - Then or otherwise, do: - - $ PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --prefix=/opt/local --with-readline=/opt/local --disable-x11 --with-srtp=/opt/local --with-gsm=/opt/local --enable-zrtp --disable-strict && make - - Install to /opt/local - - $ sudo make install - - Done. - -If you want to generate a portable bundle, then install gtk-mac-bundler. -Use git: - $ git clone https://github.com/jralls/gtk-mac-bundler.git - $ cd gtk-mac-bundler && make install - $ export PATH=$PATH:~/.local/bin - #make this dummy charset.alias file for the bundler to be happy: - $ sudo touch touch /opt/local/lib/charset.alias - -The bundler file in build/macos/linphone.bundle expects some plugins to be installed in /opt/local/lib/mediastreamer/plugins . -If you don't need plugins, remove or comment out this line from the bundler file: - - ${prefix:ms2plugins}/lib/mediastreamer/plugins/*.*.so - - -Then run, inside linphone source tree: - Run configure as told before but with "--enable-relativeprefix" appended. - $ make - $ make bundle - -The resulting bundle is located in linphone build directory, together with a zipped version. - -For a better appearance, you can install the gtk-quartz-engine (a gtk theme) that make gtk application more similar to other mac applications (but not perfect). - - $ git clone https://github.com/jralls/gtk-quartz-engine.git - $ cd gtk-quartz-engine - $ autoreconf -i - $ ./configure --prefix=/opt/local CFLAGS="$CFLAGS -Wno-error" && make - $ sudo make install - -Generate a new bundle to have it included. - -libiconv hack -************* - -The Makefile.am rules used to generate the bundle fetch a libiconv.2.dylib from a linphone download page. -This library adds some additional symbols so that dependencies requiring the iconv from /usr/lib and the ones requiring from the bundle are both satisfied. -In case this library needs to generated, here are the commands: - $ wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz - $ cd libiconv-1.14 - $ patch -p1 < ../linphone/build/macos/libiconv-macos.patch - $ ./configure --prefix=/opt/local --disable-static 'CFLAGS=-arch i386 -arch x86_64 -mmacosx-version-min=10.5' 'LDFLAGS=-arch i386 -arch x86_64 -mmacosx-version-min=10.5' CXXFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" && make - $ make install DESTDIR=/tmp - -The resulted library can be found in /tmp/opt/local/lib - - - - diff --git a/README.macos.md b/README.macos.md new file mode 100644 index 000000000..cfe0a40a9 --- /dev/null +++ b/README.macos.md @@ -0,0 +1,171 @@ +# Compiling Linphone on MacOS X + +## Dependencies + +* Xcode (download from apple or using appstore application) +* Java SE +* [HomeBrew](http://brew.sh) or [Macports](http://www.macports.org/). + +### Multiple MacOS version support + +In order to enable generation of bundle for multiple MacOS version and 32 bit processors, it is recommended to: + +1. Edit `/opt/local/etc/macports/macports.conf` to add the following line: + + > macosx_deployment_target 10.6 + +2. Edit `/opt/local/etc/macports/variants.conf` to add the following line: + + > +universal + +### Build time dependencies + +#### Using MacPorts + +* Linphone core dependencies + + sudo port install automake autoconf libtool intltool wget cunit \ + antlr3 speex libvpx readline sqlite3 libsoup openldap libupnp \ + ffmpeg-devel -gpl2 + +* UI dependencies: install `GTK`. It is recommended to use the `quartz` backend for better integration. + + sudo port install gtk2 +quartz +no_x11 + sudo port install gtk-osx-application -python27 + sudo port install hicolor-icon-theme + +#### Using HomeBrew + + brew install automake intltool libtool pkg-config coreutils \ + yasm nasm wget imagemagick gettext gtk+ speex ffmpeg pygtk + brew link gettext --force + # readline is required from linphonec.c otherwise compilation will fail + brew link readline --force + + # then you have to install some dependencies from a tap. + brew tap Gui13/linphone + brew install antlr3.2 libantlr3.4c mattintosh4/gtk-mac-integration/gtk-mac-integration + +### Building Linphone + +The next pieces need to be compiled manually. + +* To ensure compatibility with multiple MacOS versions it is recommended to do: + + export MACOSX_DEPLOYMENT_TARGET=10.6 + export CFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" + export OBJCFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" + export CXXFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" + export LDFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5 -Wl,-headerpad_max_install_names -Wl,-read_only_relocs -Wl,suppress" + +* Install libantlr3c (library used by belle-sip for parsing) + + git clone -b linphone git://git.linphone.org/antlr3.git + cd antlr3/runtime/C + ./autogen.sh + ./configure --disable-static --prefix=/opt/local && make + sudo make install + +* Install polarssl (encryption library used by belle-sip) + + git clone git://git.linphone.org/polarssl.git -b linphone + cd polarssl + ./autogen.sh && ./configure --prefix=/opt/local && make + sudo make install + +* Install belle-sip (sip stack) + + git clone git://git.linphone.org/belle-sip.git + cd belle-sip + ./autogen.sh && ./configure --prefix=/opt/local && make + sudo make install + +* (Optional) Install srtp for call encryption + + git clone git://git.linphone.org/srtp.git + cd srtp && autoconf && ./configure --prefix=/opt/local && make libsrtp.a + sudo make install + +* (Optional) Install zrtp, for unbreakable call encryption + + git clone git://git.linphone.org:bzrtp + cd bzrtp && ./autogen.sh && ./configure --prefix=/opt/local && make + sudo make install + +* (Optional) Install gsm codec + + git clone git://git.linphone.org/gsm.git + cd gsm + make CCFLAGS="$CFLAGS -c -O2 -DNeedFunctionPrototypes=1" + sudo make install INSTALL_ROOT=/opt/local GSM_INSTALL_INC=/opt/local/include + +* (Optional) libvpx-1.2 has a bug on MacOS resulting in ugly video. It is recommended to upgrade it manually to 1.3 from source. +The libvpx build isn't able to produce dual architecture files. To workaround this, configure libvpx twice and use lipo to create a dual architecture `libvpx.a`. + +* (Optional, proprietary extension only) Compile and install the tunnel library + If you got the source code from git, run `./autogen.sh` first. + Then or otherwise, do: + + ./configure --prefix=/opt/local && make && sudo make install + +* Compile Linphone + If you got the source code from git, run `./autogen.sh` first. + Then or otherwise, : + + PKG_CONFIG_PATH=/usr/local/lib/pkgconfig ./configure --prefix=/opt/local --disable-x11 --with-srtp=/opt/local --with-gsm=/opt/local --enable-zrtp --disable-strict && make + +* Install on the system + + sudo make install + You are done. + +### Generate portable bundle + +If you want to generate a portable bundle, then install `gtk-mac-bundler`: + + git clone https://github.com/jralls/gtk-mac-bundler.git + cd gtk-mac-bundler && make install + export PATH=$PATH:~/.local/bin + #make this dummy charset.alias file for the bundler to be happy: + sudo touch /opt/local/lib/charset.alias + +The bundler file in `build/MacOS/linphone.bundle` expects some plugins to be installed in `/opt/local/lib/mediastreamer/plugins`. +If you don't need plugins, remove or comment out this line from the bundler file: + + + ${prefix:ms2plugins}/lib/mediastreamer/plugins/*.*.so + + +Then run, inside Linphone source tree configure as told before but with `--enable-relativeprefix` appended. + + make && make bundle + +The resulting bundle is located in Linphone build directory, together with a zipped version. + +* For a better appearance, you can install `gtk-quartz-engine` (a GTK theme) that makes GTK application more similar to other Mac applications (but not perfect). + + git clone https://github.com/jralls/gtk-quartz-engine.git + cd gtk-quartz-engine + autoreconf -i + ./configure --prefix=/opt/local CFLAGS="$CFLAGS -Wno-error" && make + sudo make install + +Generate a new bundle to have it included. + +### libiconv hack + +The `Makefile.am` rules used to generate the bundle fetch a `libiconv.2.dylib` from a Linphone download page. +This library adds some additional symbols so that dependencies requiring the `iconv` from `/usr/lib` and the ones requiring from the bundle are both satisfied. +In case this library needs to generated, here are the commands: + + wget http://ftp.gnu.org/pub/gnu/libiconv/libiconv-1.14.tar.gz + cd libiconv-1.14 + patch -p1 < ../linphone/build/MacOS/libiconv-MacOS.patch + ./configure --prefix=/opt/local --disable-static 'CFLAGS=-arch i386 -arch x86_64 -mmacosx-version-min=10.5' 'LDFLAGS=-arch i386 -arch x86_64 -mmacosx-version-min=10.5' CXXFLAGS="-arch i386 -arch x86_64 -mmacosx-version-min=10.5" && make + make install DESTDIR=/tmp + +The resulted library can be found in `/tmp/opt/local/lib`. + + + + diff --git a/autogen.sh b/autogen.sh index cf357cd66..9cedbf164 100755 --- a/autogen.sh +++ b/autogen.sh @@ -22,6 +22,7 @@ if test -f /opt/local/bin/glibtoolize ; then else LIBTOOLIZE=libtoolize fi + if test -d /opt/local/share/aclocal ; then ACLOCAL_ARGS="-I /opt/local/share/aclocal" fi @@ -30,13 +31,7 @@ if test -d /share/aclocal ; then ACLOCAL_ARGS="$ACLOCAL_ARGS -I /share/aclocal" fi -if test -f /opt/local/bin/intltoolize ; then - #darwin - INTLTOOLIZE=/opt/local/bin/intltoolize -else - #on mingw, it is important to invoke intltoolize with an absolute path to avoid a bug - INTLTOOLIZE=/usr/bin/intltoolize -fi +INTLTOOLIZE=$(which intltoolize) echo "Generating build scripts in linphone..." set -x diff --git a/build/android/Android.mk b/build/android/Android.mk index 1edc91fac..adc78454c 100755 --- a/build/android/Android.mk +++ b/build/android/Android.mk @@ -26,50 +26,51 @@ include $(CLEAR_VARS) LOCAL_CPP_EXTENSION := .cc LOCAL_SRC_FILES := \ - linphonecore.c \ - misc.c \ - enum.c \ - presence.c \ - proxy.c \ - friend.c \ - authentication.c \ - lpconfig.c \ - chat.c \ - sipsetup.c \ - siplogin.c \ address.c \ - linphonecore_jni.cc \ + authentication.c \ bellesip_sal/sal_address_impl.c \ bellesip_sal/sal_impl.c \ bellesip_sal/sal_op_call.c \ bellesip_sal/sal_op_call_transfer.c \ + bellesip_sal/sal_op_events.c \ bellesip_sal/sal_op_impl.c \ + bellesip_sal/sal_op_info.c \ bellesip_sal/sal_op_message.c \ bellesip_sal/sal_op_presence.c \ - bellesip_sal/sal_op_registration.c \ bellesip_sal/sal_op_publish.c \ - bellesip_sal/sal_op_info.c \ - bellesip_sal/sal_op_events.c \ + bellesip_sal/sal_op_registration.c \ bellesip_sal/sal_sdp.c \ - sal.c \ - offeranswer.c \ callbacks.c \ - linphonecall.c \ - conference.c \ - ec-calibrator.c \ - linphone_tunnel_config.c \ - message_storage.c \ - info.c \ - event.c \ - xml.c \ - xml2lpc.c \ - lpc2xml.c \ - remote_provisioning.c \ - quality_reporting.c \ call_log.c \ call_params.c \ + chat.c \ + conference.c \ + content.c \ + ec-calibrator.c \ + enum.c \ + event.c \ + friend.c \ + info.c \ + linphonecall.c \ + linphonecore.c \ + linphonecore_jni.cc \ + linphone_tunnel_config.c \ + localplayer.c \ + lpc2xml.c \ + lpconfig.c \ + message_storage.c \ + misc.c \ + offeranswer.c \ player.c \ - fileplayer.c + presence.c \ + proxy.c \ + quality_reporting.c \ + remote_provisioning.c \ + sal.c \ + siplogin.c \ + sipsetup.c \ + xml2lpc.c \ + xml.c ifndef LIBLINPHONE_VERSION LIBLINPHONE_VERSION = "Devel" @@ -256,9 +257,7 @@ LOCAL_EXPORT_CFLAGS := $(LOCAL_CFLAGS) ifeq ($(_BUILD_VIDEO),1) LOCAL_SHARED_LIBRARIES += \ - libavcodec-linphone \ - libswscale-linphone \ - libavutil-linphone + libffmpeg-linphone endif LOCAL_MODULE := liblinphone @@ -266,5 +265,8 @@ LOCAL_MODULE_FILENAME := liblinphone-$(TARGET_ARCH_ABI) include $(BUILD_SHARED_LIBRARY) +LOCAL_CPPFLAGS=$(LOCAL_CFLAGS) +LOCAL_CFLAGS += -Wdeclaration-after-statement + $(call import-module,android/cpufeatures) diff --git a/build/android/liblinphone_tester.mk b/build/android/liblinphone_tester.mk index b23a381bd..430f203be 100644 --- a/build/android/liblinphone_tester.mk +++ b/build/android/liblinphone_tester.mk @@ -14,8 +14,10 @@ common_SRC_FILES := \ tester.c \ remote_provisioning_tester.c \ quality_reporting_tester.c \ + log_collection_tester.c \ transport_tester.c \ - player_tester.c + player_tester.c \ + dtmf_tester.c common_C_INCLUDES += \ $(LOCAL_PATH) \ diff --git a/build/wp8/LibLinphone.vcxproj b/build/wp8/LibLinphone.vcxproj index 7d8d4b014..6a3d8e034 100644 --- a/build/wp8/LibLinphone.vcxproj +++ b/build/wp8/LibLinphone.vcxproj @@ -53,8 +53,8 @@ Level4 - $(ProjectDir)..\..\..\belle-sip\include;$(ProjectDir)..\..\oRTP\include;$(ProjectDir)..\..\mediastreamer2\include;$(ProjectDir)..\..\..\tunnel\include;$(ProjectDir)..\..\coreapi;$(ProjectDir)..\..\include;$(SolutionDir)$(Platform)\$(Configuration)\include;$(ProjectDir)..\..\..\zlib;%(AdditionalIncludeDirectories) - __STDC_CONSTANT_MACROS;_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;_USRDLL;WINDOW_NATIVE;_TRUE_TIME;IN_LINPHONE;USE_BELLESIP;TUNNEL_ENABLED;VIDEO_ENABLED;LINPHONE_PACKAGE_NAME="linphone";LINPHONE_VERSION="Devel";LIBLINPHONE_EXPORTS;LINPHONE_PLUGINS_DIR=".";UNICODE;_XKEYCHECK_H;HAVE_ZLIB;%(PreprocessorDefinitions) + $(ProjectDir)..\..\..\belle-sip\include;$(ProjectDir)..\..\oRTP\include;$(ProjectDir)..\..\mediastreamer2\include;$(ProjectDir)..\..\..\tunnel\include;$(ProjectDir)..\..\coreapi;$(ProjectDir)..\..\include;$(SolutionDir)$(Platform)\$(Configuration)\include;$(ProjectDir)..\..\..\zlib;$(ProjectDir)..\..\..\sqlite\;$(ProjectDir);%(AdditionalIncludeDirectories) + __STDC_CONSTANT_MACROS;_CRT_SECURE_NO_WARNINGS;WIN32;_WINDOWS;_USRDLL;WINDOW_NATIVE;_TRUE_TIME;IN_LINPHONE;USE_BELLESIP;TUNNEL_ENABLED;VIDEO_ENABLED;LINPHONE_PACKAGE_NAME="linphone";LIBLINPHONE_EXPORTS;LINPHONE_PLUGINS_DIR=".";UNICODE;_XKEYCHECK_H;HAVE_ZLIB;HAVE_CONFIG_H;%(PreprocessorDefinitions) Default NotUsing false @@ -68,13 +68,16 @@ $(SolutionDir)$(Platform)\$(Configuration);%(AdditionalLibraryDirectories) $(TargetDir)$(TargetName).lib - - $(TargetDir)$(TargetName)_dll.lib;%(Outputs) - + + version.bat + + + Batch script to get the git version + - _DEBUG;%(PreprocessorDefinitions) + _DEBUG;MSG_STORAGE_ENABLED;%(PreprocessorDefinitions) true @@ -82,7 +85,7 @@ - NDEBUG;%(PreprocessorDefinitions) + NDEBUG;MSG_STORAGE_ENABLED;%(PreprocessorDefinitions) MaxSpeed true true @@ -112,6 +115,7 @@ + @@ -121,6 +125,7 @@ + @@ -140,6 +145,7 @@ + @@ -151,6 +157,8 @@ + + @@ -189,6 +197,9 @@ {0565952a-ea62-46a2-8261-f5b4b490da42} + + {a45d63b9-60de-476c-8836-f8eedbe139d0} + {59500dd1-b192-4ddf-a402-8a8e3739e032} diff --git a/build/wp8/LibLinphoneTester-native/LibLinphoneTester-native.vcxproj b/build/wp8/LibLinphoneTester-native/LibLinphoneTester-native.vcxproj index 0512be517..6bc245f9f 100644 --- a/build/wp8/LibLinphoneTester-native/LibLinphoneTester-native.vcxproj +++ b/build/wp8/LibLinphoneTester-native/LibLinphoneTester-native.vcxproj @@ -100,12 +100,15 @@ + + + true diff --git a/build/wp8/version.bat b/build/wp8/version.bat new file mode 100644 index 000000000..55ee42831 --- /dev/null +++ b/build/wp8/version.bat @@ -0,0 +1,22 @@ +@ECHO off + +SET gitlog= +FOR /f "delims=" %%a IN ('git log -1 "--pretty=format:%%H" ../../configure.ac') DO SET gitlog=%%a + +IF [%gitlog%] == [] GOTO UnknownGitVersion + +FOR /f "delims=" %%a IN ('git describe --always') DO SET gitdescribe=%%a +GOTO End + +:UnknownGitVersion +SET gitdescribe=unknown + +:End +ECHO #define LIBLINPHONE_GIT_VERSION "%gitdescribe%" > liblinphone_gitversion.h + + +FOR /F "delims=" %%a IN ('findstr /B AC_INIT ..\..\configure.ac') DO ( + FOR /F "tokens=1,2,3 delims=[,]" %%1 IN ("%%a") DO ( + ECHO #define LIBLINPHONE_VERSION "%%3" > config.h + ) +) diff --git a/FindLinphone.cmake b/cmake/FindLinphone.cmake similarity index 98% rename from FindLinphone.cmake rename to cmake/FindLinphone.cmake index 6c6871330..065e1c865 100644 --- a/FindLinphone.cmake +++ b/cmake/FindLinphone.cmake @@ -1,5 +1,5 @@ ############################################################################ -# FindLinphone.txt +# FindLinphone.cmake # Copyright (C) 2014 Belledonne Communications, Grenoble France # ############################################################################ @@ -33,7 +33,7 @@ find_package(MS2 REQUIRED) find_package(XML2 REQUIRED) find_package(BelleSIP REQUIRED) -set(_LINPHONEROOT_PATHS +set(_LINPHONE_ROOT_PATHS ${WITH_LINPHONE} ${CMAKE_INSTALL_PREFIX} ) diff --git a/cmake/FindNotify.cmake b/cmake/FindNotify.cmake new file mode 100644 index 000000000..26bd5bac1 --- /dev/null +++ b/cmake/FindNotify.cmake @@ -0,0 +1,56 @@ +############################################################################ +# FindNotify.cmake +# Copyright (C) 2014 Belledonne Communications, Grenoble France +# +############################################################################ +# +# 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 2 +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################ +# +# - Find the notify include file and library +# +# NOTIFY_FOUND - system has linphone +# NOTIFY_INCLUDE_DIRS - the linphone include directory +# NOTIFY_LIBRARIES - The libraries needed to use linphone + +set(_NOTIFY_ROOT_PATHS + ${WITH_NOTIFY} + ${CMAKE_INSTALL_PREFIX} +) + +find_path(NOTIFY_INCLUDE_DIRS + NAMES libnotify/notify.h + HINTS _NOTIFY_ROOT_PATHS + PATH_SUFFIXES include +) + +if(NOTIFY_INCLUDE_DIRS) + set(HAVE_LIBNOTIFY_NOTIFY_H 1) +endif() + +find_library(NOTIFY_LIBRARIES + NAMES notify + HINTS ${_NOTIFY_ROOT_PATHS} + PATH_SUFFIXES bin lib +) + +include(FindPackageHandleStandardArgs) +find_package_handle_standard_args(Notify + DEFAULT_MSG + NOTIFY_INCLUDE_DIRS NOTIFY_LIBRARIES HAVE_LIBNOTIFY_NOTIFY_H +) + +mark_as_advanced(NOTIFY_INCLUDE_DIRS NOTIFY_LIBRARIES HAVE_LIBNOTIFY_NOTIFY_H) diff --git a/config.h.cmake b/config.h.cmake index f348cf3f9..9690bff27 100644 --- a/config.h.cmake +++ b/config.h.cmake @@ -26,7 +26,16 @@ #define LINPHONE_VERSION "${LINPHONE_VERSION}" #define LIBLINPHONE_VERSION "${LINPHONE_VERSION}" +#define LINPHONE_ALL_LANGS "${LINPHONE_ALL_LANGS}" + #define LINPHONE_PLUGINS_DIR "${LINPHONE_PLUGINS_DIR}" + +#define GETTEXT_PACKAGE "${GETTEXT_PACKAGE}" + #define PACKAGE_LOCALE_DIR "${PACKAGE_LOCALE_DIR}" #define PACKAGE_DATA_DIR "${PACKAGE_DATA_DIR}" #define PACKAGE_SOUND_DIR "${PACKAGE_SOUND_DIR}" + +#cmakedefine HAVE_NOTIFY4 +#cmakedefine HAVE_CU_GET_SUITE 1 +#cmakedefine HAVE_CU_CURSES 1 \ No newline at end of file diff --git a/configure.ac b/configure.ac index 54cd5f65e..eea267abe 100644 --- a/configure.ac +++ b/configure.ac @@ -330,7 +330,6 @@ if test "$gtk_ui" = "true" ; then AC_DEFINE([HAVE_NOTIFY1],[1],[NOTIFY1 support]) esac else - NotifyNotification *n; echo "Libnotify support is disabled." fi fi diff --git a/coreapi/CMakeLists.txt b/coreapi/CMakeLists.txt index 8ed8185ab..cb417a612 100644 --- a/coreapi/CMakeLists.txt +++ b/coreapi/CMakeLists.txt @@ -31,6 +31,7 @@ set(SOURCE_FILES authentication.c bellesip_sal/sal_address_impl.c bellesip_sal/sal_impl.c + bellesip_sal/sal_impl.h bellesip_sal/sal_op_call.c bellesip_sal/sal_op_call_transfer.c bellesip_sal/sal_op_events.c @@ -46,41 +47,45 @@ set(SOURCE_FILES call_params.c chat.c conference.c + contactprovider.c + content.c + dict.c ec-calibrator.c enum.c + enum.h event.c + event.h friend.c info.c + ldap/ldapprovider.c linphonecall.c linphonecore.c + linphonecore.h + linphonecore_utils.h + linphonefriend.h linphone_tunnel_config.c + linphone_tunnel.h + localplayer.c lpconfig.c + lpconfig.h lsd.c message_storage.c misc.c offeranswer.c + offeranswer.h player.c presence.c + private.h proxy.c quality_reporting.c remote_provisioning.c sal.c siplogin.c sipsetup.c - xml.c - xml2lpc.c - bellesip_sal/sal_impl.h - enum.h - event.h - linphonecore.h - linphonecore_utils.h - linphonefriend.h - linphone_tunnel.h - lpconfig.h - offeranswer.h - private.h sipsetup.h + xml2lpc.c xml2lpc.h + xml.c ) if(ENABLE_TUNNEL) list(APPEND SOURCE_FILES @@ -101,15 +106,10 @@ add_custom_command(OUTPUT ${CMAKE_CURRENT_BINARY_DIR}/liblinphone_gitversion.h COMMAND ${CMAKE_COMMAND} -DGIT_EXECUTABLE=${GIT_EXECUTABLE} -DWORK_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DOUTPUT_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/gitversion.cmake) add_definitions( - -DIN_LINPHONE -DUSE_BELLESIP -DLIBLINPHONE_EXPORTS ) -if(ENABLE_VIDEO) - add_definitions(-DVIDEO_ENABLED) -endif() - set(LIBS ${LIBGCC} ${LIBMINGWEX} @@ -152,6 +152,7 @@ install(TARGETS linphone set(HEADER_FILES call_log.h call_params.h + content.h event.h linphonecore.h linphonecore_utils.h diff --git a/coreapi/Makefile.am b/coreapi/Makefile.am index e2a6beb4f..f7d163749 100644 --- a/coreapi/Makefile.am +++ b/coreapi/Makefile.am @@ -24,45 +24,61 @@ CLEANFILES=$(GITVERSION_FILE) ## Process this file with automake to produce Makefile.in linphone_includedir=$(includedir)/linphone -linphone_include_HEADERS=linphonecore.h linphonefriend.h linphonepresence.h linphonecore_utils.h lpconfig.h sipsetup.h event.h xml2lpc.h lpc2xml.h linphone_tunnel.h call_log.h call_params.h +linphone_include_HEADERS=\ + call_log.h \ + call_params.h \ + content.h \ + event.h \ + linphonecore.h \ + linphonecore_utils.h \ + linphonefriend.h \ + linphonepresence.h \ + linphone_tunnel.h \ + lpc2xml.h \ + lpconfig.h \ + sipsetup.h \ + xml2lpc.h lib_LTLIBRARIES=liblinphone.la liblinphone_la_SOURCES=\ - linphonecore.c linphonecore.h private.h\ - offeranswer.c offeranswer.h\ - sal.c \ - callbacks.c \ - misc.c \ address.c \ - enum.c enum.h \ - presence.c \ - proxy.c \ - friend.c \ authentication.c \ - lpconfig.c lpconfig.h \ - chat.c \ - linphonecall.c \ - sipsetup.c sipsetup.h \ - siplogin.c \ - lsd.c linphonecore_utils.h \ - ec-calibrator.c \ - conference.c \ - message_storage.c \ - info.c \ - event.c event.h \ - contactprovider.c contactprovider.h contact_providers_priv.h \ - ldap/ldapprovider.c ldap/ldapprovider.h \ - dict.c \ - xml.c \ - xml2lpc.c \ - lpc2xml.c \ - remote_provisioning.c \ - quality_reporting.c quality_reporting.h\ + callbacks.c \ call_log.c \ call_params.c \ + chat.c \ + conference.c \ + contactprovider.c contactprovider.h contact_providers_priv.h \ + content.c \ + dict.c \ + ec-calibrator.c \ + enum.c enum.h \ + event.c event.h \ + friend.c \ + info.c \ + ldap/ldapprovider.c ldap/ldapprovider.h \ + linphonecall.c \ + linphonecore.c linphonecore.h \ + linphonecore_utils.h \ + localplayer.c \ + lpc2xml.c \ + lpconfig.c lpconfig.h \ + lsd.c \ + message_storage.c \ + misc.c \ + offeranswer.c offeranswer.h\ player.c \ - fileplayer.c \ + presence.c \ + private.h \ + proxy.c \ + quality_reporting.c quality_reporting.h\ + remote_provisioning.c \ + sal.c \ + siplogin.c \ + sipsetup.c sipsetup.h \ + xml2lpc.c \ + xml.c \ $(GITVERSION_FILE) if BUILD_UPNP diff --git a/coreapi/TunnelManager.cc b/coreapi/TunnelManager.cc index a0158a88a..53d7f288f 100644 --- a/coreapi/TunnelManager.cc +++ b/coreapi/TunnelManager.cc @@ -97,32 +97,16 @@ RtpTransport *TunnelManager::createRtpTransport(int port){ void TunnelManager::startClient() { ms_message("TunnelManager: Starting tunnel client"); - if (mTunnelClient == NULL) { - mTunnelClient = new TunnelClient(); - mTunnelClient->setCallback((TunnelClientController::StateCallback)tunnelCallback,this); - list::iterator it; - for(it=mServerAddrs.begin();it!=mServerAddrs.end();++it){ - const ServerAddr &addr=*it; - mTunnelClient->addServer(addr.mAddr.c_str(), addr.mPort); - } - mTunnelClient->setHttpProxy(mHttpProxyHost.c_str(), mHttpProxyPort, mHttpUserName.c_str(), mHttpPasswd.c_str()); + mTunnelClient = new TunnelClient(); + mTunnelClient->setCallback((TunnelClientController::StateCallback)tunnelCallback,this); + list::iterator it; + for(it=mServerAddrs.begin();it!=mServerAddrs.end();++it){ + const ServerAddr &addr=*it; + mTunnelClient->addServer(addr.mAddr.c_str(), addr.mPort); } + mTunnelClient->setHttpProxy(mHttpProxyHost.c_str(), mHttpProxyPort, mHttpUserName.c_str(), mHttpPasswd.c_str()); mTunnelClient->start(); - linphone_core_set_rtp_transport_factories(mCore,&mTransportFactories); - if(mTunnelizeSipPackets) { - sal_enable_tunnel(mCore->sal, mTunnelClient); - } - mConnecting = true; -} - -void TunnelManager::stopClient(){ - ms_message("TunnelManager: Stopping tunnel client"); - linphone_core_set_rtp_transport_factories(mCore,NULL); - sal_disable_tunnel(mCore->sal); - if (mTunnelClient){ - delete mTunnelClient; - mTunnelClient=NULL; - } + sal_set_tunnel(mCore->sal, mTunnelClient); } bool TunnelManager::isConnected() const { @@ -151,9 +135,7 @@ TunnelManager::TunnelManager(LinphoneCore* lc) : mExosipTransport(NULL), #endif mMode(LinphoneTunnelModeDisable), - mAutoDetecting(false), - mConnecting(false), - mScheduledRegistration(false), + mState(disabled), mTunnelizeSipPackets(true), mTunnelClient(NULL), mHttpProxyPort(0), @@ -168,7 +150,7 @@ TunnelManager::TunnelManager(LinphoneCore* lc) : mTransportFactories.video_rtcp_func_data=this; mTransportFactories.video_rtp_func=sCreateRtpTransport; mTransportFactories.video_rtp_func_data=this; - mVTable = linphone_vtable_new(); + mVTable = linphone_core_v_table_new(); mVTable->network_reachable = networkReachableCb; linphone_core_add_listener(mCore, mVTable); } @@ -177,62 +159,93 @@ TunnelManager::~TunnelManager(){ for(UdpMirrorClientList::iterator udpMirror = mUdpMirrorClients.begin(); udpMirror != mUdpMirrorClients.end(); udpMirror++) { udpMirror->stop(); } - stopClient(); + if(mTunnelClient) delete mTunnelClient; linphone_core_remove_listener(mCore, mVTable); - linphone_vtable_destroy(mVTable); + linphone_core_v_table_destroy(mVTable); } void TunnelManager::doRegistration(){ - if(mTunnelizeSipPackets) { - LinphoneProxyConfig* lProxy; - linphone_core_get_default_proxy(mCore, &lProxy); - if (lProxy) { - ms_message("TunnelManager: need to register"); - if(linphone_proxy_config_get_state(lProxy) != LinphoneRegistrationProgress) { - linphone_proxy_config_refresh_register(lProxy); - mScheduledRegistration = false; - } else { - ms_warning("TunnelManager: register difered. There is already a registration in progress"); - mScheduledRegistration = true; - } - } else { - mScheduledRegistration = false; - } + LinphoneProxyConfig* lProxy; + linphone_core_get_default_proxy(mCore, &lProxy); + if (lProxy) { + ms_message("TunnelManager: New registration"); + lProxy->commit = TRUE; + } +} + +void TunnelManager::doUnregistration() { + LinphoneProxyConfig *lProxy; + linphone_core_get_default_proxy(mCore, &lProxy); + if(lProxy) { + _linphone_proxy_config_unregister(lProxy); } } void TunnelManager::processTunnelEvent(const Event &ev){ if (ev.mData.mConnected){ - ms_message("Tunnel is connected"); - doRegistration(); + ms_message("TunnelManager: tunnel is connected"); + if(mState == connecting) { + linphone_core_set_rtp_transport_factories(mCore,&mTransportFactories); + mState = ready; + if(mTunnelizeSipPackets) { + doUnregistration(); + _linphone_core_apply_transports(mCore); + doRegistration(); + } + + } } else { - ms_error("Tunnel has been disconnected"); + ms_error("TunnelManager: tunnel has been disconnected"); } - mConnecting = false; } void TunnelManager::setMode(LinphoneTunnelMode mode) { - if(mMode != mode) { - ms_message("TunnelManager: Switching mode from %s to %s", - tunnel_mode_to_string(mMode), - tunnel_mode_to_string(mode)); - switch(mode) { - case LinphoneTunnelModeEnable: - mMode = mode; + if(mMode == mode) return; + if((mode==LinphoneTunnelModeDisable && mState==disabled) + || (mode==LinphoneTunnelModeEnable && mState==ready)) { + return; + } + ms_message("TunnelManager: switching mode from %s to %s", + tunnel_mode_to_string(mMode), + tunnel_mode_to_string(mode)); + switch(mode) { + case LinphoneTunnelModeEnable: + if(mState == disabled) { startClient(); - break; - case LinphoneTunnelModeDisable: + mState = connecting; mMode = mode; - stopClient(); - doRegistration(); - break; - case LinphoneTunnelModeAuto: - mMode = mode; - autoDetect(); - break; - default: - ms_error("TunnelManager::setMode(): invalid mode (%d)", mode); + } else { + ms_error("TunnelManager: could not change mode. Bad state"); } + break; + case LinphoneTunnelModeDisable: + if(mState == ready) { + linphone_core_set_rtp_transport_factories(mCore,NULL); + mState = disabled; + mMode = mode; + if(mTunnelizeSipPackets) { + doUnregistration(); + _linphone_core_apply_transports(mCore); + } + sal_set_tunnel(mCore->sal,NULL); + delete mTunnelClient; + mTunnelClient=NULL; + } else { + ms_error("TunnelManager: could not change mode. Bad state"); + } + break; + case LinphoneTunnelModeAuto: + if(mState == disabled || mState == ready) { + if(startAutoDetection()) { + mState = autodetecting; + mMode = mode; + } + } else { + ms_error("TunnelManager: could not change mode. Bad state"); + } + break; + default: + ms_error("TunnelManager::setMode(): invalid mode (%d)", mode); } } @@ -244,10 +257,6 @@ void TunnelManager::tunnelCallback(bool connected, TunnelManager *zis){ } void TunnelManager::onIterate(){ - if(mScheduledRegistration) { - ms_message("Apply difered registration"); - doRegistration(); - } mMutex.lock(); while(!mEvq.empty()){ Event ev=mEvq.front(); @@ -313,22 +322,31 @@ LinphoneTunnelMode TunnelManager::getMode() const { } void TunnelManager::processUdpMirrorEvent(const Event &ev){ + if(mState != autodetecting) return; if (ev.mData.mHaveUdp) { - ms_message("TunnelManager: auto detection test succeed"); - stopClient(); - doRegistration(); - mAutoDetecting = false; + ms_message("TunnelManager: UDP mirror test succeed"); + if(mTunnelClient) { + if(mTunnelizeSipPackets) doUnregistration(); + delete mTunnelClient; + mTunnelClient = NULL; + if(mTunnelizeSipPackets) doRegistration(); + } + mState = disabled; } else { - ms_message("TunnelManager: auto detection test failed"); + ms_message("TunnelManager: UDP mirror test failed"); mCurrentUdpMirrorClient++; if (mCurrentUdpMirrorClient !=mUdpMirrorClients.end()) { - ms_message("TunnelManager: trying another udp mirror"); + ms_message("TunnelManager: trying another UDP mirror"); UdpMirrorClient &lUdpMirrorClient=*mCurrentUdpMirrorClient; lUdpMirrorClient.start(TunnelManager::sUdpMirrorClientCallback,(void*)this); } else { - ms_message("TunnelManager: all auto detection failed. Need ti enable tunnel"); - startClient(); - mAutoDetecting = false; + ms_message("TunnelManager: all UDP mirror tests failed"); + if(mTunnelClient==NULL) { + startClient(); + mState = connecting; + } else { + mState = ready; + } } } } @@ -349,24 +367,34 @@ void TunnelManager::sUdpMirrorClientCallback(bool isUdpAvailable, void* data) { void TunnelManager::networkReachableCb(LinphoneCore *lc, bool_t reachable) { TunnelManager *tunnel = bcTunnel(linphone_core_get_tunnel(lc)); - if(reachable && tunnel->getMode() == LinphoneTunnelModeAuto) { - tunnel->autoDetect(); + if(reachable && tunnel->getMode() == LinphoneTunnelModeAuto && tunnel->mState != connecting && tunnel->mState != autodetecting) { + tunnel->startAutoDetection(); + tunnel->mState = autodetecting; } } -void TunnelManager::autoDetect() { - if(mAutoDetecting) { - ms_error("TunnelManager: Cannot start auto detection. One auto detection is going on"); - return; - } +bool TunnelManager::startAutoDetection() { if (mUdpMirrorClients.empty()) { ms_error("TunnelManager: No UDP mirror server configured aborting auto detection"); - return; + return false; } + ms_message("TunnelManager: Starting auto-detection"); mCurrentUdpMirrorClient = mUdpMirrorClients.begin(); UdpMirrorClient &lUdpMirrorClient=*mCurrentUdpMirrorClient; lUdpMirrorClient.start(TunnelManager::sUdpMirrorClientCallback,(void*)this); - mAutoDetecting = true; + return true; +} + +bool TunnelManager::isActivated() const{ + switch(getMode()){ + case LinphoneTunnelModeAuto: + return !(mState==disabled); + case LinphoneTunnelModeDisable: + return false; + case LinphoneTunnelModeEnable: + return true; + } + return false; } void TunnelManager::setHttpProxyAuthInfo(const char* username,const char* passwd) { @@ -376,7 +404,7 @@ void TunnelManager::setHttpProxyAuthInfo(const char* username,const char* passwd } void TunnelManager::tunnelizeSipPackets(bool enable){ - mTunnelizeSipPackets = enable; + mTunnelizeSipPackets = enable; } bool TunnelManager::tunnelizeSipPacketsEnabled() const { diff --git a/coreapi/TunnelManager.hh b/coreapi/TunnelManager.hh index 9b1a4c3a9..0af89fce9 100644 --- a/coreapi/TunnelManager.hh +++ b/coreapi/TunnelManager.hh @@ -142,7 +142,15 @@ namespace belledonnecomm { */ bool isConnected() const; + bool isActivated() const; private: + enum State { + disabled, + connecting, + ready, + autodetecting + }; + enum EventType{ UdpMirrorClientEvent, TunnelEvent, @@ -168,9 +176,9 @@ namespace belledonnecomm { private: void onIterate(); void doRegistration(); + void doUnregistration(); void startClient(); - void stopClient(); - void autoDetect(); + bool startAutoDetection(); void processTunnelEvent(const Event &ev); void processUdpMirrorEvent(const Event &ev); void postEvent(const Event &ev); @@ -178,9 +186,7 @@ namespace belledonnecomm { private: LinphoneCore* mCore; LinphoneTunnelMode mMode; - bool mAutoDetecting; - bool mConnecting; - bool mScheduledRegistration; + State mState; bool mTunnelizeSipPackets; TunnelClient* mTunnelClient; std::string mHttpUserName; @@ -194,10 +200,6 @@ namespace belledonnecomm { LinphoneRtpTransportFactories mTransportFactories; Mutex mMutex; std::queue mEvq; -#ifndef USE_BELLESIP - TunnelSocket *mSipSocket; - eXosip_transport_hooks_t mExosipTransport; -#endif }; /** diff --git a/coreapi/address.c b/coreapi/address.c index 250026911..6530551ea 100644 --- a/coreapi/address.c +++ b/coreapi/address.c @@ -201,6 +201,37 @@ int linphone_address_get_port(const LinphoneAddress *u) { return sal_address_get_port(u); } +/** + * Set the password encoded in the address. + * It is used for basic authentication (not recommended). + * @param addr the LinphoneAddress + * @param passwd the password to set. +**/ +void linphone_address_set_password(LinphoneAddress *addr, const char *passwd){ + sal_address_set_password(addr,passwd); +} + +/** + * Get the password encoded in the address. + * It is used for basic authentication (not recommended). + * @param addr the address + * @return the password, if any, NULL otherwise. +**/ +const char *linphone_address_get_password(const LinphoneAddress *addr){ + return sal_address_get_password(addr); +} + +/** + * Set a header into the address. + * Headers appear in the URI with '?', such as . + * @param addr the address + * @param header_name the header name + * @param header_value the header value +**/ +void linphone_address_set_header(LinphoneAddress *addr, const char *header_name, const char *header_value){ + sal_address_set_header(addr,header_name,header_value); +} + LinphoneAddress * linphone_core_create_address(LinphoneCore *lc, const char *address) { return linphone_address_new(address); } diff --git a/coreapi/bellesip_sal/sal_address_impl.c b/coreapi/bellesip_sal/sal_address_impl.c index 024b83264..c4ff234d7 100644 --- a/coreapi/bellesip_sal/sal_address_impl.c +++ b/coreapi/bellesip_sal/sal_address_impl.c @@ -39,10 +39,13 @@ SalAddress * sal_address_clone(const SalAddress *addr){ const char *sal_address_get_scheme(const SalAddress *addr){ belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr); belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr); + belle_generic_uri_t* generic_uri = belle_sip_header_address_get_absolute_uri(header_addr); if (uri) { if (belle_sip_uri_is_secure(uri)) return "sips"; else return "sip"; - } else + } else if (generic_uri) + return belle_generic_uri_get_scheme(generic_uri); + else return NULL; } @@ -114,6 +117,14 @@ void sal_address_set_username(SalAddress *addr, const char *username){ SAL_ADDRESS_SET(addr,user,username); } +void sal_address_set_password(SalAddress *addr, const char *passwd){ + SAL_ADDRESS_SET(addr,user_password,passwd); +} + +const char* sal_address_get_password(const SalAddress *addr){ + SAL_ADDRESS_GET(addr,user_password); +} + void sal_address_set_domain(SalAddress *addr, const char *host){ SAL_ADDRESS_SET(addr,host,host); } @@ -142,10 +153,21 @@ char *sal_address_as_string(const SalAddress *addr){ char *sal_address_as_string_uri_only(const SalAddress *addr){ belle_sip_header_address_t* header_addr = BELLE_SIP_HEADER_ADDRESS(addr); - belle_sip_uri_t* uri = belle_sip_header_address_get_uri(header_addr); + belle_sip_uri_t* sip_uri = belle_sip_header_address_get_uri(header_addr); + belle_generic_uri_t* absolute_uri = belle_sip_header_address_get_absolute_uri(header_addr); char tmp[1024]={0}; size_t off=0; - belle_sip_object_marshal((belle_sip_object_t*)uri,tmp,sizeof(tmp),&off); + belle_sip_object_t* uri; + + if (sip_uri) { + uri=(belle_sip_object_t*)sip_uri; + } else if (absolute_uri) { + uri=(belle_sip_object_t*)absolute_uri; + } else { + ms_error("Cannot generate string for addr [%p] with null uri",addr); + return NULL; + } + belle_sip_object_marshal(uri,tmp,sizeof(tmp),&off); return ms_strdup(tmp); } @@ -166,6 +188,10 @@ void sal_address_set_uri_params(SalAddress *addr, const char *params){ belle_sip_parameters_set(parameters,params); } +void sal_address_set_header(SalAddress *addr, const char *header_name, const char *header_value){ + belle_sip_uri_set_header(belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(addr)),header_name, header_value); +} + void sal_address_set_transport(SalAddress* addr,SalTransport transport){ if (!sal_address_is_secure(addr)){ SAL_ADDRESS_SET(addr,transport_param,sal_transport_to_string(transport)); diff --git a/coreapi/bellesip_sal/sal_impl.c b/coreapi/bellesip_sal/sal_impl.c index 6c2e84483..7cb02eeeb 100644 --- a/coreapi/bellesip_sal/sal_impl.c +++ b/coreapi/bellesip_sal/sal_impl.c @@ -204,7 +204,7 @@ static void process_request_event(void *ud, const belle_sip_request_event_t *eve belle_sip_request_t* req = belle_sip_request_event_get_request(event); belle_sip_dialog_t* dialog=belle_sip_request_event_get_dialog(event); belle_sip_header_address_t* origin_address; - belle_sip_header_address_t* address; + belle_sip_header_address_t* address=NULL; belle_sip_header_from_t* from_header; belle_sip_header_to_t* to; belle_sip_response_t* resp; @@ -266,8 +266,14 @@ static void process_request_event(void *ud, const belle_sip_request_event_t *eve } if (!op->base.from_address) { - address=belle_sip_header_address_create(belle_sip_header_address_get_displayname(BELLE_SIP_HEADER_ADDRESS(from_header)) - ,belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(from_header))); + if (belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(from_header))) + address=belle_sip_header_address_create(belle_sip_header_address_get_displayname(BELLE_SIP_HEADER_ADDRESS(from_header)) + ,belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(from_header))); + else if ((belle_sip_header_address_get_absolute_uri(BELLE_SIP_HEADER_ADDRESS(from_header)))) + address=belle_sip_header_address_create2(belle_sip_header_address_get_displayname(BELLE_SIP_HEADER_ADDRESS(from_header)) + ,belle_sip_header_address_get_absolute_uri(BELLE_SIP_HEADER_ADDRESS(from_header))); + else + ms_error("Cannot not find from uri from request [%p]",req); sal_op_set_from_address(op,(SalAddress*)address); belle_sip_object_unref(address); } @@ -278,8 +284,15 @@ static void process_request_event(void *ud, const belle_sip_request_event_t *eve if (!op->base.to_address) { to=belle_sip_message_get_header_by_type(BELLE_SIP_MESSAGE(req),belle_sip_header_to_t); - address=belle_sip_header_address_create(belle_sip_header_address_get_displayname(BELLE_SIP_HEADER_ADDRESS(to)) - ,belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(to))); + if (belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(to))) + address=belle_sip_header_address_create(belle_sip_header_address_get_displayname(BELLE_SIP_HEADER_ADDRESS(to)) + ,belle_sip_header_address_get_uri(BELLE_SIP_HEADER_ADDRESS(to))); + else if ((belle_sip_header_address_get_absolute_uri(BELLE_SIP_HEADER_ADDRESS(to)))) + address=belle_sip_header_address_create2(belle_sip_header_address_get_displayname(BELLE_SIP_HEADER_ADDRESS(to)) + ,belle_sip_header_address_get_absolute_uri(BELLE_SIP_HEADER_ADDRESS(to))); + else + ms_error("Cannot not find to uri from request [%p]",req); + sal_op_set_to_address(op,(SalAddress*)address); belle_sip_object_unref(address); } @@ -554,19 +567,29 @@ int sal_transport_available(Sal *sal, SalTransport t){ return FALSE; } -int sal_add_listen_port(Sal *ctx, SalAddress* addr){ +static int sal_add_listen_port(Sal *ctx, SalAddress* addr, bool_t is_tunneled){ int result; - belle_sip_listening_point_t* lp = belle_sip_stack_create_listening_point(ctx->stack, + belle_sip_listening_point_t* lp; + if (is_tunneled){ +#ifdef TUNNEL_ENABLED + if (sal_address_get_transport(addr)!=SalTransportUDP){ + ms_error("Tunneled mode is only available for UDP kind of transports."); + return -1; + } + lp = belle_sip_tunnel_listening_point_new(ctx->stack, ctx->tunnel_client); + if (!lp){ + ms_error("Could not create tunnel listening point."); + return -1; + } +#else + ms_error("No tunnel support in library."); + return -1; +#endif + }else{ + lp = belle_sip_stack_create_listening_point(ctx->stack, sal_address_get_domain(addr), sal_address_get_port(addr), sal_transport_to_string(sal_address_get_transport(addr))); - if (sal_address_get_port(addr)==-1 && lp==NULL){ - int random_port=(0xDFFF&ortp_random())+1024; - ms_warning("This version of belle-sip doesn't support random port, choosing one here."); - lp = belle_sip_stack_create_listening_point(ctx->stack, - sal_address_get_domain(addr), - random_port, - sal_transport_to_string(sal_address_get_transport(addr))); } if (lp) { belle_sip_listening_point_set_keep_alive(lp,ctx->keep_alive); @@ -578,13 +601,13 @@ int sal_add_listen_port(Sal *ctx, SalAddress* addr){ return result; } -int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure) { +int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_tunneled) { SalAddress* sal_addr = sal_address_new(NULL); int result; sal_address_set_domain(sal_addr,addr); sal_address_set_port(sal_addr,port); sal_address_set_transport(sal_addr,tr); - result = sal_add_listen_port(ctx,sal_addr); + result = sal_add_listen_port(ctx, sal_addr, is_tunneled); sal_address_destroy(sal_addr); return result; } @@ -646,43 +669,15 @@ void sal_set_keepalive_period(Sal *ctx,unsigned int value){ } } } -int sal_enable_tunnel(Sal *ctx, void *tunnelclient) { +int sal_set_tunnel(Sal *ctx, void *tunnelclient) { #ifdef TUNNEL_ENABLED - belle_sip_listening_point_t *lp_udp = NULL; - if(ctx->lp_tunnel != NULL) { - ortp_error("sal_enable_tunnel(): tunnel is already enabled"); - return -1; - } - while((lp_udp = belle_sip_provider_get_listening_point(ctx->prov, "udp")) != NULL) { - belle_sip_object_ref(lp_udp); - belle_sip_provider_remove_listening_point(ctx->prov, lp_udp); - ctx->udp_listening_points = ms_list_append(ctx->udp_listening_points, lp_udp); - } - ctx->lp_tunnel = belle_sip_tunnel_listening_point_new(ctx->stack, tunnelclient); - if(ctx->lp_tunnel == NULL) return -1; - belle_sip_listening_point_set_keep_alive(ctx->lp_tunnel, ctx->keep_alive); - belle_sip_provider_add_listening_point(ctx->prov, ctx->lp_tunnel); - belle_sip_object_ref(ctx->lp_tunnel); + ctx->tunnel_client=tunnelclient; return 0; #else - return 0; -#endif -} -void sal_disable_tunnel(Sal *ctx) { -#ifdef TUNNEL_ENABLED - MSList *it; - if(ctx->lp_tunnel) { - belle_sip_provider_remove_listening_point(ctx->prov, ctx->lp_tunnel); - belle_sip_object_unref(ctx->lp_tunnel); - ctx->lp_tunnel = NULL; - for(it=ctx->udp_listening_points; it!=NULL; it=it->next) { - belle_sip_provider_add_listening_point(ctx->prov, (belle_sip_listening_point_t *)it->data); - } - ms_list_free_with_data(ctx->udp_listening_points, belle_sip_object_unref); - ctx->udp_listening_points = NULL; - } + return -1; #endif } + /** * returns keepalive period in ms * 0 desactiaved @@ -953,7 +948,7 @@ static void make_supported_header(Sal *sal){ char *alltags=NULL; size_t buflen=64; size_t written=0; - + if (sal->supported){ belle_sip_object_unref(sal->supported); sal->supported=NULL; @@ -1003,7 +998,7 @@ void sal_add_supported_tag(Sal *ctx, const char* tag){ ctx->supported_tags=ms_list_append(ctx->supported_tags,ms_strdup(tag)); make_supported_header(ctx); } - + } void sal_remove_supported_tag(Sal *ctx, const char* tag){ @@ -1082,6 +1077,10 @@ unsigned char * sal_get_random_bytes(unsigned char *ret, size_t size){ return belle_sip_random_bytes(ret,size); } +char *sal_get_random_token(int size){ + return belle_sip_random_token(ms_malloc(size),size); +} + unsigned int sal_get_random(void){ unsigned int ret=0; belle_sip_random_bytes((unsigned char*)&ret,4); @@ -1101,3 +1100,7 @@ void sal_enable_sip_update_method(Sal *ctx,bool_t value) { ctx->enable_sip_update=value; } +void sal_default_enable_sdp_removal(Sal *sal, bool_t enable) { + if (enable) ms_message("Enabling SDP removal feature by default for all new SalOp in Sal[%p]!", sal); + sal->default_sdp_removal = enable; +} diff --git a/coreapi/bellesip_sal/sal_impl.h b/coreapi/bellesip_sal/sal_impl.h index 07124feb3..21aeadc74 100644 --- a/coreapi/bellesip_sal/sal_impl.h +++ b/coreapi/bellesip_sal/sal_impl.h @@ -33,8 +33,7 @@ struct Sal{ belle_sip_provider_t *prov; belle_sip_header_user_agent_t* user_agent; belle_sip_listener_t *listener; - belle_sip_listening_point_t *lp_tunnel; - MSList *udp_listening_points; + void *tunnel_client; void *up; /*user pointer*/ int session_expires; unsigned int keep_alive; @@ -53,6 +52,7 @@ struct Sal{ bool_t enable_test_features; bool_t no_initial_route; bool_t enable_sip_update; /*true by default*/ + bool_t default_sdp_removal; }; typedef enum SalOpState { @@ -107,6 +107,7 @@ struct SalOp{ bool_t call_released; bool_t manual_refresher; bool_t has_auth_pending; + bool_t sdp_removal; /* do not add SDP in outgoing INVITE and remove it from incoming INVITE */ int auth_requests; /*number of auth requested for this op*/ }; diff --git a/coreapi/bellesip_sal/sal_op_call.c b/coreapi/bellesip_sal/sal_op_call.c index bf352d1b4..c2e9a4a64 100644 --- a/coreapi/bellesip_sal/sal_op_call.c +++ b/coreapi/bellesip_sal/sal_op_call.c @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "sal_impl.h" #include "offeranswer.h" -static int extract_sdp(belle_sip_message_t* message,belle_sdp_session_description_t** session_desc, SalReason *error); +static int extract_sdp(SalOp* op,belle_sip_message_t* message,belle_sdp_session_description_t** session_desc, SalReason *error); /*used for calls terminated before creation of a dialog*/ static void call_set_released(SalOp* op){ @@ -41,7 +41,12 @@ static void sdp_process(SalOp *h){ ms_message("Doing SDP offer/answer process of type %s",h->sdp_offering ? "outgoing" : "incoming"); if (h->result){ sal_media_description_unref(h->result); + h->result = NULL; } + + /* if SDP was invalid */ + if (h->base.remote_media == NULL) return; + h->result=sal_media_description_new(); if (h->sdp_offering){ offer_answer_initiate_outgoing(h->base.local_media,h->base.remote_media,h->result); @@ -75,22 +80,33 @@ static void sdp_process(SalOp *h){ static int set_sdp(belle_sip_message_t *msg,belle_sdp_session_description_t* session_desc) { belle_sip_header_content_type_t* content_type ; belle_sip_header_content_length_t* content_length; - belle_sip_error_code error = BELLE_SIP_OK; + belle_sip_error_code error = BELLE_SIP_BUFFER_OVERFLOW; size_t length = 0; - char buff[2048]; if (session_desc) { + size_t bufLen = 2048; + size_t hardlimit = 16*1024; /* 16k SDP limit seems reasonable */ + char* buff = belle_sip_malloc(bufLen); content_type = belle_sip_header_content_type_create("application","sdp"); - error = belle_sip_object_marshal(BELLE_SIP_OBJECT(session_desc),buff,sizeof(buff),&length); - if (error != BELLE_SIP_OK) { - ms_error("Buffer too small or sdp too big"); + + /* try to marshal the description. This could go higher than 2k so we iterate */ + while( error != BELLE_SIP_OK && bufLen <= hardlimit && buff != NULL){ + error = belle_sip_object_marshal(BELLE_SIP_OBJECT(session_desc),buff,bufLen,&length); + if( error != BELLE_SIP_OK ){ + bufLen *= 2; + buff = belle_sip_realloc(buff,bufLen); + } + } + /* give up if hard limit reached */ + if (error != BELLE_SIP_OK || buff == NULL) { + ms_error("Buffer too small (%d) or not enough memory, giving up SDP", (int)bufLen); return -1; } - content_length= belle_sip_header_content_length_create(length); + content_length = belle_sip_header_content_length_create(length); belle_sip_message_add_header(msg,BELLE_SIP_HEADER(content_type)); belle_sip_message_add_header(msg,BELLE_SIP_HEADER(content_length)); - belle_sip_message_set_body(msg,buff,length); + belle_sip_message_assign_body(msg,buff,length); return 0; } else { return -1; @@ -151,13 +167,14 @@ static void handle_sdp_from_response(SalOp* op,belle_sip_response_t* response) { sal_media_description_unref(op->base.remote_media); op->base.remote_media=NULL; } - if (extract_sdp(BELLE_SIP_MESSAGE(response),&sdp,&reason)==0) { + if (extract_sdp(op,BELLE_SIP_MESSAGE(response),&sdp,&reason)==0) { if (sdp){ op->base.remote_media=sal_media_description_new(); sdp_to_media_description(sdp,op->base.remote_media); - if (op->base.local_media) sdp_process(op); }/*if no sdp in response, what can we do ?*/ } + /* process sdp in any case to reset result media description*/ + if (op->base.local_media) sdp_process(op); } static void cancelling_invite(SalOp* op ){ @@ -319,7 +336,7 @@ static void call_process_transaction_terminated(void *user_ctx, const belle_sip_ belle_sip_request_t* req; belle_sip_response_t* resp; bool_t release_call=FALSE; - + if (client_transaction) { req=belle_sip_transaction_get_request(BELLE_SIP_TRANSACTION(client_transaction)); resp=belle_sip_transaction_get_response(BELLE_SIP_TRANSACTION(client_transaction)); @@ -367,8 +384,16 @@ static void unsupported_method(belle_sip_server_transaction_t* server_transactio * If body was present is not a SDP or parsing of SDP failed, -1 is returned and SalReason is set appropriately. * **/ -static int extract_sdp(belle_sip_message_t* message,belle_sdp_session_description_t** session_desc, SalReason *error) { +static int extract_sdp(SalOp *op, belle_sip_message_t* message,belle_sdp_session_description_t** session_desc, SalReason *error) { belle_sip_header_content_type_t* content_type=belle_sip_message_get_header_by_type(message,belle_sip_header_content_type_t); + + if (op&&op->sdp_removal){ + ms_error("Removed willingly SDP because sal_call_enable_sdp_removal was set to TRUE."); + *session_desc=NULL; + *error=SalReasonNotAcceptable; + return -1; + } + if (content_type){ if (strcmp("application",belle_sip_header_content_type_get_type(content_type))==0 && strcmp("sdp",belle_sip_header_content_type_get_subtype(content_type))==0) { @@ -398,7 +423,7 @@ static int process_sdp_for_invite(SalOp* op,belle_sip_request_t* invite) { belle_sdp_session_description_t* sdp; int err=0; SalReason reason; - if (extract_sdp(BELLE_SIP_MESSAGE(invite),&sdp,&reason)==0) { + if (extract_sdp(op,BELLE_SIP_MESSAGE(invite),&sdp,&reason)==0) { if (sdp){ op->sdp_offering=FALSE; op->base.remote_media=sal_media_description_new(); @@ -473,15 +498,15 @@ static void process_request_event(void *op_base, const belle_sip_request_event_t ms_warning("replace header already set"); } - process_sdp_for_invite(op,req); - - if ((call_info=belle_sip_message_get_header(BELLE_SIP_MESSAGE(req),"Call-Info"))) { - if( strstr(belle_sip_header_get_unparsed_value(call_info),"answer-after=") != NULL) { - op->auto_answer_asked=TRUE; - ms_message("The caller asked to automatically answer the call(Emergency?)\n"); + if (process_sdp_for_invite(op,req) == 0) { + if ((call_info=belle_sip_message_get_header(BELLE_SIP_MESSAGE(req),"Call-Info"))) { + if( strstr(belle_sip_header_get_unparsed_value(call_info),"answer-after=") != NULL) { + op->auto_answer_asked=TRUE; + ms_message("The caller asked to automatically answer the call(Emergency?)\n"); + } } + op->base.root->callbacks.call_received(op); } - op->base.root->callbacks.call_received(op); break; } /* else same behavior as for EARLY state*/ } @@ -521,7 +546,7 @@ static void process_request_event(void *op_base, const belle_sip_request_event_t if (strcmp("ACK",method)==0) { if (op->sdp_offering){ SalReason reason; - if (extract_sdp(BELLE_SIP_MESSAGE(req),&sdp,&reason)==0){ + if (extract_sdp(op,BELLE_SIP_MESSAGE(req),&sdp,&reason)==0){ if (sdp){ if (op->base.remote_media) sal_media_description_unref(op->base.remote_media); diff --git a/coreapi/bellesip_sal/sal_op_impl.c b/coreapi/bellesip_sal/sal_op_impl.c index ed18f52d0..1f734719f 100644 --- a/coreapi/bellesip_sal/sal_op_impl.c +++ b/coreapi/bellesip_sal/sal_op_impl.c @@ -18,7 +18,6 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #include "sal_impl.h" - /*create an operation */ SalOp * sal_op_new(Sal *sal){ SalOp *op=ms_new0(SalOp,1); @@ -26,6 +25,7 @@ SalOp * sal_op_new(Sal *sal){ op->type=SalOpUnknown; op->privacy=SalPrivacyNone; op->manual_refresher=FALSE;/*tells that requests with expiry (SUBSCRIBE, PUBLISH) will be automatically refreshed*/ + op->sdp_removal=sal->default_sdp_removal; sal_op_ref(op); return op; } @@ -103,6 +103,7 @@ belle_sip_header_contact_t* sal_op_create_contact(SalOp *op){ belle_sip_header_address_set_uri(BELLE_SIP_HEADER_ADDRESS(contact_header),contact_uri); } + belle_sip_uri_set_user_password(contact_uri,NULL); belle_sip_uri_set_secure(contact_uri,sal_op_is_secure(op)); if (op->privacy!=SalPrivacyNone){ belle_sip_uri_set_user(contact_uri,NULL); @@ -285,6 +286,7 @@ static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* req const MSList *elem=sal_op_get_route_addresses(op); const char *transport; const char *method=belle_sip_request_get_method(request); + belle_sip_listening_point_t *udplp=belle_sip_provider_get_listening_point(prov,"UDP"); if (elem) { outbound_proxy=belle_sip_header_address_get_uri((belle_sip_header_address_t*)elem->data); @@ -297,7 +299,7 @@ static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* req /*compatibility mode: by default it should be udp as not explicitely set and if no udp listening point is available, then use * the first available transport*/ if (!belle_sip_uri_is_secure(next_hop_uri)){ - if (belle_sip_provider_get_listening_point(prov,"UDP")==0){ + if (udplp==NULL){ if (belle_sip_provider_get_listening_point(prov,"TCP")!=NULL){ transport="tcp"; }else if (belle_sip_provider_get_listening_point(prov,"TLS")!=NULL ){ @@ -309,6 +311,13 @@ static int _sal_op_send_request_with_contact(SalOp* op, belle_sip_request_t* req belle_sip_uri_set_transport_param(next_hop_uri,transport); } } + }else{ +#ifdef TUNNEL_ENABLED + if (BELLE_SIP_OBJECT_IS_INSTANCE_OF(udplp,belle_sip_tunnel_listening_point_t)){ + /* our tunnel mode only supports UDP. Force transport to be set to UDP */ + belle_sip_uri_set_transport_param(next_hop_uri,"udp"); + } +#endif } if ((strcmp(method,"REGISTER")==0 || strcmp(method,"SUBSCRIBE")==0) && transport && (strcasecmp(transport,"TCP")==0 || strcasecmp(transport,"TLS")==0)){ @@ -770,3 +779,7 @@ void sal_op_stop_refreshing(SalOp *op){ } } +void sal_call_enable_sdp_removal(SalOp *h, bool_t enable) { + if (enable) ms_message("Enabling SDP removal feature for SalOp[%p]!", h); + h->sdp_removal = enable; +} diff --git a/coreapi/call_log.c b/coreapi/call_log.c index d1e59578f..7ce488096 100644 --- a/coreapi/call_log.c +++ b/coreapi/call_log.c @@ -281,6 +281,7 @@ LinphoneCallLog * linphone_call_log_new(LinphoneCallDir dir, LinphoneAddress *fr cl->reporting.reports[LINPHONE_CALL_STATS_AUDIO]=linphone_reporting_new(); cl->reporting.reports[LINPHONE_CALL_STATS_VIDEO]=linphone_reporting_new(); + cl->connected_date_time=0; return cl; } diff --git a/coreapi/call_log.h b/coreapi/call_log.h index d274037d2..6a3ec8dab 100644 --- a/coreapi/call_log.h +++ b/coreapi/call_log.h @@ -79,7 +79,7 @@ LINPHONE_PUBLIC const char * linphone_call_log_get_call_id(const LinphoneCallLog LINPHONE_PUBLIC LinphoneCallDir linphone_call_log_get_dir(LinphoneCallLog *cl); /** - * Get the duration of the call. + * Get the duration of the call since connected. * @param[in] cl LinphoneCallLog object * @return The duration of the call in seconds. **/ diff --git a/coreapi/callbacks.c b/coreapi/callbacks.c index f60e230f8..0cc5bf6fa 100644 --- a/coreapi/callbacks.c +++ b/coreapi/callbacks.c @@ -224,7 +224,8 @@ static bool_t already_a_call_pending(LinphoneCore *lc){ || call->state==LinphoneCallOutgoingInit || call->state==LinphoneCallOutgoingProgress || call->state==LinphoneCallOutgoingEarlyMedia - || call->state==LinphoneCallOutgoingRinging){ + || call->state==LinphoneCallOutgoingRinging + || call->state==LinphoneCallIdle){ /*case of an incoming call for which ICE candidate gathering is pending.*/ return TRUE; } } @@ -234,11 +235,12 @@ static bool_t already_a_call_pending(LinphoneCore *lc){ static void call_received(SalOp *h){ LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(h)); LinphoneCall *call; - const char *from,*to; char *alt_contact; - LinphoneAddress *from_addr, *to_addr; + LinphoneAddress *from_addr=NULL; + LinphoneAddress *to_addr=NULL; /*this mode is deprcated because probably useless*/ bool_t prevent_colliding_calls=lp_config_get_int(lc->config,"sip","prevent_colliding_calls",FALSE); + SalMediaDescription *md; /* first check if we can answer successfully to this invite */ if (linphone_presence_model_get_basic_status(lc->presence_model) == LinphonePresenceBasicStatusClosed) { @@ -272,10 +274,26 @@ static void call_received(SalOp *h){ sal_op_release(h); return; } - from=sal_op_get_from(h); - to=sal_op_get_to(h); - from_addr=linphone_address_new(from); - to_addr=linphone_address_new(to); + /*in some situation, better to trust the network rather than the UAC*/ + if (lp_config_get_int(lc->config,"sip","call_logs_use_asserted_id_instead_of_from",0)) { + const char * p_asserted_id = sal_custom_header_find(sal_op_get_recv_custom_header(h),"P-Asserted-Identity"); + LinphoneAddress *p_asserted_id_addr; + if (!p_asserted_id) { + ms_warning("No P-Asserted-Identity header found so cannot use it for op [%p] instead of from",h); + } else { + p_asserted_id_addr = linphone_address_new(p_asserted_id); + if (!p_asserted_id_addr) { + ms_warning("Unsupported P-Asserted-Identity header for op [%p] ",h); + } else { + ms_message("Using P-Asserted-Identity [%s] instead of from [%s] for op [%p]",p_asserted_id,sal_op_get_from(h),h); + from_addr=p_asserted_id_addr; + } + } + } + + if (!from_addr) + from_addr=linphone_address_new(sal_op_get_from(h)); + to_addr=linphone_address_new(sal_op_get_to(h)); if ((already_a_call_with_remote_address(lc,from_addr) && prevent_colliding_calls) || already_a_call_pending(lc)){ ms_warning("Receiving another call while one is ringing or initiated, refusing this one with busy message."); @@ -288,6 +306,17 @@ static void call_received(SalOp *h){ call=linphone_call_new_incoming(lc,from_addr,to_addr,h); + linphone_call_make_local_media_description(lc,call); + sal_call_set_local_media_description(call->op,call->localdesc); + md=sal_call_get_final_media_description(call->op); + if (md){ + if (sal_media_description_empty(md) || linphone_core_incompatible_security(lc,md)){ + sal_call_decline(call->op,SalReasonNotAcceptable,NULL); + linphone_call_unref(call); + return; + } + } + /* the call is acceptable so we can now add it to our list */ linphone_core_add_call(lc,call); linphone_call_ref(call); /*prevent the call from being destroyed while we are notifying, if the user declines within the state callback */ @@ -356,6 +385,10 @@ static void call_ringing(SalOp *h){ md=sal_call_get_final_media_description(h); if (md==NULL){ linphone_core_stop_dtmf_stream(lc); + if (call->state==LinphoneCallOutgoingEarlyMedia){ + /*already doing early media */ + return; + } if (lc->ringstream!=NULL) return;/*already ringing !*/ if (lc->sound_conf.play_sndcard!=NULL){ MSSndCard *ringcard=lc->sound_conf.lsd_card ? lc->sound_conf.lsd_card : lc->sound_conf.play_sndcard; @@ -395,6 +428,7 @@ static void call_accepted(SalOp *op){ LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op)); LinphoneCall *call=(LinphoneCall*)sal_op_get_user_pointer(op); SalMediaDescription *md; + bool_t update_state=TRUE; if (call==NULL){ ms_warning("No call to accept."); @@ -405,7 +439,7 @@ static void call_accepted(SalOp *op){ /* Handle remote ICE attributes if any. */ if (call->ice_session != NULL) { - linphone_core_update_ice_from_remote_media_description(call, sal_call_get_remote_media_description(op)); + linphone_call_update_ice_from_remote_media_description(call, sal_call_get_remote_media_description(op)); } #ifdef BUILD_UPNP if (call->upnp_session != NULL) { @@ -417,12 +451,21 @@ static void call_accepted(SalOp *op){ if (md) /*make sure re-invite will not propose video again*/ call->params->has_video &= linphone_core_media_description_contains_video_stream(md); - if (call->state==LinphoneCallOutgoingProgress || - call->state==LinphoneCallOutgoingRinging || - call->state==LinphoneCallOutgoingEarlyMedia){ - linphone_call_set_state(call,LinphoneCallConnected,"Connected"); - if (call->referer) linphone_core_notify_refer_state(lc,call->referer,call); + switch (call->state){ + case LinphoneCallOutgoingProgress: + case LinphoneCallOutgoingRinging: + case LinphoneCallOutgoingEarlyMedia: + linphone_call_set_state(call,LinphoneCallConnected,"Connected"); + if (call->referer) linphone_core_notify_refer_state(lc,call->referer,call); + break; + case LinphoneCallEarlyUpdating: + linphone_call_set_state(call,call->prevstate,"Early update accepted"); + update_state=FALSE; + break; + default: + break; } + if (md && !sal_media_description_empty(md) && !linphone_core_incompatible_security(lc,md)){ linphone_call_update_remote_session_id_and_ver(call); if (sal_media_description_has_dir(md,SalStreamSendOnly) || @@ -435,7 +478,7 @@ static void call_accepted(SalOp *op){ ms_free(msg); } linphone_core_update_streams (lc,call,md); - linphone_call_set_state(call,LinphoneCallPaused,"Call paused"); + if (update_state) linphone_call_set_state(call,LinphoneCallPaused,"Call paused"); if (call->refer_pending) linphone_core_start_refered_call(lc,call,NULL); }else if (sal_media_description_has_dir(md,SalStreamRecvOnly)){ @@ -448,7 +491,7 @@ static void call_accepted(SalOp *op){ ms_free(msg); } linphone_core_update_streams (lc,call,md); - linphone_call_set_state(call,LinphoneCallPausedByRemote,"Call paused by remote"); + if (update_state) linphone_call_set_state(call,LinphoneCallPausedByRemote,"Call paused by remote"); }else{ if (call->state!=LinphoneCallUpdating){ if (call->state==LinphoneCallResuming){ @@ -469,13 +512,24 @@ static void call_accepted(SalOp *op){ linphone_call_fix_call_parameters(call); if (!call->current_params->in_conference) lc->current_call=call; - if (call->prevstate != LinphoneCallIncomingEarlyMedia) /*don't change state in aswer to a SIP UPDATE in early media*/ - linphone_call_set_state(call, LinphoneCallStreamsRunning, "Streams running"); + if (update_state) linphone_call_set_state(call, LinphoneCallStreamsRunning, "Streams running"); } }else{ - /*send a bye*/ - ms_error("Incompatible SDP offer received in 200Ok, need to abort the call"); - linphone_core_abort_call(lc,call,_("Incompatible, check codecs or security settings...")); + switch (call->prevstate){ + /*send a bye only in case of outgoing state*/ + case LinphoneCallOutgoingInit: + case LinphoneCallOutgoingProgress: + case LinphoneCallOutgoingRinging: + case LinphoneCallOutgoingEarlyMedia: + ms_error("Incompatible SDP offer received in 200 OK, need to abort the call"); + linphone_core_abort_call(lc,call,_("Incompatible, check codecs or security settings...")); + break; + /*otherwise we are able to resume previous state*/ + default: + ms_message("Incompatible SDP offer received in 200 OK, restoring previous state[%s]",linphone_call_state_to_string(call->prevstate)); + linphone_call_set_state(call,call->prevstate,_("Incompatible media parameters.")); + break; + } } } @@ -554,7 +608,8 @@ static void call_updated_by_remote(LinphoneCore *lc, LinphoneCall *call, bool_t if (rmd==NULL) call->expect_media_in_ack=TRUE; } else if (is_update){ /*SIP UPDATE case, can occur in early states*/ - _linphone_core_accept_call_update(lc,call,NULL,call->state,linphone_call_state_to_string(call->state)); + linphone_call_set_state(call, LinphoneCallEarlyUpdatedByRemote, "EarlyUpdatedByRemote"); + _linphone_core_accept_call_update(lc,call,NULL,call->prevstate,linphone_call_state_to_string(call->prevstate)); } } @@ -611,6 +666,8 @@ static void call_updating(SalOp *op, bool_t is_update){ case LinphoneCallRefered: case LinphoneCallError: case LinphoneCallReleased: + case LinphoneCallEarlyUpdatedByRemote: + case LinphoneCallEarlyUpdating: ms_warning("Receiving reINVITE or UPDATE while in state [%s], should not happen.",linphone_call_state_to_string(call->state)); break; } @@ -1113,14 +1170,18 @@ static void text_delivery_update(SalOp *op, SalTextDeliveryStatus status){ } chat_msg->state=chatStatusSal2Linphone(status); - linphone_chat_message_store_state(chat_msg); - if (chat_msg && chat_msg->cb) { + linphone_chat_message_update_state(chat_msg); + + if (chat_msg && (chat_msg->cb || (chat_msg->callbacks && linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)))) { ms_message("Notifying text delivery with status %i",chat_msg->state); - chat_msg->cb(chat_msg - ,chat_msg->state - ,chat_msg->cb_ud); + if (chat_msg->callbacks && linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(chat_msg->callbacks)(chat_msg, chat_msg->state); + } else { + /* Legacy */ + chat_msg->cb(chat_msg,chat_msg->state,chat_msg->cb_ud); + } } - if (status != SalTextDeliveryInProgress) { /*don't release op if progress*/ + if (status != SalTextDeliveryInProgress) { /*only release op if not in progress*/ linphone_chat_message_destroy(chat_msg); } } @@ -1151,14 +1212,13 @@ static void subscribe_response(SalOp *op, SalSubscribeStatus status){ static void notify(SalOp *op, SalSubscribeStatus st, const char *eventname, const SalBody *body){ LinphoneEvent *lev=(LinphoneEvent*)sal_op_get_user_pointer(op); LinphoneCore *lc=(LinphoneCore *)sal_get_user_pointer(sal_op_get_sal(op)); - LinphoneContent content={0}; if (lev==NULL) { /*out of subscribe notify */ lev=linphone_event_new_with_out_of_dialog_op(lc,op,LinphoneSubscriptionOutgoing,eventname); } { - const LinphoneContent *ct=linphone_content_from_sal_body(&content,body); + LinphoneContent *ct=linphone_content_from_sal_body(body); if (ct) linphone_core_notify_notify_received(lc,lev,eventname,ct); } if (st!=SalSubscribeNone){ diff --git a/coreapi/chat.c b/coreapi/chat.c index 0c89485f3..6302af243 100644 --- a/coreapi/chat.c +++ b/coreapi/chat.c @@ -35,22 +35,159 @@ #define COMPOSING_DEFAULT_REMOTE_REFRESH_TIMEOUT 120 +static LinphoneChatMessageCbs * linphone_chat_message_cbs_new(void) { + return belle_sip_object_new(LinphoneChatMessageCbs); +} + +BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneChatMessageCbs); + +BELLE_SIP_INSTANCIATE_VPTR(LinphoneChatMessageCbs, belle_sip_object_t, + NULL, // destroy + NULL, // clone + NULL, // marshal + FALSE +); + + +/** + * @addtogroup chatroom + * @{ + */ + +/** + * Acquire a reference to the LinphoneChatMessageCbs object. + * @param[in] cbs LinphoneChatMessageCbs object. + * @return The same LinphoneChatMessageCbs object. + */ +LinphoneChatMessageCbs * linphone_chat_message_cbs_ref(LinphoneChatMessageCbs *cbs) { + belle_sip_object_ref(cbs); + return cbs; +} + +/** + * Release reference to the LinphoneChatMessageCbs object. + * @param[in] cbs LinphoneChatMessageCbs object. + */ +void linphone_chat_message_cbs_unref(LinphoneChatMessageCbs *cbs) { + belle_sip_object_unref(cbs); +} + +/** + * Retrieve the user pointer associated with the LinphoneChatMessageCbs object. + * @param[in] cbs LinphoneChatMessageCbs object. + * @return The user pointer associated with the LinphoneChatMessageCbs object. + */ +void *linphone_chat_message_cbs_get_user_data(const LinphoneChatMessageCbs *cbs) { + return cbs->user_data; +} + +/** + * Assign a user pointer to the LinphoneChatMessageCbs object. + * @param[in] cbs LinphoneChatMessageCbs object. + * @param[in] ud The user pointer to associate with the LinphoneChatMessageCbs object. + */ +void linphone_chat_message_cbs_set_user_data(LinphoneChatMessageCbs *cbs, void *ud) { + cbs->user_data = ud; +} + +/** + * Get the message state changed callback. + * @param[in] cbs LinphoneChatMessageCbs object. + * @return The current message state changed callback. + */ +LinphoneChatMessageMsgStateChangedCb linphone_chat_message_cbs_get_msg_state_changed(const LinphoneChatMessageCbs *cbs) { + return cbs->msg_state_changed; +} + +/** + * Set the message state changed callback. + * @param[in] cbs LinphoneChatMessageCbs object. + * @param[in] cb The message state changed callback to be used. + */ +void linphone_chat_message_cbs_set_msg_state_changed(LinphoneChatMessageCbs *cbs, LinphoneChatMessageMsgStateChangedCb cb) { + cbs->msg_state_changed = cb; +} + +/** + * Get the file transfer receive callback. + * @param[in] cbs LinphoneChatMessageCbs object. + * @return The current file transfer receive callback. + */ +LinphoneChatMessageFileTransferRecvCb linphone_chat_message_cbs_get_file_transfer_recv(const LinphoneChatMessageCbs *cbs) { + return cbs->file_transfer_recv; +} + +/** + * Set the file transfer receive callback. + * @param[in] cbs LinphoneChatMessageCbs object. + * @param[in] cb The file transfer receive callback to be used. + */ +void linphone_chat_message_cbs_set_file_transfer_recv(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferRecvCb cb) { + cbs->file_transfer_recv = cb; +} + +/** + * Get the file transfer send callback. + * @param[in] cbs LinphoneChatMessageCbs object. + * @return The current file transfer send callback. + */ +LinphoneChatMessageFileTransferSendCb linphone_chat_message_cbs_get_file_transfer_send(const LinphoneChatMessageCbs *cbs) { + return cbs->file_transfer_send; +} + +/** + * Set the file transfer send callback. + * @param[in] cbs LinphoneChatMessageCbs object. + * @param[in] cb The file transfer send callback to be used. + */ +void linphone_chat_message_cbs_set_file_transfer_send(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferSendCb cb) { + cbs->file_transfer_send = cb; +} + +/** + * Get the file transfer progress indication callback. + * @param[in] cbs LinphoneChatMessageCbs object. + * @return The current file transfer progress indication callback. + */ +LinphoneChatMessageFileTransferProgressIndicationCb linphone_chat_message_cbs_get_file_transfer_progress_indication(const LinphoneChatMessageCbs *cbs) { + return cbs->file_transfer_progress_indication; +} + +/** + * Set the file transfer progress indication callback. + * @param[in] cbs LinphoneChatMessageCbs object. + * @param[in] cb The file transfer progress indication callback to be used. + */ +void linphone_chat_message_cbs_set_file_transfer_progress_indication(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferProgressIndicationCb cb) { + cbs->file_transfer_progress_indication = cb; +} + +/** + * @} + */ + + + static void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatMessage* msg); -#define MULTIPART_BOUNDARY "---------------------------14737809831466499882746641449" -const char *multipart_boundary=MULTIPART_BOUNDARY; static void process_io_error_upload(void *data, const belle_sip_io_error_event_t *event){ LinphoneChatMessage* msg=(LinphoneChatMessage *)data; ms_error("I/O Error during file upload to %s - msg [%p] chat room[%p]", linphone_core_get_file_transfer_server(msg->chat_room->lc), msg, msg->chat_room); if (msg->cb) { - msg->cb(msg, LinphoneChatMessageStateNotDelivered, msg->chat_room->lc); + msg->cb(msg, LinphoneChatMessageStateNotDelivered, msg->cb_ud); + } + if (linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)(msg, LinphoneChatMessageStateNotDelivered); } } static void process_auth_requested_upload(void *data, belle_sip_auth_event_t *event){ LinphoneChatMessage* msg=(LinphoneChatMessage *)data; ms_error("Error during file upload : auth requested to connect %s - msg [%p] chat room[%p]", linphone_core_get_file_transfer_server(msg->chat_room->lc), msg, msg->chat_room); if (msg->cb) { - msg->cb(msg, LinphoneChatMessageStateNotDelivered, msg->chat_room->lc); + msg->cb(msg, LinphoneChatMessageStateNotDelivered, msg->cb_ud); + } + if (linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)(msg, LinphoneChatMessageStateNotDelivered); } } @@ -58,14 +195,20 @@ static void process_io_error_download(void *data, const belle_sip_io_error_event LinphoneChatMessage* msg=(LinphoneChatMessage *)data; ms_error("I/O Error during file download %s - msg [%p] chat room[%p]", msg->external_body_url, msg, msg->chat_room); if (msg->cb) { - msg->cb(msg, LinphoneChatMessageStateFileTransferError, msg->chat_room->lc); + msg->cb(msg, LinphoneChatMessageStateFileTransferError, msg->cb_ud); + } + if (linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)(msg, LinphoneChatMessageStateFileTransferError); } } static void process_auth_requested_download(void *data, belle_sip_auth_event_t *event){ LinphoneChatMessage* msg=(LinphoneChatMessage *)data; ms_error("Error during file download : auth requested to get %s - msg [%p] chat room[%p]", msg->external_body_url, msg, msg->chat_room); if (msg->cb) { - msg->cb(msg, LinphoneChatMessageStateFileTransferError, msg->chat_room->lc); + msg->cb(msg, LinphoneChatMessageStateFileTransferError, msg->cb_ud); + } + if (linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)(msg, LinphoneChatMessageStateFileTransferError); } } @@ -75,10 +218,12 @@ static void process_auth_requested_download(void *data, belle_sip_auth_event_t * */ static void linphone_chat_message_file_transfer_on_progress(belle_sip_body_handler_t *bh, belle_sip_message_t *msg, void *data, size_t offset, size_t total){ LinphoneChatMessage* chatMsg=(LinphoneChatMessage *)data; - LinphoneCore *lc = chatMsg->chat_room->lc; - /* call back given by application level */ - linphone_core_notify_file_transfer_progress_indication(lc, chatMsg, chatMsg->file_transfer_information, (size_t)(((double)offset/(double)total)*100.0)); - return; + if (linphone_chat_message_cbs_get_file_transfer_progress_indication(chatMsg->callbacks)) { + linphone_chat_message_cbs_get_file_transfer_progress_indication(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, offset, total); + } else { + /* Legacy: call back given by application level */ + linphone_core_notify_file_transfer_progress_indication(chatMsg->chat_room->lc, chatMsg, chatMsg->file_transfer_information, offset, total); + } } /** @@ -98,9 +243,14 @@ static int linphone_chat_message_file_transfer_on_send_body(belle_sip_user_body_ char *buf = (char *)buffer; /* if we've not reach the end of file yet, ask for more data*/ - if (offsetfile_transfer_information->size){ + if (offsetfile_transfer_information)){ /* get data from call back */ - linphone_core_notify_file_transfer_send(lc, chatMsg, chatMsg->file_transfer_information, buf, size); + if (linphone_chat_message_cbs_get_file_transfer_send(chatMsg->callbacks)) { + linphone_chat_message_cbs_get_file_transfer_send(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, buf, size); + } else { + /* Legacy */ + linphone_core_notify_file_transfer_send(lc, chatMsg, chatMsg->file_transfer_information, buf, size); + } } return BELLE_SIP_CONTINUE; @@ -128,35 +278,33 @@ static void linphone_chat_message_process_response_from_post_file(void *data, co belle_http_request_t *req; belle_sip_multipart_body_handler_t *bh; char* ua; - char *content_type; char *first_part_header; - belle_sip_user_body_handler_t *first_part_bh; + belle_sip_body_handler_t *first_part_bh; /* temporary storage for the Content-disposition header value */ - first_part_header = belle_sip_strdup_printf("form-data; name=\"File\"; filename=\"%s\"", msg->file_transfer_information->name); + first_part_header = belle_sip_strdup_printf("form-data; name=\"File\"; filename=\"%s\"", linphone_content_get_name(msg->file_transfer_information)); /* create a user body handler to take care of the file and add the content disposition and content-type headers */ - first_part_bh=belle_sip_user_body_handler_new(msg->file_transfer_information->size,NULL,NULL,linphone_chat_message_file_transfer_on_send_body,msg); - belle_sip_body_handler_add_header((belle_sip_body_handler_t *)first_part_bh, belle_sip_header_create("Content-disposition", first_part_header)); + if (msg->file_transfer_filepath != NULL) { + first_part_bh=(belle_sip_body_handler_t *)belle_sip_file_body_handler_new(msg->file_transfer_filepath,NULL,msg); + } else { + first_part_bh=(belle_sip_body_handler_t *)belle_sip_user_body_handler_new(linphone_content_get_size(msg->file_transfer_information),NULL,NULL,linphone_chat_message_file_transfer_on_send_body,msg); + } + belle_sip_body_handler_add_header(first_part_bh, belle_sip_header_create("Content-disposition", first_part_header)); belle_sip_free(first_part_header); - belle_sip_body_handler_add_header((belle_sip_body_handler_t *)first_part_bh, (belle_sip_header_t *)belle_sip_header_content_type_create(msg->file_transfer_information->type, msg->file_transfer_information->subtype)); + belle_sip_body_handler_add_header(first_part_bh, (belle_sip_header_t *)belle_sip_header_content_type_create(linphone_content_get_type(msg->file_transfer_information), linphone_content_get_subtype(msg->file_transfer_information))); /* insert it in a multipart body handler which will manage the boundaries of multipart message */ - bh=belle_sip_multipart_body_handler_new(linphone_chat_message_file_transfer_on_progress, msg, (belle_sip_body_handler_t *)first_part_bh); + bh=belle_sip_multipart_body_handler_new(linphone_chat_message_file_transfer_on_progress, msg, first_part_bh); + /* create the http request: do not include the message header at this point, it is done by bellesip when setting the multipart body handler in the message */ ua = ms_strdup_printf("%s/%s", linphone_core_get_user_agent_name(), linphone_core_get_user_agent_version()); - - content_type=belle_sip_strdup_printf("multipart/form-data; boundary=%s",multipart_boundary); - uri=belle_generic_uri_parse(linphone_core_get_file_transfer_server(msg->chat_room->lc)); - req=belle_http_request_create("POST", uri, belle_sip_header_create("User-Agent",ua), - belle_sip_header_create("Content-type",content_type), NULL); ms_free(ua); - belle_sip_free(content_type); belle_sip_message_set_body_handler(BELLE_SIP_MESSAGE(req),BELLE_SIP_BODY_HANDLER(bh)); cbs.process_response=linphone_chat_message_process_response_from_post_file; cbs.process_io_error=process_io_error_upload; @@ -174,6 +322,12 @@ static void linphone_chat_message_process_response_from_post_file(void *data, co body = belle_sip_message_get_body((belle_sip_message_t *)event->response); msg->message = ms_strdup(body); msg->content_type = ms_strdup("application/vnd.gsma.rcs-ft-http+xml"); + if (msg->cb) { + msg->cb(msg, LinphoneChatMessageStateFileTransferDone, msg->cb_ud); + } + if (linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)(msg, LinphoneChatMessageStateFileTransferDone); + } _linphone_chat_room_send_message(msg->chat_room, msg); } } @@ -495,6 +649,17 @@ static void _linphone_chat_room_send_message(LinphoneChatRoom *cr, LinphoneChatM linphone_chat_message_unref(msg); } +void linphone_chat_message_update_state(LinphoneChatMessage* chat_msg ) { + linphone_chat_message_store_state(chat_msg); + + if( chat_msg->state == LinphoneChatMessageStateDelivered + || chat_msg->state == LinphoneChatMessageStateNotDelivered ){ + // message is not transient anymore, we can remove it from our transient list and unref it : + chat_msg->chat_room->transient_messages = ms_list_remove(chat_msg->chat_room->transient_messages, chat_msg); + linphone_chat_message_unref(chat_msg); + } +} + /** * Send a message to peer member of this chat room. * @deprecated linphone_chat_room_send_message2() gives more control on the message expedition. @@ -506,9 +671,10 @@ void linphone_chat_room_send_message(LinphoneChatRoom *cr, const char *msg) { } void linphone_chat_room_message_received(LinphoneChatRoom *cr, LinphoneCore *lc, LinphoneChatMessage *msg){ - if (msg->message) - //legacy API + if (msg->message){ + /*legacy API*/ linphone_core_notify_text_message_received(lc, cr, msg->from, msg->message); + } linphone_core_notify_message_received(lc, cr,msg); cr->remote_is_composing = LinphoneIsComposingIdle; linphone_core_notify_is_composing_received(cr->lc, cr); @@ -517,20 +683,13 @@ void linphone_chat_room_message_received(LinphoneChatRoom *cr, LinphoneCore *lc, void linphone_core_message_received(LinphoneCore *lc, SalOp *op, const SalMessage *sal_msg){ LinphoneChatRoom *cr=NULL; LinphoneAddress *addr; - char *cleanfrom; - char *from; LinphoneChatMessage* msg; const SalCustomHeader *ch; addr=linphone_address_new(sal_msg->from); linphone_address_clean(addr); cr=linphone_core_get_chat_room(lc,addr); - cleanfrom=linphone_address_as_string(addr); - from=linphone_address_as_string_uri_only(addr); - if (cr==NULL){ - /* create a new chat room */ - cr=linphone_core_create_chat_room(lc,cleanfrom); - } + if (sal_msg->content_type != NULL) { /* content_type field is, for now, used only for rcs file transfer but we shall strcmp it with "application/vnd.gsma.rcs-ft-http+xml" */ xmlChar *file_url = NULL; xmlDocPtr xmlMessageBody; @@ -538,8 +697,7 @@ void linphone_core_message_received(LinphoneCore *lc, SalOp *op, const SalMessag msg = linphone_chat_room_create_message(cr, NULL); /* create a message with empty body */ msg->content_type = ms_strdup(sal_msg->content_type); /* add the content_type "application/vnd.gsma.rcs-ft-http+xml" */ - msg->file_transfer_information = (LinphoneContent *)malloc(sizeof(LinphoneContent)); - memset(msg->file_transfer_information, 0, sizeof(*(msg->file_transfer_information))); + msg->file_transfer_information = linphone_content_new(); /* parse the message body to get all informations from it */ xmlMessageBody = xmlParseDoc((const xmlChar *)sal_msg->text); @@ -555,21 +713,27 @@ void linphone_core_message_received(LinphoneCore *lc, SalOp *op, const SalMessag while (cur!=NULL) { if (!xmlStrcmp(cur->name, (const xmlChar *)"file-size")) { xmlChar *fileSizeString = xmlNodeListGetString(xmlMessageBody, cur->xmlChildrenNode, 1); - msg->file_transfer_information->size = strtol((const char*)fileSizeString, NULL, 10); + linphone_content_set_size(msg->file_transfer_information, strtol((const char*)fileSizeString, NULL, 10)); xmlFree(fileSizeString); } if (!xmlStrcmp(cur->name, (const xmlChar *)"file-name")) { - msg->file_transfer_information->name = (char *)xmlNodeListGetString(xmlMessageBody, cur->xmlChildrenNode, 1); + linphone_content_set_name(msg->file_transfer_information, (const char *)xmlNodeListGetString(xmlMessageBody, cur->xmlChildrenNode, 1)); } if (!xmlStrcmp(cur->name, (const xmlChar *)"content-type")) { xmlChar *contentType = xmlNodeListGetString(xmlMessageBody, cur->xmlChildrenNode, 1); int contentTypeIndex = 0; + char *type; + char *subtype; while (contentType[contentTypeIndex]!='/' && contentType[contentTypeIndex]!='\0') { contentTypeIndex++; } - msg->file_transfer_information->type = ms_strndup((char *)contentType, contentTypeIndex); - msg->file_transfer_information->subtype = ms_strdup(((char *)contentType+contentTypeIndex+1)); + type = ms_strndup((char *)contentType, contentTypeIndex); + subtype = ms_strdup(((char *)contentType+contentTypeIndex+1)); + linphone_content_set_type(msg->file_transfer_information, type); + linphone_content_set_subtype(msg->file_transfer_information, subtype); + ms_free(subtype); + ms_free(type); xmlFree(contentType); } if (!xmlStrcmp(cur->name, (const xmlChar *)"data")) { @@ -616,8 +780,6 @@ void linphone_core_message_received(LinphoneCore *lc, SalOp *op, const SalMessag msg->storage_id=linphone_chat_message_store(msg); linphone_chat_room_message_received(cr,lc,msg); linphone_chat_message_unref(msg); - ms_free(cleanfrom); - ms_free(from); } static int linphone_chat_room_remote_refresh_composing_expired(void *data, unsigned int revents) { @@ -729,6 +891,7 @@ const LinphoneAddress* linphone_chat_room_get_peer_address(LinphoneChatRoom *cr) */ LinphoneChatMessage* linphone_chat_room_create_message(LinphoneChatRoom *cr, const char* message) { LinphoneChatMessage* msg = belle_sip_object_new(LinphoneChatMessage); + msg->callbacks=linphone_chat_message_cbs_new(); msg->chat_room=(LinphoneChatRoom*)cr; msg->message=message?ms_strdup(message):NULL; msg->is_read=TRUE; @@ -755,6 +918,7 @@ LinphoneChatMessage* linphone_chat_room_create_message_2( LinphoneCore *lc=linphone_chat_room_get_lc(cr); LinphoneChatMessage* msg = belle_sip_object_new(LinphoneChatMessage); + msg->callbacks=linphone_chat_message_cbs_new(); msg->chat_room=(LinphoneChatRoom*)cr; msg->message=message?ms_strdup(message):NULL; msg->external_body_url=external_body_url?ms_strdup(external_body_url):NULL; @@ -781,6 +945,7 @@ LinphoneChatMessage* linphone_chat_room_create_message_2( * @param msg #LinphoneChatMessage message to be sent * @param status_cb LinphoneChatMessageStateChangeCb status callback invoked when message is delivered or could not be delivered. May be NULL * @param ud user data for the status cb. + * @deprecated Use linphone_chat_room_send_chat_message() instead. * @note The LinphoneChatMessage must not be destroyed until the the callback is called. */ void linphone_chat_room_send_message2(LinphoneChatRoom *cr, LinphoneChatMessage* msg,LinphoneChatMessageStateChangedCb status_cb, void* ud) { @@ -790,6 +955,18 @@ void linphone_chat_room_send_message2(LinphoneChatRoom *cr, LinphoneChatMessage* _linphone_chat_room_send_message(cr, msg); } +/** + * Send a message to peer member of this chat room. + * @param[in] cr LinphoneChatRoom object + * @param[in] msg LinphoneChatMessage object + * The state of the message sending will be notified via the callbacks defined in the LinphoneChatMessageCbs object that can be obtained + * by calling linphone_chat_message_get_callbacks(). + */ +void linphone_chat_room_send_chat_message(LinphoneChatRoom *cr, LinphoneChatMessage *msg) { + msg->state = LinphoneChatMessageStateInProgress; + _linphone_chat_room_send_message(cr, msg); +} + static char * linphone_chat_room_create_is_composing_xml(LinphoneChatRoom *cr) { xmlBufferPtr buf; xmlTextWriterPtr writer; @@ -1027,35 +1204,38 @@ static void on_recv_body(belle_sip_user_body_handler_t *bh, belle_sip_message_t if (chatMsg->http_request == NULL) { return; } - /* call back given by application level */ - linphone_core_notify_file_transfer_recv(lc, chatMsg, chatMsg->file_transfer_information, (char *)buffer, size); + if (linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)) { + linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, (char *)buffer, size); + } else { + /* Legacy: call back given by application level */ + linphone_core_notify_file_transfer_recv(lc, chatMsg, chatMsg->file_transfer_information, (char *)buffer, size); + } return; } static LinphoneContent* linphone_chat_create_file_transfer_information_from_headers(const belle_sip_message_t* message ){ - LinphoneContent *content = ms_malloc0(sizeof(LinphoneContent)); + LinphoneContent *content = linphone_content_new(); belle_sip_header_content_length_t* content_length_hdr = BELLE_SIP_HEADER_CONTENT_LENGTH(belle_sip_message_get_header(message, "Content-Length")); belle_sip_header_content_type_t* content_type_hdr = BELLE_SIP_HEADER_CONTENT_TYPE(belle_sip_message_get_header(message, "Content-Type")); const char* type = NULL,*subtype = NULL; - content->name = ms_strdup(""); + linphone_content_set_name(content, ""); if( content_type_hdr ){ type = belle_sip_header_content_type_get_type(content_type_hdr); subtype = belle_sip_header_content_type_get_subtype(content_type_hdr); ms_message("Extracted content type %s / %s from header", type?type:"", subtype?subtype:""); - if( type ) content->type = ms_strdup(type); - if( subtype ) content->type = ms_strdup(subtype); + if( type ) linphone_content_set_type(content, type); + if( subtype ) linphone_content_set_subtype(content, subtype); } if( content_length_hdr ){ - content->size = belle_sip_header_content_length_get_content_length(content_length_hdr); - ms_message("Extracted content length %i from header", (int)content->size); + linphone_content_set_size(content, belle_sip_header_content_length_get_content_length(content_length_hdr)); + ms_message("Extracted content length %i from header", (int)linphone_content_get_size(content)); } - return content; } @@ -1073,19 +1253,24 @@ static void linphone_chat_process_response_headers_from_get_file(void *data, con } if( message->file_transfer_information ){ - body_size = message->file_transfer_information->size; + body_size = linphone_content_get_size(message->file_transfer_information); } - belle_sip_message_set_body_handler( - (belle_sip_message_t*)event->response, - (belle_sip_body_handler_t*)belle_sip_user_body_handler_new(body_size, linphone_chat_message_file_transfer_on_progress,on_recv_body,NULL,message) - ); + if (message->file_transfer_filepath == NULL) { + belle_sip_message_set_body_handler( + (belle_sip_message_t*)event->response, + (belle_sip_body_handler_t*)belle_sip_user_body_handler_new(body_size, linphone_chat_message_file_transfer_on_progress,on_recv_body,NULL,message) + ); + } else { + belle_sip_message_set_body_handler( + (belle_sip_message_t *)event->response, + (belle_sip_body_handler_t *)belle_sip_file_body_handler_new(message->file_transfer_filepath, linphone_chat_message_file_transfer_on_progress, message) + ); + } } } static void linphone_chat_process_response_from_get_file(void *data, const belle_http_response_event_t *event){ - //LinphoneChatMessage* msg=(LinphoneChatMessage *)data; - /* check the answer code */ if (event->response){ int code=belle_http_response_get_status_code(event->response); @@ -1093,18 +1278,26 @@ static void linphone_chat_process_response_from_get_file(void *data, const belle LinphoneChatMessage* chatMsg=(LinphoneChatMessage *)data; LinphoneCore *lc = chatMsg->chat_room->lc; /* file downloaded succesfully, call again the callback with size at zero */ - linphone_core_notify_file_transfer_recv(lc, chatMsg, chatMsg->file_transfer_information, NULL, 0); + if (linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)) { + linphone_chat_message_cbs_get_file_transfer_recv(chatMsg->callbacks)(chatMsg, chatMsg->file_transfer_information, NULL, 0); + } else { + linphone_core_notify_file_transfer_recv(lc, chatMsg, chatMsg->file_transfer_information, NULL, 0); + } + if (chatMsg->cb) { + chatMsg->cb(chatMsg, LinphoneChatMessageStateFileTransferDone, chatMsg->cb_ud); + } + if (linphone_chat_message_cbs_get_msg_state_changed(chatMsg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(chatMsg->callbacks)(chatMsg, LinphoneChatMessageStateFileTransferDone); + } } } } /** - * Start the download of the file from remote server - * - * @param message #LinphoneChatMessage - * @param status_cb LinphoneChatMessageStateChangeCb status callback invoked when file is downloaded or could not be downloaded + * Start the download of the file referenced in a LinphoneChatMessage from remote server. + * @param[in] message LinphoneChatMessage object. */ -void linphone_chat_message_start_file_download(LinphoneChatMessage *message, LinphoneChatMessageStateChangedCb status_cb) { +void linphone_chat_message_download_file(LinphoneChatMessage *message) { belle_http_request_listener_callbacks_t cbs={0}; belle_http_request_listener_t *l; belle_generic_uri_t *uri; @@ -1128,22 +1321,37 @@ void linphone_chat_message_start_file_download(LinphoneChatMessage *message, Lin l=belle_http_request_listener_create_from_callbacks(&cbs, (void *)message); belle_sip_object_data_set(BELLE_SIP_OBJECT(req),"message",(void *)message,NULL); message->http_request = req; /* keep a reference on the request to be able to cancel the download */ - message->cb = status_cb; message->state = LinphoneChatMessageStateInProgress; /* start the download, status is In Progress */ belle_http_provider_send_request(message->chat_room->lc->http_provider,req,l); } +/** + * Start the download of the file from remote server + * + * @param message #LinphoneChatMessage + * @param status_cb LinphoneChatMessageStateChangeCb status callback invoked when file is downloaded or could not be downloaded + * @deprecated Use linphone_chat_message_download_file() instead. + */ +void linphone_chat_message_start_file_download(LinphoneChatMessage *message, LinphoneChatMessageStateChangedCb status_cb, void *ud) { + message->cb = status_cb; + message->cb_ud = ud; + linphone_chat_message_download_file(message); +} + /** * Cancel an ongoing file transfer attached to this message.(upload or download) * @param msg #LinphoneChatMessage */ -void linphone_chat_room_cancel_file_transfer(LinphoneChatMessage *msg) { +void linphone_chat_message_cancel_file_transfer(LinphoneChatMessage *msg) { ms_message("Cancelled file transfer %s - msg [%p] chat room[%p]", (msg->external_body_url==NULL)?linphone_core_get_file_transfer_server(msg->chat_room->lc):msg->external_body_url, msg, msg->chat_room); /* TODO: here we shall call the cancel http request from bellesip API when it is available passing msg->http_request */ /* waiting for this API, just set to NULL the reference to the request in the message and any request */ msg->http_request = NULL; if (msg->cb) { - msg->cb(msg, LinphoneChatMessageStateNotDelivered, msg->chat_room->lc); + msg->cb(msg, LinphoneChatMessageStateNotDelivered, msg->cb_ud); + } + if (linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)) { + linphone_chat_message_cbs_get_msg_state_changed(msg->callbacks)(msg, LinphoneChatMessageStateNotDelivered); } } @@ -1294,6 +1502,7 @@ LinphoneChatMessage* linphone_chat_message_clone(const LinphoneChatMessage* msg) new_message->state=msg->state; new_message->storage_id=msg->storage_id; if (msg->from) new_message->from=linphone_address_clone(msg->from); + if (msg->file_transfer_filepath) new_message->file_transfer_filepath=ms_strdup(msg->file_transfer_filepath); return new_message; } @@ -1318,9 +1527,12 @@ static void _linphone_chat_message_destroy(LinphoneChatMessage* msg) { if (msg->custom_headers) sal_custom_header_free(msg->custom_headers); if (msg->content_type) ms_free(msg->content_type); if (msg->file_transfer_information) { - linphone_content_uninit(msg->file_transfer_information); - ms_free(msg->file_transfer_information); + linphone_content_unref(msg->file_transfer_information); } + if (msg->file_transfer_filepath != NULL) { + ms_free(msg->file_transfer_filepath); + } + linphone_chat_message_cbs_unref(msg->callbacks); ms_message("LinphoneChatMessage [%p] destroyed.",msg); } @@ -1357,21 +1569,50 @@ LinphoneReason linphone_chat_message_get_reason(LinphoneChatMessage* msg) { } +/** + * Set the path to the file to read from or write to during the file transfer. + * @param[in] msg LinphoneChatMessage object + * @param[in] filepath The path to the file to use for the file transfer. + */ +void linphone_chat_message_set_file_transfer_filepath(LinphoneChatMessage *msg, const char *filepath) { + if (msg->file_transfer_filepath != NULL) { + ms_free(msg->file_transfer_filepath); + } + msg->file_transfer_filepath = ms_strdup(filepath); +} + +/** + * Get the path to the file to read from or write to during the file transfer. + * @param[in] msg LinphoneChatMessage object + * @return The path to the file to use for the file transfer. + */ +const char * linphone_chat_message_get_file_transfer_filepath(LinphoneChatMessage *msg) { + return msg->file_transfer_filepath; +} + +/** + * Get the LinphoneChatMessageCbs object associated with the LinphoneChatMessage. + * @param[in] msg LinphoneChatMessage object + * @return The LinphoneChatMessageCbs object associated with the LinphoneChatMessage. + */ +LinphoneChatMessageCbs * linphone_chat_message_get_callbacks(const LinphoneChatMessage *msg) { + return msg->callbacks; +} + /** * Create a message attached to a dedicated chat room with a particular content. Use #linphone_chat_room_send_message2 to initiate the transfer * @param cr the chat room. - * @param a #LinphoneContent initial content. #LinphoneCoreVTable.file_transfer_send is invoked later to notify file transfer progress and collect next chunk of the message if #LinphoneContent.data is NULL. + * @param initial_content #LinphoneContent initial content. #LinphoneCoreVTable.file_transfer_send is invoked later to notify file transfer progress and collect next chunk of the message if #LinphoneContent.data is NULL. * @return a new #LinphoneChatMessage */ LinphoneChatMessage* linphone_chat_room_create_file_transfer_message(LinphoneChatRoom *cr, LinphoneContent* initial_content) { LinphoneChatMessage* msg = belle_sip_object_new(LinphoneChatMessage); + msg->callbacks=linphone_chat_message_cbs_new(); msg->chat_room=(LinphoneChatRoom*)cr; msg->message = NULL; - msg->file_transfer_information = (LinphoneContent *)malloc(sizeof(LinphoneContent)); - memset(msg->file_transfer_information, 0, sizeof(LinphoneContent)); - linphone_content_copy(msg->file_transfer_information, initial_content); + msg->file_transfer_information = linphone_content_copy(initial_content); msg->dir=LinphoneChatMessageOutgoing; linphone_chat_message_set_to(msg, linphone_chat_room_get_peer_address(cr)); linphone_chat_message_set_from(msg, linphone_address_new(linphone_core_get_identity(cr->lc))); diff --git a/coreapi/content.c b/coreapi/content.c new file mode 100644 index 000000000..74d04ebb7 --- /dev/null +++ b/coreapi/content.c @@ -0,0 +1,215 @@ +/* +linphone +Copyright (C) 2010-2014 Belledonne Communications SARL + +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 2 +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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "linphonecore.h" +#include "private.h" + + + +static void linphone_content_destroy(LinphoneContent *content) { + if (content->owned_fields == TRUE) { + if (content->lcp.type) belle_sip_free(content->lcp.type); + if (content->lcp.subtype) belle_sip_free(content->lcp.subtype); + if (content->lcp.data) belle_sip_free(content->lcp.data); + if (content->lcp.encoding) belle_sip_free(content->lcp.encoding); + if (content->lcp.name) belle_sip_free(content->lcp.name); + } +} + +static void linphone_content_clone(LinphoneContent *obj, const LinphoneContent *ref) { + linphone_content_set_type(obj, linphone_content_get_type(ref)); + linphone_content_set_subtype(obj, linphone_content_get_subtype(ref)); + linphone_content_set_encoding(obj, linphone_content_get_encoding(ref)); + linphone_content_set_name(obj, linphone_content_get_name(ref)); + if (linphone_content_get_buffer(ref) != NULL) { + linphone_content_set_buffer(obj, linphone_content_get_buffer(ref), linphone_content_get_size(ref)); + } else { + linphone_content_set_size(obj, linphone_content_get_size(ref)); + } +} + + +BELLE_SIP_DECLARE_NO_IMPLEMENTED_INTERFACES(LinphoneContent); + +BELLE_SIP_INSTANCIATE_VPTR(LinphoneContent, belle_sip_object_t, + (belle_sip_object_destroy_t)linphone_content_destroy, + (belle_sip_object_clone_t)linphone_content_clone, + NULL, // marshal + TRUE +); + + +LinphoneContent * linphone_core_create_content(LinphoneCore *lc) { + return linphone_content_new(); +} + +LinphoneContent * linphone_content_ref(LinphoneContent *content) { + belle_sip_object_ref(content); + return content; +} + +void linphone_content_unref(LinphoneContent *content) { + belle_sip_object_unref(content); +} + +void *linphone_content_get_user_data(const LinphoneContent *content) { + return content->user_data; +} + +void linphone_content_set_user_data(LinphoneContent *content, void *ud) { + content->user_data = ud; +} + +const char * linphone_content_get_type(const LinphoneContent *content) { + return content->lcp.type; +} + +void linphone_content_set_type(LinphoneContent *content, const char *type) { + if (content->lcp.type != NULL) { + belle_sip_free(content->lcp.type); + content->lcp.type = NULL; + } + if (type != NULL) { + content->lcp.type = belle_sip_strdup(type); + } +} + +const char * linphone_content_get_subtype(const LinphoneContent *content) { + return content->lcp.subtype; +} + +void linphone_content_set_subtype(LinphoneContent *content, const char *subtype) { + if (content->lcp.subtype != NULL) { + belle_sip_free(content->lcp.subtype); + content->lcp.subtype = NULL; + } + if (subtype != NULL) { + content->lcp.subtype = belle_sip_strdup(subtype); + } +} + +void * linphone_content_get_buffer(const LinphoneContent *content) { + return content->lcp.data; +} + +void linphone_content_set_buffer(LinphoneContent *content, const void *buffer, size_t size) { + content->lcp.size = size; + content->lcp.data = belle_sip_malloc(size + 1); + memcpy(content->lcp.data, buffer, size); + ((char *)content->lcp.data)[size] = '\0'; +} + +char * linphone_content_get_string_buffer(const LinphoneContent *content) { + return (char *)content->lcp.data; +} + +void linphone_content_set_string_buffer(LinphoneContent *content, const char *buffer) { + content->lcp.size = strlen(buffer); + content->lcp.data = belle_sip_strdup(buffer); +} + +size_t linphone_content_get_size(const LinphoneContent *content) { + return content->lcp.size; +} + +void linphone_content_set_size(LinphoneContent *content, size_t size) { + content->lcp.size = size; +} + +const char * linphone_content_get_encoding(const LinphoneContent *content) { + return content->lcp.encoding; +} + +void linphone_content_set_encoding(LinphoneContent *content, const char *encoding) { + if (content->lcp.encoding != NULL) { + belle_sip_free(content->lcp.encoding); + content->lcp.encoding = NULL; + } + if (encoding != NULL) { + content->lcp.encoding = belle_sip_strdup(encoding); + } +} + +const char * linphone_content_get_name(const LinphoneContent *content) { + return content->lcp.name; +} + +void linphone_content_set_name(LinphoneContent *content, const char *name) { + if (content->lcp.name != NULL) { + belle_sip_free(content->lcp.name); + content->lcp.name = NULL; + } + if (name != NULL) { + content->lcp.name = belle_sip_strdup(name); + } +} + + + +LinphoneContent * linphone_content_new(void) { + LinphoneContent *content = belle_sip_object_new(LinphoneContent); + belle_sip_object_ref(content); + content->owned_fields = TRUE; + return content; +} + +LinphoneContent * linphone_content_copy(const LinphoneContent *ref) { + return (LinphoneContent *)belle_sip_object_ref(belle_sip_object_clone(BELLE_SIP_OBJECT(ref))); +} + +LinphoneContent * linphone_content_from_sal_body(const SalBody *ref) { + if (ref && ref->type) { + LinphoneContent *content = linphone_content_new(); + linphone_content_set_type(content, ref->type); + linphone_content_set_subtype(content, ref->subtype); + linphone_content_set_encoding(content, ref->encoding); + if (ref->data != NULL) { + linphone_content_set_buffer(content, ref->data, ref->size); + } else { + linphone_content_set_size(content, ref->size); + } + return content; + } + return NULL; +} + +SalBody *sal_body_from_content(SalBody *body, const LinphoneContent *content) { + if (content && linphone_content_get_type(content)) { + body->type = linphone_content_get_type(content); + body->subtype = linphone_content_get_subtype(content); + body->data = linphone_content_get_buffer(content); + body->size = linphone_content_get_size(content); + body->encoding = linphone_content_get_encoding(content); + return body; + } + return NULL; +} + + + +LinphoneContent * linphone_content_private_to_linphone_content(const LinphoneContentPrivate *lcp) { + LinphoneContent *content = belle_sip_object_new(LinphoneContent); + memcpy(&content->lcp, lcp, sizeof(LinphoneContentPrivate)); + content->owned_fields = FALSE; + return content; +} + +LinphoneContentPrivate * linphone_content_to_linphone_content_private(const LinphoneContent *content) { + return (LinphoneContentPrivate *)&content->lcp; +} diff --git a/coreapi/content.h b/coreapi/content.h new file mode 100644 index 000000000..400f5f5fb --- /dev/null +++ b/coreapi/content.h @@ -0,0 +1,228 @@ +/* +content.h +Copyright (C) 2010-2014 Belledonne Communications SARL + +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 2 +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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#ifndef LINPHONE_CONTENT_H_ +#define LINPHONE_CONTENT_H_ + + +#ifdef __cplusplus +extern "C" { +#endif + + +/** + * @addtogroup misc + * @{ + */ + +/** + * The LinphoneContent object holds data that can be embedded in a signaling message. +**/ +struct _LinphoneContent; +/** + * The LinphoneContent object holds data that can be embedded in a signaling message. +**/ +typedef struct _LinphoneContent LinphoneContent; + +/** + * @deprecated Use LinphoneContent objects instead of this structure. + */ +struct _LinphoneContentPrivate{ + char *type; /** -#include - -static int file_player_open(LinphonePlayer *obj, const char *filename); -static int file_player_start(LinphonePlayer *obj); -static int file_player_pause(LinphonePlayer *obj); -static int file_player_seek(LinphonePlayer *obj, int time_ms); -static MSPlayerState file_player_get_state(LinphonePlayer *obj); -static int file_player_get_duration(LinphonePlayer *obj); -static int file_player_get_current_position(LinphonePlayer *obj); -static void file_player_close(LinphonePlayer *obj); -static void file_player_eof_callback(void *user_data); - -LinphonePlayer *linphone_core_create_file_player(LinphoneCore *lc, MSSndCard *snd_card, const char *video_out, void *window_id) { - LinphonePlayer *obj = ms_new0(LinphonePlayer, 1); - if(snd_card == NULL) snd_card = lc->sound_conf.play_sndcard; - if(video_out == NULL) video_out = linphone_core_get_video_display_filter(lc); - obj->impl = ms_file_player_new(snd_card, video_out, window_id); - obj->open = file_player_open; - obj->start = file_player_start; - obj->pause = file_player_pause; - obj->seek = file_player_seek; - obj->get_state = file_player_get_state; - obj->get_duration = file_player_get_duration; - obj->get_position = file_player_get_current_position; - obj->close = file_player_close; - ms_file_player_set_eof_callback((MSFilePlayer *)obj->impl, file_player_eof_callback, obj); - return obj; -} - -void linphone_file_player_destroy(LinphonePlayer *obj) { - ms_file_player_free((MSFilePlayer *)obj->impl); - ms_free(obj); -} - -bool_t linphone_file_player_matroska_supported(void) { - return ms_file_player_matroska_supported(); -} - -static int file_player_open(LinphonePlayer *obj, const char *filename) { - return ms_file_player_open((MSFilePlayer *)obj->impl, filename) ? 0 : -1; -} - -static int file_player_start(LinphonePlayer *obj) { - return ms_file_player_start((MSFilePlayer *)obj->impl) ? 0 : -1; -} - -static int file_player_pause(LinphonePlayer *obj) { - ms_file_player_pause((MSFilePlayer *)obj->impl); - return 0; -} - -static int file_player_seek(LinphonePlayer *obj, int time_ms) { - return ms_file_player_seek((MSFilePlayer *)obj->impl, time_ms) ? 0 : -1; -} - -static MSPlayerState file_player_get_state(LinphonePlayer *obj) { - return ms_file_player_get_state((MSFilePlayer *)obj->impl); -} - -static int file_player_get_duration(LinphonePlayer *obj) { - return ms_file_player_get_duration((MSFilePlayer *)obj->impl); -} - -static int file_player_get_current_position(LinphonePlayer *obj) { - return ms_file_player_get_current_position((MSFilePlayer *)obj->impl); -} - -static void file_player_close(LinphonePlayer *obj) { - ms_file_player_close((MSFilePlayer *)obj->impl); -} - -static void file_player_eof_callback(void *user_data) { - LinphonePlayer *obj = (LinphonePlayer *)user_data; - obj->cb(obj, obj->user_data); -} diff --git a/coreapi/friend.c b/coreapi/friend.c index d1ecd560c..44a2a6f82 100644 --- a/coreapi/friend.c +++ b/coreapi/friend.c @@ -65,7 +65,7 @@ const char *linphone_online_status_to_string(LinphoneOnlineStatus ss){ case LinphoneStatusVacation: str=_("Vacation"); default: - str=_("Unknown-bug"); + str=_("Unknown status"); } return str; } diff --git a/coreapi/gitversion.cmake b/coreapi/gitversion.cmake index 5c6facdab..23fecb10c 100644 --- a/coreapi/gitversion.cmake +++ b/coreapi/gitversion.cmake @@ -1,5 +1,5 @@ ############################################################################ -# CMakeLists.txt +# gitversion.cmake # Copyright (C) 2014 Belledonne Communications, Grenoble France # ############################################################################ diff --git a/coreapi/help/filetransfer.c b/coreapi/help/filetransfer.c index 01f6f3c2a..c592c501b 100644 --- a/coreapi/help/filetransfer.c +++ b/coreapi/help/filetransfer.c @@ -48,14 +48,14 @@ static void stop(int signum){ /** * function invoked to report file transfer progress. * */ -static void file_transfer_progress_indication(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t progress) { +static void file_transfer_progress_indication(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total) { const LinphoneAddress* from_address = linphone_chat_message_get_from(message); const LinphoneAddress* to_address = linphone_chat_message_get_to(message); char *address = linphone_chat_message_is_outgoing(message)?linphone_address_as_string(to_address):linphone_address_as_string(from_address); - printf(" File transfer [%d%%] %s of type [%s/%s] %s [%s] \n", (int)progress + printf(" File transfer [%d%%] %s of type [%s/%s] %s [%s] \n", (int)((offset *100)/total) ,(linphone_chat_message_is_outgoing(message)?"sent":"received") - , content->type - , content->subtype + , linphone_content_get_type(content) + , linphone_content_get_subtype(content) ,(linphone_chat_message_is_outgoing(message)?"to":"from") , address); free(address); @@ -63,7 +63,7 @@ static void file_transfer_progress_indication(LinphoneCore *lc, LinphoneChatMess /** * function invoked when a file transfer is received. **/ -static void file_transfer_received(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size){ +static void file_transfer_received(LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size){ FILE* file=NULL; if (!linphone_chat_message_get_user_data(message)) { /*first chunk, creating file*/ @@ -92,7 +92,7 @@ char big_file [128000]; /* * function called when the file transfer is initiated. file content should be feed into object LinphoneContent * */ -static void file_transfer_send(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size){ +static void file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size){ int offset=-1; if (!linphone_chat_message_get_user_data(message)) { @@ -131,9 +131,9 @@ static void linphone_file_transfer_state_changed(LinphoneChatMessage* msg,Linpho */ static void message_received(LinphoneCore *lc, LinphoneChatRoom *cr, LinphoneChatMessage *msg) { const LinphoneContent *file_transfer_info = linphone_chat_message_get_file_transfer_information(msg); - printf ("Do you really want to download %s (size %ld)?[Y/n]\nOk, let's go\n", file_transfer_info->name, (long int)file_transfer_info->size); + printf ("Do you really want to download %s (size %ld)?[Y/n]\nOk, let's go\n", linphone_content_get_name(file_transfer_info), (long int)linphone_content_get_size(file_transfer_info)); - linphone_chat_message_start_file_download(msg, linphone_file_transfer_state_changed); + linphone_chat_message_start_file_download(msg, linphone_file_transfer_state_changed, NULL); } @@ -145,8 +145,9 @@ int main(int argc, char *argv[]){ int i; const char* big_file_content="big file"; LinphoneChatRoom* chat_room; - LinphoneContent content; + LinphoneContent* content; LinphoneChatMessage* chat_message; + LinphoneChatMessageCbs *cbs; /*seting dummy file content to something*/ for (i=0;iev && i%100==0){ - LinphoneContent content; + LinphoneContentPrivate content; content.type="application"; content.subtype="goodxml"; content.data="really cool"; content.size=strlen((const char*)content.data); - linphone_event_notify(data->ev,&content); + linphone_event_notify(data->ev,LINPHONE_CONTENT(&content)); } } diff --git a/coreapi/info.c b/coreapi/info.c index ad8cd1f8e..6b2eb33fa 100644 --- a/coreapi/info.c +++ b/coreapi/info.c @@ -29,98 +29,23 @@ struct _LinphoneInfoMessage{ - LinphoneContent content; + LinphoneContent *content; SalCustomHeader *headers; }; -#define SET_STRING(ptr,field,val) \ - if (ptr->field) { \ - ms_free(ptr->field); \ - ptr->field=NULL; \ - } \ - if (val){ \ - ptr->field=ms_strdup(val); \ - } - -void linphone_content_copy(LinphoneContent *obj, const LinphoneContent *ref){ - SET_STRING(obj,type,ref->type); - SET_STRING(obj,subtype,ref->subtype); - SET_STRING(obj,encoding,ref->encoding); - SET_STRING(obj,name,ref->name); - if (obj->data) { - ms_free(obj->data); - obj->data=NULL; - } - if (ref->data){ - obj->data=ms_malloc(ref->size+1); - memcpy(obj->data, ref->data, ref->size); - ((char*)obj->data)[ref->size]='\0'; - } - obj->size=ref->size; -} - -void linphone_content_uninit(LinphoneContent * obj){ - if (obj->type) ms_free(obj->type); - if (obj->subtype) ms_free(obj->subtype); - if (obj->data) ms_free(obj->data); - if (obj->encoding) ms_free(obj->encoding); - if (obj->name) ms_free(obj->name); -} - -LinphoneContent *linphone_content_copy_from_sal_body(LinphoneContent *obj, const SalBody *ref){ - SET_STRING(obj,type,ref->type); - SET_STRING(obj,subtype,ref->subtype); - SET_STRING(obj,encoding,ref->encoding); - if (obj->data) { - ms_free(obj->data); - obj->data=NULL; - } - if (ref->data){ - obj->data=ms_malloc(ref->size+1); - memcpy(obj->data, ref->data, ref->size); - ((char*)obj->data)[ref->size]='\0'; - } - obj->size=ref->size; - return obj; -} - -const LinphoneContent *linphone_content_from_sal_body(LinphoneContent *obj, const SalBody *ref){ - if (ref && ref->type){ - obj->type=(char*)ref->type; - obj->subtype=(char*)ref->subtype; - obj->data=(void*)ref->data; - obj->encoding=(char*)ref->encoding; - obj->size=ref->size; - return obj; - } - return NULL; -} - -SalBody *sal_body_from_content(SalBody *body, const LinphoneContent *lc){ - if (lc && lc->type){ - body->type=lc->type; - body->subtype=lc->subtype; - body->data=lc->data; - body->size=lc->size; - body->encoding=lc->encoding; - return body; - } - return NULL; -} - /** * Destroy a LinphoneInfoMessage **/ void linphone_info_message_destroy(LinphoneInfoMessage *im){ - linphone_content_uninit(&im->content); - sal_custom_header_free(im->headers); + if (im->content) linphone_content_unref(im->content); + if (im->headers) sal_custom_header_free(im->headers); ms_free(im); } LinphoneInfoMessage *linphone_info_message_copy(const LinphoneInfoMessage *orig){ LinphoneInfoMessage *im=ms_new0(LinphoneInfoMessage,1); - linphone_content_copy(&im->content,&orig->content); + if (orig->content) im->content=linphone_content_copy(orig->content); if (orig->headers) im->headers=sal_custom_header_clone(orig->headers); return im; } @@ -146,7 +71,7 @@ LinphoneInfoMessage *linphone_core_create_info_message(LinphoneCore *lc){ int linphone_call_send_info_message(LinphoneCall *call, const LinphoneInfoMessage *info){ SalBody body; sal_op_set_sent_custom_header(call->op,info->headers); - return sal_send_info(call->op,NULL, NULL, sal_body_from_content(&body,&info->content)); + return sal_send_info(call->op,NULL, NULL, sal_body_from_content(&body,info->content)); } /** @@ -176,14 +101,14 @@ const char *linphone_info_message_get_header(const LinphoneInfoMessage *im, cons * All fields of the LinphoneContent are copied, thus the application can destroy/modify/recycloe the content object freely ater the function returns. **/ void linphone_info_message_set_content(LinphoneInfoMessage *im, const LinphoneContent *content){ - linphone_content_copy(&im->content,content); + im->content=linphone_content_copy(content); } /** * Returns the info message's content as a #LinphoneContent structure. **/ const LinphoneContent * linphone_info_message_get_content(const LinphoneInfoMessage *im){ - return im->content.type ? &im->content : NULL; + return (im->content && linphone_content_get_type(im->content)) ? im->content : NULL; } void linphone_core_notify_info_message(LinphoneCore* lc,SalOp *op, const SalBody *body){ @@ -191,7 +116,7 @@ void linphone_core_notify_info_message(LinphoneCore* lc,SalOp *op, const SalBody if (call){ LinphoneInfoMessage *info=ms_new0(LinphoneInfoMessage,1); info->headers=sal_custom_header_clone(sal_op_get_recv_custom_header(op)); - if (body) linphone_content_copy_from_sal_body(&info->content,body); + if (body) info->content=linphone_content_from_sal_body(body); linphone_core_notify_info_received(lc,call,info); linphone_info_message_destroy(info); } diff --git a/coreapi/linphone_tunnel.cc b/coreapi/linphone_tunnel.cc index beabd43a8..9dd4e8adf 100644 --- a/coreapi/linphone_tunnel.cc +++ b/coreapi/linphone_tunnel.cc @@ -246,6 +246,10 @@ bool_t linphone_tunnel_connected(const LinphoneTunnel *tunnel){ return bcTunnel(tunnel)->isConnected(); } +bool_t linphone_tunnel_get_activated(const LinphoneTunnel *tunnel){ + return bcTunnel(tunnel)->isActivated(); +} + static OrtpLogFunc tunnelOrtpLogHandler=NULL; /* diff --git a/coreapi/linphone_tunnel.h b/coreapi/linphone_tunnel.h index 8bf94fcef..f071f3c37 100644 --- a/coreapi/linphone_tunnel.h +++ b/coreapi/linphone_tunnel.h @@ -60,7 +60,7 @@ typedef enum _LinphoneTunnelMode { } LinphoneTunnelMode; /** - * @brief Convert a string into LinphoneTunnelMode enum + * Convert a string into LinphoneTunnelMode enum * @param string String to convert * @return An LinphoneTunnelMode enum. If the passed string is NULL or * does not match with any mode, the LinphoneTunnelModeDisable is returned. @@ -68,7 +68,7 @@ typedef enum _LinphoneTunnelMode { LINPHONE_PUBLIC LinphoneTunnelMode string_to_tunnel_mode(const char *string); /** - * @brief Convert a tunnel mode enum into string + * Convert a tunnel mode enum into string * @param mode Enum to convert * @return "disable", "enable" or "auto" */ @@ -80,170 +80,175 @@ LINPHONE_PUBLIC const char *tunnel_mode_to_string(LinphoneTunnelMode mode); LINPHONE_PUBLIC LinphoneTunnelConfig *linphone_tunnel_config_new(void); /** - * Set address of server. - * - * @param tunnel configuration object - * @param host tunnel server ip address + * Set the IP address or hostname of the tunnel server. + * @param tunnel LinphoneTunnelConfig object + * @param host The tunnel server IP address or hostname */ LINPHONE_PUBLIC void linphone_tunnel_config_set_host(LinphoneTunnelConfig *tunnel, const char *host); /** - * Get address of server. - * - * @param tunnel configuration object + * Get the IP address or hostname of the tunnel server. + * @param tunnel LinphoneTunnelConfig object + * @return The tunnel server IP address or hostname */ LINPHONE_PUBLIC const char *linphone_tunnel_config_get_host(const LinphoneTunnelConfig *tunnel); /** * Set tls port of server. - * - * @param tunnel configuration object - * @param port tunnel server tls port, recommended value is 443 + * @param tunnel LinphoneTunnelConfig object + * @param port The tunnel server TLS port, recommended value is 443 */ LINPHONE_PUBLIC void linphone_tunnel_config_set_port(LinphoneTunnelConfig *tunnel, int port); /** - * Get tls port of server. - * - * @param tunnel configuration object + * Get the TLS port of the tunnel server. + * @param tunnel LinphoneTunnelConfig object + * @return The TLS port of the tunnel server */ LINPHONE_PUBLIC int linphone_tunnel_config_get_port(const LinphoneTunnelConfig *tunnel); /** - * Set the remote port on the tunnel server side used to test udp reachability. - * - * @param tunnel configuration object - * @param remote_udp_mirror_port remote port on the tunnel server side used to test udp reachability, set to -1 to disable the feature + * Set the remote port on the tunnel server side used to test UDP reachability. + * This is used when the mode is set auto, to detect whether the tunnel has to be enabled or not. + * @param tunnel LinphoneTunnelConfig object + * @param remote_udp_mirror_port The remote port on the tunnel server side used to test UDP reachability, set to -1 to disable the feature */ LINPHONE_PUBLIC void linphone_tunnel_config_set_remote_udp_mirror_port(LinphoneTunnelConfig *tunnel, int remote_udp_mirror_port); /** - * Get the remote port on the tunnel server side used to test udp reachability. - * - * @param tunnel configuration object + * Get the remote port on the tunnel server side used to test UDP reachability. + * This is used when the mode is set auto, to detect whether the tunnel has to be enabled or not. + * @param tunnel LinphoneTunnelConfig object + * @return The remote port on the tunnel server side used to test UDP reachability */ LINPHONE_PUBLIC int linphone_tunnel_config_get_remote_udp_mirror_port(const LinphoneTunnelConfig *tunnel); /** - * Set the udp packet round trip delay in ms for a tunnel configuration. - * - * @param tunnel configuration object - * @param delay udp packet round trip delay in ms considered as acceptable. recommended value is 1000 ms. + * Set the UDP packet round trip delay in ms for a tunnel configuration. + * @param tunnel LinphoneTunnelConfig object + * @param delay The UDP packet round trip delay in ms considered as acceptable (recommended value is 1000 ms). */ LINPHONE_PUBLIC void linphone_tunnel_config_set_delay(LinphoneTunnelConfig *tunnel, int delay); /** - * Get the udp packet round trip delay in ms for a tunnel configuration. - * - * @param tunnel configuration object + * Get the UDP packet round trip delay in ms for a tunnel configuration. + * @param tunnel LinphoneTunnelConfig object + * @return The UDP packet round trip delay in ms. */ LINPHONE_PUBLIC int linphone_tunnel_config_get_delay(const LinphoneTunnelConfig *tunnel); /** * Destroy a tunnel configuration - * - * @param tunnel configuration object + * @param tunnel LinphoneTunnelConfig object */ LINPHONE_PUBLIC void linphone_tunnel_config_destroy(LinphoneTunnelConfig *tunnel); /** - * Add tunnel server configuration - * - * @param tunnel object - * @param tunnel_config object + * Add a tunnel server configuration. + * @param tunnel LinphoneTunnel object + * @param tunnel_config LinphoneTunnelConfig object */ LINPHONE_PUBLIC void linphone_tunnel_add_server(LinphoneTunnel *tunnel, LinphoneTunnelConfig *tunnel_config); /** - * @brief Remove tunnel server configuration - * @param tunnel object - * @param tunnel_config object + * Remove a tunnel server configuration. + * @param tunnel LinphoneTunnel object + * @param tunnel_config LinphoneTunnelConfig object */ LINPHONE_PUBLIC void linphone_tunnel_remove_server(LinphoneTunnel *tunnel, LinphoneTunnelConfig *tunnel_config); /** - * @brief Get added servers - * @param tunnel A LinphoneTunnel object - * @return A list of LinphoneTunnelConfig objects + * Get added servers + * @param tunnel LinphoneTunnel object + * @return \mslist{LinphoneTunnelConfig} */ LINPHONE_PUBLIC const MSList *linphone_tunnel_get_servers(const LinphoneTunnel *tunnel); /** - * @brief Removes all tunnel server address previously entered with addServer() - * @param tunnel A LinphoneTunnel object + * Remove all tunnel server addresses previously entered with linphone_tunnel_add_server() + * @param tunnel LinphoneTunnel object **/ LINPHONE_PUBLIC void linphone_tunnel_clean_servers(LinphoneTunnel *tunnel); /** - * @brief Set tunnel mode + * Set the tunnel mode. * The tunnel mode can be 'enable', 'disable' or 'auto' * If the mode is set to 'auto', the tunnel manager will try to established an RTP session * with the tunnel server on the UdpMirrorPort. If the connection fail, the tunnel is automatically * activated whereas the tunnel is automatically disabled if the connection succeed. - * @param tunnel object - * @param mode See #LinphoneTunnelMode + * @param tunnel LinphoneTunnel object + * @param mode The desired LinphoneTunnelMode **/ LINPHONE_PUBLIC void linphone_tunnel_set_mode(LinphoneTunnel *tunnel, LinphoneTunnelMode mode); /** - * @brief Get the tunnel mode - * @param tunnel A LinphoneTunnel object - * @return Return a #LinphoneTunnelMode enumeration + * Get the tunnel mode + * @param tunnel LinphoneTunnel object + * @return The current LinphoneTunnelMode **/ LINPHONE_PUBLIC LinphoneTunnelMode linphone_tunnel_get_mode(const LinphoneTunnel *tunnel); /** - * @brief Check whether the tunnel is connected - * @param tunnel LinphoneTunnel object - * @return True if the tunnel is connected + * Returns whether the tunnel is activated. If mode is set to auto, this gives indication whether the automatic detection determined + * that tunnel was necessary or not. + * @param tunnel the tunnel + * @return TRUE if tunnel is in use, FALSE otherwise. +**/ +LINPHONE_PUBLIC bool_t linphone_tunnel_get_activated(const LinphoneTunnel *tunnel); + + +/** + * Check whether the tunnel is connected + * @param tunnel LinphoneTunnel object + * @return A boolean value telling if the tunnel is connected **/ LINPHONE_PUBLIC bool_t linphone_tunnel_connected(const LinphoneTunnel *tunnel); /** - * @param tunnel object - * Forces reconnection to the tunnel server. + * Force reconnection to the tunnel server. * This method is useful when the device switches from wifi to Edge/3G or vice versa. In most cases the tunnel client socket * won't be notified promptly that its connection is now zombie, so it is recommended to call this method that will cause * the lost connection to be closed and new connection to be issued. + * @param tunnel LinphoneTunnel object **/ LINPHONE_PUBLIC void linphone_tunnel_reconnect(LinphoneTunnel *tunnel); /** - * @brief Set whether SIP packets must be directly sent to a UA or pass through the tunnel - * @param tunnel Tunnel to configure + * Set whether SIP packets must be directly sent to a UA or pass through the tunnel + * @param tunnel LinphoneTunnel object * @param enable If true, SIP packets shall pass through the tunnel */ LINPHONE_PUBLIC void linphone_tunnel_enable_sip(LinphoneTunnel *tunnel, bool_t enable); /** - * @brief Check whether tunnel is set to transport SIP packets - * @param tunnel Tunnel to check - * @return True, SIP packets shall pass through through tunnel + * Check whether tunnel is set to transport SIP packets + * @param tunnel LinphoneTunnel object + * @return A boolean value telling whether SIP packets shall pass through the tunnel */ LINPHONE_PUBLIC bool_t linphone_tunnel_sip_enabled(const LinphoneTunnel *tunnel); /** * Set an optional http proxy to go through when connecting to tunnel server. * @param tunnel LinphoneTunnel object - * @param host Http proxy host. - * @param port http proxy port. - * @param username optional http proxy username if the proxy request authentication. Currently only basic authentication is supported. Use NULL if not needed. - * @param passwd optional http proxy password. Use NULL if not needed. + * @param host http proxy host + * @param port http proxy port + * @param username Optional http proxy username if the proxy request authentication. Currently only basic authentication is supported. Use NULL if not needed. + * @param passwd Optional http proxy password. Use NULL if not needed. **/ LINPHONE_PUBLIC void linphone_tunnel_set_http_proxy(LinphoneTunnel *tunnel, const char *host, int port, const char* username,const char* passwd); /** * Retrieve optional http proxy configuration previously set with linphone_tunnel_set_http_proxy(). * @param tunnel LinphoneTunnel object - * @param host Http proxy host. - * @param port http proxy port. - * @param username optional http proxy username if the proxy request authentication. Currently only basic authentication is supported. Use NULL if not needed. - * @param passwd optional http proxy password. Use NULL if not needed. + * @param host http proxy host + * @param port http proxy port + * @param username Optional http proxy username if the proxy request authentication. Currently only basic authentication is supported. Use NULL if not needed. + * @param passwd Optional http proxy password. Use NULL if not needed. **/ LINPHONE_PUBLIC void linphone_tunnel_get_http_proxy(LinphoneTunnel*tunnel,const char **host, int *port, const char **username, const char **passwd); /** - * @brief Set authentication info for the http proxy + * Set authentication info for the http proxy * @param tunnel LinphoneTunnel object * @param username User name * @param passwd Password @@ -251,38 +256,37 @@ LINPHONE_PUBLIC void linphone_tunnel_get_http_proxy(LinphoneTunnel*tunnel,const LINPHONE_PUBLIC void linphone_tunnel_set_http_proxy_auth_info(LinphoneTunnel*tunnel, const char* username,const char* passwd); /** - * @deprecated Replaced by linphone_tunnel_set_mode() - * @brief Sets whether tunneling of SIP and RTP is required. - * @param tunnel object + * Sets whether tunneling of SIP and RTP is required. + * @param tunnel object * @param enabled If true enter in tunneled mode, if false exits from tunneled mode. * The TunnelManager takes care of refreshing SIP registration when switching on or off the tunneled mode. - * + * @deprecated Replaced by linphone_tunnel_set_mode() **/ LINPHONE_PUBLIC void linphone_tunnel_enable(LinphoneTunnel *tunnel, bool_t enabled); /** - * @deprecated Replaced by linphone_tunnel_get_mode() - * @brief Check whether tunnel is enabled - * @param tunnel Tunnel object + * Check whether tunnel is enabled + * @param tunnel Tunnel object * @return Returns a boolean indicating whether tunneled operation is enabled. + * @deprecated Replaced by linphone_tunnel_get_mode() **/ LINPHONE_PUBLIC bool_t linphone_tunnel_enabled(const LinphoneTunnel *tunnel); /** - * @deprecated Replaced by linphone_tunnel_set_mode(LinphoneTunnelModeAuto) - * @brief Start tunnel need detection. + * Start tunnel need detection. * @param tunnel object - * In auto detect mode, the tunnel manager try to establish a real time rtp cummunication with the tunnel server on specified port. - *
In case of success, the tunnel is automatically turned off. Otherwise, if no udp commmunication is feasible, tunnel mode is turned on. + * In auto detect mode, the tunnel manager try to establish a real time rtp communication with the tunnel server on specified port. + *
In case of success, the tunnel is automatically turned off. Otherwise, if no udp communication is feasible, tunnel mode is turned on. *
Call this method each time to run the auto detection algorithm + * @deprecated Replaced by linphone_tunnel_set_mode(LinphoneTunnelModeAuto) */ LINPHONE_PUBLIC void linphone_tunnel_auto_detect(LinphoneTunnel *tunnel); /** - * @deprecated Replaced by linphone_tunnel_get_mode() - * @brief Tells whether tunnel auto detection is enabled. + * Tell whether tunnel auto detection is enabled. * @param[in] tunnel LinphoneTunnel object. * @return TRUE if auto detection is enabled, FALSE otherwise. + * @deprecated Replaced by linphone_tunnel_get_mode() */ LINPHONE_PUBLIC bool_t linphone_tunnel_auto_detect_enabled(LinphoneTunnel *tunnel); diff --git a/coreapi/linphone_tunnel_stubs.c b/coreapi/linphone_tunnel_stubs.c index 72693463b..bfe793be6 100644 --- a/coreapi/linphone_tunnel_stubs.c +++ b/coreapi/linphone_tunnel_stubs.c @@ -63,6 +63,9 @@ bool_t linphone_tunnel_connected(const LinphoneTunnel *tunnel){ return FALSE; } +bool_t linphone_tunnel_get_activated(const LinphoneTunnel *tunnel){ + return FALSE; +} void linphone_tunnel_enable_logs_with_handler(LinphoneTunnel *tunnel, bool_t enabled, OrtpLogFunc logHandler){ } diff --git a/coreapi/linphonecall.c b/coreapi/linphonecall.c index 5e7f9e5af..dc991c616 100644 --- a/coreapi/linphonecall.c +++ b/coreapi/linphonecall.c @@ -183,7 +183,7 @@ static void linphone_call_audiostream_encryption_changed(void *data, bool_t encr { const LinphoneCallParams *params=linphone_call_get_current_params(call); if (params->has_video) { - OrtpZrtpParams params; + MSZrtpParams params; ms_message("Trying to enable encryption on video stream"); params.zid_file=NULL; //unused video_stream_enable_zrtp(call->videostream,call->audiostream,¶ms); @@ -219,9 +219,9 @@ void linphone_call_set_authentication_token_verified(LinphoneCall *call, bool_t ms_error("linphone_call_set_authentication_token_verified(): No zrtp context."); } if (!call->auth_token_verified && verified){ - ortp_zrtp_sas_verified(call->audiostream->ms.sessions.zrtp_context); + ms_zrtp_sas_verified(call->audiostream->ms.sessions.zrtp_context); }else if (call->auth_token_verified && !verified){ - ortp_zrtp_sas_reset_verified(call->audiostream->ms.sessions.zrtp_context); + ms_zrtp_sas_reset_verified(call->audiostream->ms.sessions.zrtp_context); } call->auth_token_verified=verified; propagate_encryption_changed(call); @@ -381,6 +381,19 @@ void linphone_call_increment_local_media_description(LinphoneCall *call){ md->session_ver++; } +void linphone_call_update_local_media_description_from_ice_or_upnp(LinphoneCall *call){ + if (call->ice_session != NULL) { + _update_local_media_description_from_ice(call->localdesc, call->ice_session); + linphone_core_update_ice_state_in_call_stats(call); + } +#ifdef BUILD_UPNP + if(call->upnp_session != NULL) { + linphone_core_update_local_media_description_from_upnp(call->localdesc, call->upnp_session); + linphone_core_update_upnp_state_in_call_stats(call); + } +#endif //BUILD_UPNP +} + void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall *call){ MSList *l; PayloadType *pt; @@ -463,18 +476,9 @@ void linphone_call_make_local_media_description(LinphoneCore *lc, LinphoneCall * setup_rtcp_xr(call, md); update_media_description_from_stun(md,&call->ac,&call->vc); - if (call->ice_session != NULL) { - linphone_core_update_local_media_description_from_ice(md, call->ice_session); - linphone_core_update_ice_state_in_call_stats(call); - } -#ifdef BUILD_UPNP - if(call->upnp_session != NULL) { - linphone_core_update_local_media_description_from_upnp(md, call->upnp_session); - linphone_core_update_upnp_state_in_call_stats(call); - } -#endif //BUILD_UPNP - linphone_address_destroy(addr); call->localdesc=md; + linphone_call_update_local_media_description_from_ice_or_upnp(call); + linphone_address_destroy(addr); if (old_md){ call->localdesc_changed=sal_media_description_equals(md,old_md); sal_media_description_unref(old_md); @@ -564,7 +568,6 @@ static void linphone_call_init_common(LinphoneCall *call, LinphoneAddress *from, ms_message("New LinphoneCall [%p] initialized (LinphoneCore version: %s)",call,linphone_core_get_version()); call->state=LinphoneCallIdle; call->transfer_state = LinphoneCallIdle; - call->media_start_time=0; call->log=linphone_call_log_new(call->dir, from, to); call->camera_enabled=TRUE; call->current_params = linphone_call_params_new(); @@ -841,7 +844,50 @@ LinphoneCall * linphone_call_new_incoming(LinphoneCore *lc, LinphoneAddress *fro return call; } -/* this function is called internally to get rid of a call. +/* + * Frees the media resources of the call. + * This has to be done at the earliest, unlike signaling resources that sometimes need to be kept a bit more longer. + * It is called by linphone_call_set_terminated() (for termination of calls signaled to the application), or directly by the destructor of LinphoneCall + * (_linphone_call_destroy) if the call was never notified to the application. + */ +void linphone_call_free_media_resources(LinphoneCall *call){ + linphone_call_stop_media_streams(call); + ms_media_stream_sessions_uninit(&call->sessions[0]); + ms_media_stream_sessions_uninit(&call->sessions[1]); + linphone_call_delete_upnp_session(call); + linphone_call_delete_ice_session(call); + linphone_call_stats_uninit(&call->stats[0]); + linphone_call_stats_uninit(&call->stats[1]); +} + +/* + * Called internally when reaching the Released state, to perform cleanups to break circular references. +**/ +static void linphone_call_set_released(LinphoneCall *call){ + if (call->op!=NULL) { + /*transfer the last error so that it can be obtained even in Released state*/ + if (call->non_op_error.reason==SalReasonNone){ + const SalErrorInfo *ei=sal_op_get_error_info(call->op); + sal_error_info_set(&call->non_op_error,ei->reason,ei->protocol_code,ei->status_string,ei->warnings); + } + /* so that we cannot have anymore upcalls for SAL + concerning this call*/ + sal_op_release(call->op); + call->op=NULL; + } + /*it is necessary to reset pointers to other call to prevent circular references that would result in memory never freed.*/ + if (call->referer){ + linphone_call_unref(call->referer); + call->referer=NULL; + } + if (call->transfer_target){ + linphone_call_unref(call->transfer_target); + call->transfer_target=NULL; + } + linphone_call_unref(call); +} + +/* this function is called internally to get rid of a call that was notified to the application, because it reached the end or error state. It performs the following tasks: - remove the call from the internal list of calls - update the call logs accordingly @@ -850,17 +896,9 @@ LinphoneCall * linphone_call_new_incoming(LinphoneCore *lc, LinphoneAddress *fro static void linphone_call_set_terminated(LinphoneCall *call){ LinphoneCore *lc=call->core; - linphone_call_stop_media_streams(call); - ms_media_stream_sessions_uninit(&call->sessions[0]); - ms_media_stream_sessions_uninit(&call->sessions[1]); - linphone_call_delete_upnp_session(call); - linphone_call_delete_ice_session(call); - linphone_core_update_allocated_audio_bandwidth(lc); - linphone_call_stats_uninit(&call->stats[0]); - linphone_call_stats_uninit(&call->stats[1]); + linphone_call_free_media_resources(call); linphone_call_log_completed(call); - if (call == lc->current_call){ ms_message("Resetting the current call"); lc->current_call=NULL; @@ -869,7 +907,6 @@ static void linphone_call_set_terminated(LinphoneCall *call){ if (linphone_core_del_call(lc,call) != 0){ ms_error("Could not remove the call from the list !!!"); } - linphone_core_conference_check_uninit(lc); if (call->ringing_beep){ linphone_core_stop_dtmf(lc); @@ -924,15 +961,15 @@ const char *linphone_call_state_to_string(LinphoneCallState cs){ return "LinphoneCallUpdating"; case LinphoneCallReleased: return "LinphoneCallReleased"; + case LinphoneCallEarlyUpdatedByRemote: + return "LinphoneCallEarlyUpdatedByRemote"; + case LinphoneCallEarlyUpdating: + return "LinphoneCallEarlyUpdating"; } return "undefined state"; } -void linphone_call_set_state(LinphoneCall *call, LinphoneCallState cstate, const char *message) { - linphone_call_set_state_base(call, cstate, message,FALSE); -} - -void linphone_call_set_state_base(LinphoneCall *call, LinphoneCallState cstate, const char *message,bool_t silently){ +void linphone_call_set_state(LinphoneCall *call, LinphoneCallState cstate, const char *message){ LinphoneCore *lc=call->core; if (call->state!=cstate){ @@ -968,43 +1005,27 @@ void linphone_call_set_state_base(LinphoneCall *call, LinphoneCallState cstate, } if (cstate == LinphoneCallConnected) { call->log->status=LinphoneCallSuccess; - call->media_start_time=time(NULL); + call->log->connected_date_time=time(NULL); } - if (!silently) - linphone_core_notify_call_state_changed(lc,call,cstate,message); - + linphone_core_notify_call_state_changed(lc,call,cstate,message); linphone_reporting_call_state_updated(call); - + + /*cancelling DTMF sequence, if any*/ + if (cstate!=LinphoneCallStreamsRunning && call->dtmfs_timer!=NULL){ + linphone_call_cancel_dtmfs(call); + } if (cstate==LinphoneCallReleased){ - if (call->op!=NULL) { - /*transfer the last error so that it can be obtained even in Released state*/ - if (call->non_op_error.reason==SalReasonNone){ - const SalErrorInfo *ei=sal_op_get_error_info(call->op); - sal_error_info_set(&call->non_op_error,ei->reason,ei->protocol_code,ei->status_string,ei->warnings); - } - /* so that we cannot have anymore upcalls for SAL - concerning this call*/ - sal_op_release(call->op); - call->op=NULL; - } - /*it is necessary to reset pointers to other call to prevent circular references that would result in memory never freed.*/ - if (call->referer){ - linphone_call_unref(call->referer); - call->referer=NULL; - } - if (call->transfer_target){ - linphone_call_unref(call->transfer_target); - call->transfer_target=NULL; - } - linphone_call_unref(call); + linphone_call_set_released(call); } } } -static void linphone_call_destroy(LinphoneCall *obj) -{ +static void linphone_call_destroy(LinphoneCall *obj){ ms_message("Call [%p] freed.",obj); + if (obj->audiostream || obj->videostream){ + linphone_call_free_media_resources(obj); + } if (obj->op!=NULL) { sal_op_release(obj->op); obj->op=NULL; @@ -1023,9 +1044,11 @@ static void linphone_call_destroy(LinphoneCall *obj) } if (obj->ping_op) { sal_op_release(obj->ping_op); + obj->ping_op=NULL; } if (obj->refer_to){ ms_free(obj->refer_to); + obj->refer_to=NULL; } if (obj->referer){ linphone_call_unref(obj->referer); @@ -1033,16 +1056,30 @@ static void linphone_call_destroy(LinphoneCall *obj) } if (obj->transfer_target){ linphone_call_unref(obj->transfer_target); + obj->transfer_target=NULL; } - if (obj->log) + if (obj->log) { linphone_call_log_unref(obj->log); + obj->log=NULL; + } if (obj->auth_token) { ms_free(obj->auth_token); + obj->auth_token=NULL; + } + if (obj->dtmfs_timer) { + linphone_call_cancel_dtmfs(obj); + } + if (obj->params){ + linphone_call_params_unref(obj->params); + obj->params=NULL; + } + if (obj->current_params){ + linphone_call_params_unref(obj->current_params); + obj->current_params=NULL; } - linphone_call_params_unref(obj->params); - linphone_call_params_unref(obj->current_params); if (obj->remote_params != NULL) { linphone_call_params_unref(obj->remote_params); + obj->remote_params=NULL; } sal_error_info_reset(&obj->non_op_error); } @@ -1280,8 +1317,8 @@ bool_t linphone_call_has_transfer_pending(const LinphoneCall *call){ * Returns call's duration in seconds. **/ int linphone_call_get_duration(const LinphoneCall *call){ - if (call->media_start_time==0) return 0; - return time(NULL)-call->media_start_time; + if (call->log->connected_date_time==0) return 0; + return time(NULL)-call->log->connected_date_time; } /** @@ -1485,7 +1522,7 @@ int linphone_call_prepare_ice(LinphoneCall *call, bool_t incoming_offer){ if (has_video) _linphone_call_prepare_ice_for_stream(call,1,TRUE); /*start ICE gathering*/ if (incoming_offer) - linphone_core_update_ice_from_remote_media_description(call,remote); /*this may delete the ice session*/ + linphone_call_update_ice_from_remote_media_description(call,remote); /*this may delete the ice session*/ if (call->ice_session && !ice_session_candidates_gathered(call->ice_session)){ if (call->audiostream->ms.state==MSStreamInitialized) audio_stream_prepare_sound(call->audiostream, NULL, NULL); @@ -1876,11 +1913,14 @@ static void configure_rtp_session_for_rtcp_xr(LinphoneCore *lc, LinphoneCall *ca OrtpRtcpXrConfiguration currentconfig; const SalStreamDescription *localstream; const SalStreamDescription *remotestream; + SalMediaDescription *remotedesc = sal_call_get_remote_media_description(call->op); + + if (!remotedesc) return; localstream = sal_media_description_find_best_stream(call->localdesc, type); if (!localstream) return; localconfig = &localstream->rtcp_xr; - remotestream = sal_media_description_find_best_stream(sal_call_get_remote_media_description(call->op), type); + remotestream = sal_media_description_find_best_stream(remotedesc, type); if (!remotestream) return; remoteconfig = &remotestream->rtcp_xr; @@ -1986,8 +2026,8 @@ static void linphone_call_start_audio_stream(LinphoneCall *call, const char *cna crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, stream->crypto_local_tag); if (crypto_idx >= 0) { - media_stream_set_srtp_recv_key(&call->audiostream->ms,stream->crypto[0].algo,stream->crypto[0].master_key); - media_stream_set_srtp_send_key(&call->audiostream->ms,stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); + media_stream_set_srtp_recv_key(&call->audiostream->ms,stream->crypto[0].algo,stream->crypto[0].master_key, TRUE); + media_stream_set_srtp_send_key(&call->audiostream->ms,stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key, TRUE); } else { ms_warning("Failed to find local crypto algo with tag: %d", stream->crypto_local_tag); } @@ -2108,8 +2148,8 @@ static void linphone_call_start_video_stream(LinphoneCall *call, const char *cna if (sal_stream_description_has_srtp(vstream) == TRUE) { int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, vstream->crypto_local_tag); if (crypto_idx >= 0) { - media_stream_set_srtp_recv_key(&call->videostream->ms,vstream->crypto[0].algo,vstream->crypto[0].master_key); - media_stream_set_srtp_send_key(&call->videostream->ms,vstream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); + media_stream_set_srtp_recv_key(&call->videostream->ms,vstream->crypto[0].algo,vstream->crypto[0].master_key, TRUE); + media_stream_set_srtp_send_key(&call->videostream->ms,vstream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key, TRUE); } } configure_rtp_session_for_rtcp_xr(lc, call, SalVideo); @@ -2189,15 +2229,15 @@ void linphone_call_start_media_streams(LinphoneCall *call, bool_t all_inputs_mut call->up_bw=linphone_core_get_upload_bandwidth(lc); if (call->params->media_encryption==LinphoneMediaEncryptionZRTP) { - OrtpZrtpParams params; - memset(¶ms,0,sizeof(OrtpZrtpParams)); + MSZrtpParams params; + memset(¶ms,0,sizeof(MSZrtpParams)); /*call->current_params.media_encryption will be set later when zrtp is activated*/ params.zid_file=lc->zrtp_secrets_cache; audio_stream_enable_zrtp(call->audiostream,¶ms); #if VIDEO_ENABLED if (media_stream_secured((MediaStream *)call->audiostream) && media_stream_get_state((MediaStream *)call->videostream) == MSStreamStarted) { /*audio stream is already encrypted and video stream is active*/ - memset(¶ms,0,sizeof(OrtpZrtpParams)); + memset(¶ms,0,sizeof(MSZrtpParams)); video_stream_enable_zrtp(call->videostream,call->audiostream,¶ms); } #endif @@ -2229,9 +2269,9 @@ static bool_t update_stream_crypto_params(LinphoneCall *call, const SalStreamDes int crypto_idx = find_crypto_index_from_tag(local_st_desc->crypto, new_stream->crypto_local_tag); if (crypto_idx >= 0) { if (call->localdesc_changed & SAL_MEDIA_DESCRIPTION_CRYPTO_KEYS_CHANGED) - media_stream_set_srtp_send_key(ms,new_stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key); + media_stream_set_srtp_send_key(ms,new_stream->crypto[0].algo,local_st_desc->crypto[crypto_idx].master_key, TRUE); if (strcmp(old_stream->crypto[0].master_key,new_stream->crypto[0].master_key)!=0){ - media_stream_set_srtp_recv_key(ms,new_stream->crypto[0].algo,new_stream->crypto[0].master_key); + media_stream_set_srtp_recv_key(ms,new_stream->crypto[0].algo,new_stream->crypto[0].master_key,TRUE); } return TRUE; } else { @@ -2526,6 +2566,27 @@ const LinphoneCallStats *linphone_call_get_video_stats(LinphoneCall *call) { return stats; } +static bool_t ice_in_progress(LinphoneCallStats *stats){ + return stats->ice_state==LinphoneIceStateInProgress; +} + +/** + * Indicates whether an operation is in progress at the media side. + * It can a bad idea to initiate signaling operations (adding video, pausing the call, removing video, changing video parameters) while + * the media is busy in establishing the connection (typically ICE connectivity checks). It can result in failures generating loss of time + * in future operations in the call. + * Applications are invited to check this function after each call state change to decide whether certain operations are permitted or not. + * @param call the call + * @return TRUE if media is busy in establishing the connection, FALSE otherwise. +**/ +bool_t linphone_call_media_in_progress(LinphoneCall *call){ + bool_t ret=FALSE; + if (ice_in_progress(&call->stats[LINPHONE_CALL_STATS_AUDIO]) || ice_in_progress(&call->stats[LINPHONE_CALL_STATS_VIDEO])) + ret=TRUE; + /*TODO: could check zrtp state, upnp state*/ + return ret; +} + /** * Get the local loss rate since last report * @return The sender loss rate @@ -2803,6 +2864,8 @@ static void handle_ice_events(LinphoneCall *call, OrtpEvent *ev){ break; case LinphoneCallIdle: linphone_call_stop_media_streams_for_ice_gathering(call); + linphone_call_update_local_media_description_from_ice_or_upnp(call); + sal_call_set_local_media_description(call->op,call->localdesc); linphone_core_notify_incoming_call(call->core, call); break; default: @@ -2939,7 +3002,8 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse linphone_call_handle_stream_events(call,0); linphone_call_handle_stream_events(call,1); - if (call->state==LinphoneCallStreamsRunning && one_second_elapsed && call->audiostream!=NULL && disconnect_timeout>0 ) + if (call->state==LinphoneCallStreamsRunning && one_second_elapsed && call->audiostream!=NULL + && call->audiostream->ms.state==MSStreamStarted && disconnect_timeout>0 ) disconnected=!audio_stream_alive(call->audiostream,disconnect_timeout); if (disconnected) linphone_core_disconnected(call->core,call); @@ -2948,7 +3012,7 @@ void linphone_call_background_tasks(LinphoneCall *call, bool_t one_second_elapse void linphone_call_log_completed(LinphoneCall *call){ LinphoneCore *lc=call->core; - call->log->duration=time(NULL)-call->log->start_date_time; + call->log->duration=linphone_call_get_duration(call); /*store duration since connected*/ if (call->log->status==LinphoneCallMissed){ char *info; @@ -3097,3 +3161,76 @@ void linphone_call_set_new_params(LinphoneCall *call, const LinphoneCallParams * if (call->params) linphone_call_params_unref(call->params); call->params=cp; } + +static int send_dtmf_handler(void *data, unsigned int revents){ + LinphoneCall *call = (LinphoneCall*)data; + /*By default we send DTMF RFC2833 if we do not have enabled SIP_INFO but we can also send RFC2833 and SIP_INFO*/ + if (linphone_core_get_use_rfc2833_for_dtmf(call->core)!=0 || linphone_core_get_use_info_for_dtmf(call->core)==0) + { + /* In Band DTMF */ + if (call->audiostream!=NULL){ + audio_stream_send_dtmf(call->audiostream,*call->dtmf_sequence); + } + else + { + ms_error("Cannot send RFC2833 DTMF when we are not in communication."); + return FALSE; + } + } + if (linphone_core_get_use_info_for_dtmf(call->core)!=0){ + /* Out of Band DTMF (use INFO method) */ + sal_call_send_dtmf(call->op,*call->dtmf_sequence); + } + + /*this check is needed because linphone_call_send_dtmf does not set the timer since its a single character*/ + if (call->dtmfs_timer!=NULL) { + memmove(call->dtmf_sequence, call->dtmf_sequence+1, strlen(call->dtmf_sequence)); + } + /* continue only if the dtmf sequence is not empty*/ + if (call->dtmf_sequence!=NULL&&*call->dtmf_sequence!='\0') { + return TRUE; + } else { + linphone_call_cancel_dtmfs(call); + return FALSE; + } +} +int linphone_call_send_dtmf(LinphoneCall *call,char dtmf){ + if (call==NULL){ + ms_warning("linphone_call_send_dtmf(): invalid call, canceling DTMF."); + return -1; + } + call->dtmf_sequence = &dtmf; + send_dtmf_handler(call,0); + call->dtmf_sequence = NULL; + return 0; +} + +int linphone_call_send_dtmfs(LinphoneCall *call,char *dtmfs) { + if (call==NULL){ + ms_warning("linphone_call_send_dtmfs(): invalid call, canceling DTMF sequence."); + return -1; + } + if (call->dtmfs_timer!=NULL){ + ms_warning("linphone_call_send_dtmfs(): a DTMF sequence is already in place, canceling DTMF sequence."); + return -2; + } + if (dtmfs != NULL) { + int delay_ms = lp_config_get_int(call->core->config,"net","dtmf_delay_ms",200); + call->dtmf_sequence = ms_strdup(dtmfs); + call->dtmfs_timer = sal_create_timer(call->core->sal, send_dtmf_handler, call, delay_ms, "DTMF sequence timer"); + } + return 0; +} + +void linphone_call_cancel_dtmfs(LinphoneCall *call) { + /*nothing to do*/ + if (!call || !call->dtmfs_timer) return; + + sal_cancel_timer(call->core->sal, call->dtmfs_timer); + belle_sip_object_unref(call->dtmfs_timer); + call->dtmfs_timer = NULL; + if (call->dtmf_sequence != NULL) { + ms_free(call->dtmf_sequence); + call->dtmf_sequence = NULL; + } +} diff --git a/coreapi/linphonecore.c b/coreapi/linphonecore.c index fa1adf331..de0c1228d 100644 --- a/coreapi/linphonecore.c +++ b/coreapi/linphonecore.c @@ -27,7 +27,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include #include #include -#include +#include #include "mediastreamer2/mediastream.h" #include "mediastreamer2/mseventqueue.h" #include "mediastreamer2/msvolume.h" @@ -56,6 +56,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #endif #ifdef HAVE_ZLIB +#define COMPRESSED_LOG_COLLECTION_EXTENSION "gz" #ifdef WIN32 #include #include @@ -64,7 +65,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #define SET_BINARY_MODE(file) #endif #include +#else +#define COMPRESSED_LOG_COLLECTION_EXTENSION "txt" #endif +#define LOG_COLLECTION_DEFAULT_PATH "." +#define LOG_COLLECTION_DEFAULT_PREFIX "linphone" +#define LOG_COLLECTION_DEFAULT_MAX_FILE_SIZE (10 * 1024 * 1024) + /*#define UNSTANDART_GSM_11K 1*/ @@ -78,8 +85,10 @@ static const char *liblinphone_version= #endif ; static OrtpLogFunc liblinphone_log_func = NULL; -static bool_t liblinphone_log_collection_enabled = FALSE; -static const char * liblinphone_log_collection_path = "."; +static LinphoneLogCollectionState liblinphone_log_collection_state = LinphoneLogCollectionDisabled; +static char * liblinphone_log_collection_path = NULL; +static char * liblinphone_log_collection_prefix = NULL; +static int liblinphone_log_collection_max_file_size = LOG_COLLECTION_DEFAULT_MAX_FILE_SIZE; static ortp_mutex_t liblinphone_log_collection_mutex; static bool_t liblinphone_serialize_logs = FALSE; static void set_network_reachable(LinphoneCore* lc,bool_t isReachable, time_t curtime); @@ -161,8 +170,6 @@ void linphone_core_set_log_level(OrtpLogLevel loglevel) { } } -#define LOGFILE_MAXSIZE (10 * 1024 * 1024) - static void linphone_core_log_collection_handler(OrtpLogLevel level, const char *fmt, va_list args) { const char *lname="undef"; char *msg; @@ -170,7 +177,7 @@ static void linphone_core_log_collection_handler(OrtpLogLevel level, const char char *log_filename2; FILE *log_file; struct timeval tp; - struct tm *lt; + struct tm *lt; time_t tt; struct stat statbuf; @@ -202,16 +209,20 @@ static void linphone_core_log_collection_handler(OrtpLogLevel level, const char } msg = ortp_strdup_vprintf(fmt, args); - log_filename1 = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, "linphone1.log"); - log_filename2 = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, "linphone2.log"); + log_filename1 = ortp_strdup_printf("%s/%s1.log", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX); + log_filename2 = ortp_strdup_printf("%s/%s2.log", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX); ortp_mutex_lock(&liblinphone_log_collection_mutex); log_file = fopen(log_filename1, "a"); fstat(fileno(log_file), &statbuf); - if (statbuf.st_size > LOGFILE_MAXSIZE) { + if (statbuf.st_size > liblinphone_log_collection_max_file_size) { fclose(log_file); log_file = fopen(log_filename2, "a"); fstat(fileno(log_file), &statbuf); - if (statbuf.st_size > LOGFILE_MAXSIZE) { + if (statbuf.st_size > liblinphone_log_collection_max_file_size) { fclose(log_file); unlink(log_filename1); rename(log_filename2, log_filename1); @@ -229,8 +240,46 @@ static void linphone_core_log_collection_handler(OrtpLogLevel level, const char ortp_free(msg); } +const char * linphone_core_get_log_collection_path(void) { + if (liblinphone_log_collection_path != NULL) { + return liblinphone_log_collection_path; + } + return LOG_COLLECTION_DEFAULT_PATH; +} + void linphone_core_set_log_collection_path(const char *path) { - liblinphone_log_collection_path = path; + if (liblinphone_log_collection_path != NULL) { + ms_free(liblinphone_log_collection_path); + liblinphone_log_collection_path = NULL; + } + if (path != NULL) { + liblinphone_log_collection_path = ms_strdup(path); + } +} + +const char * linphone_core_get_log_collection_prefix(void) { + if (liblinphone_log_collection_prefix != NULL) { + return liblinphone_log_collection_prefix; + } + return LOG_COLLECTION_DEFAULT_PREFIX; +} + +void linphone_core_set_log_collection_prefix(const char *prefix) { + if (liblinphone_log_collection_prefix != NULL) { + ms_free(liblinphone_log_collection_prefix); + liblinphone_log_collection_prefix = NULL; + } + if (prefix != NULL) { + liblinphone_log_collection_prefix = ms_strdup(prefix); + } +} + +int linphone_core_get_log_collection_max_file_size(void) { + return liblinphone_log_collection_max_file_size; +} + +void linphone_core_set_log_collection_max_file_size(int size) { + liblinphone_log_collection_max_file_size = size; } const char *linphone_core_get_log_collection_upload_server_url(LinphoneCore *core) { @@ -241,25 +290,39 @@ void linphone_core_set_log_collection_upload_server_url(LinphoneCore *core, cons lp_config_set_string(core->config, "misc", "log_collection_upload_server_url", server_url); } -void linphone_core_enable_log_collection(bool_t enable) { - if ((enable == TRUE) && (liblinphone_log_collection_enabled == FALSE)) { - liblinphone_log_collection_enabled = TRUE; - ortp_mutex_init(&liblinphone_log_collection_mutex, NULL); +LinphoneLogCollectionState linphone_core_log_collection_enabled(void) { + return liblinphone_log_collection_state; +} + +void linphone_core_enable_log_collection(LinphoneLogCollectionState state) { + if (liblinphone_log_collection_state == state) return; + + /* at first call of this function, set liblinphone_log_func to the current + * ortp log function */ + if( liblinphone_log_func == NULL ){ liblinphone_log_func = ortp_logv_out; + } + liblinphone_log_collection_state = state; + if (state != LinphoneLogCollectionDisabled) { + ortp_mutex_init(&liblinphone_log_collection_mutex, NULL); + if (state == LinphoneLogCollectionEnabledWithoutPreviousLogHandler) { + liblinphone_log_func = NULL; + } else { + liblinphone_log_func = ortp_logv_out; + } ortp_set_log_handler(linphone_core_log_collection_handler); } else { - liblinphone_log_collection_enabled = FALSE; ortp_set_log_handler(liblinphone_log_func); } } static void delete_log_collection_upload_file(void) { -#ifdef HAVE_ZLIB - char *filename = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, "linphone_log.gz"); -#else - char *filename = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, "linphone_log.gz"); -#endif + char *filename = ms_strdup_printf("%s/%s_log.%s", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX, + COMPRESSED_LOG_COLLECTION_EXTENSION); unlink(filename); + ms_free(filename); } static void process_io_error_upload_log_collection(void *data, const belle_sip_io_error_event_t *event) { @@ -276,8 +339,6 @@ static void process_auth_requested_upload_log_collection(void *data, belle_sip_a delete_log_collection_upload_file(); } -extern const char *multipart_boundary; - /** * Callback called when posting a log collection file to server (following rcs5.1 recommendation) * @@ -293,18 +354,20 @@ static int log_collection_upload_on_send_body(belle_sip_user_body_handler_t *bh, LinphoneCore *core = (LinphoneCore *)data; /* If we've not reach the end of file yet, fill the buffer with more data */ - if (offset < core->log_collection_upload_information->size) { + if (offset < linphone_content_get_size(core->log_collection_upload_information)) { + char *log_filename = ms_strdup_printf("%s/%s_log.%s", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX, + COMPRESSED_LOG_COLLECTION_EXTENSION); #ifdef HAVE_ZLIB - char *log_filename = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, "linphone_log.gz"); FILE *log_file = fopen(log_filename, "rb"); #else - char *log_filename = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, "linphone_log.txt"); FILE *log_file = fopen(log_filename, "r"); #endif fseek(log_file, offset, SEEK_SET); *size = fread(buffer, 1, *size, log_file); fclose(log_file); - ortp_free(log_filename); + ms_free(log_filename); } return BELLE_SIP_CONTINUE; @@ -316,7 +379,7 @@ static int log_collection_upload_on_send_body(belle_sip_user_body_handler_t *bh, */ static void log_collection_upload_on_progress(belle_sip_body_handler_t *bh, belle_sip_message_t *msg, void *data, size_t offset, size_t total) { LinphoneCore *core = (LinphoneCore *)data; - linphone_core_notify_log_collection_upload_progress_indication(core, (size_t)(((double)offset / (double)total) * 100.0)); + linphone_core_notify_log_collection_upload_progress_indication(core, offset, total); } /** @@ -341,29 +404,27 @@ static void process_response_from_post_file_log_collection(void *data, const bel belle_http_request_t *req; belle_sip_multipart_body_handler_t *bh; char* ua; - char *content_type; char *first_part_header; belle_sip_user_body_handler_t *first_part_bh; linphone_core_notify_log_collection_upload_state_changed(core, LinphoneCoreLogCollectionUploadStateInProgress, NULL); /* Temporary storage for the Content-disposition header value */ - first_part_header = belle_sip_strdup_printf("form-data; name=\"File\"; filename=\"%s\"", core->log_collection_upload_information->name); + first_part_header = belle_sip_strdup_printf("form-data; name=\"File\"; filename=\"%s\"", linphone_content_get_name(core->log_collection_upload_information)); /* Create a user body handler to take care of the file and add the content disposition and content-type headers */ - first_part_bh = belle_sip_user_body_handler_new(core->log_collection_upload_information->size, NULL, NULL, log_collection_upload_on_send_body, core); + first_part_bh = belle_sip_user_body_handler_new(linphone_content_get_size(core->log_collection_upload_information), NULL, NULL, log_collection_upload_on_send_body, core); belle_sip_body_handler_add_header((belle_sip_body_handler_t *)first_part_bh, belle_sip_header_create("Content-disposition", first_part_header)); belle_sip_free(first_part_header); - belle_sip_body_handler_add_header((belle_sip_body_handler_t *)first_part_bh, (belle_sip_header_t *)belle_sip_header_content_type_create(core->log_collection_upload_information->type, core->log_collection_upload_information->subtype)); + belle_sip_body_handler_add_header((belle_sip_body_handler_t *)first_part_bh, + (belle_sip_header_t *)belle_sip_header_content_type_create(linphone_content_get_type(core->log_collection_upload_information), linphone_content_get_subtype(core->log_collection_upload_information))); /* Insert it in a multipart body handler which will manage the boundaries of multipart message */ bh = belle_sip_multipart_body_handler_new(log_collection_upload_on_progress, core, (belle_sip_body_handler_t *)first_part_bh); ua = ms_strdup_printf("%s/%s", linphone_core_get_user_agent_name(), linphone_core_get_user_agent_version()); - content_type = belle_sip_strdup_printf("multipart/form-data; boundary=%s", multipart_boundary); uri = belle_generic_uri_parse(linphone_core_get_log_collection_upload_server_url(core)); - req = belle_http_request_create("POST", uri, belle_sip_header_create("User-Agent", ua), belle_sip_header_create("Content-type", content_type), NULL); + req = belle_http_request_create("POST", uri, belle_sip_header_create("User-Agent", ua), NULL); ms_free(ua); - belle_sip_free(content_type); belle_sip_message_set_body_handler(BELLE_SIP_MESSAGE(req), BELLE_SIP_BODY_HANDLER(bh)); cbs.process_response = process_response_from_post_file_log_collection; cbs.process_io_error = process_io_error_upload_log_collection; @@ -444,17 +505,22 @@ static int prepare_log_collection_file_to_upload(const char *filename) { int ret = 0; ortp_mutex_lock(&liblinphone_log_collection_mutex); - output_filename = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, filename); - output_file = COMPRESS_OPEN(output_filename, "a"); + output_filename = ms_strdup_printf("%s/%s", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, filename); + output_file = COMPRESS_OPEN(output_filename, "w"); if (output_file == NULL) goto error; - input_filename = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, "linphone1.log"); + input_filename = ms_strdup_printf("%s/%s1.log", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX); input_file = fopen(input_filename, "r"); if (input_file == NULL) goto error; ret = compress_file(input_file, output_file); if (ret < 0) goto error; fclose(input_file); - ortp_free(input_filename); - input_filename = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, "linphone2.log"); + ms_free(input_filename); + input_filename = ms_strdup_printf("%s/%s2.log", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX); input_file = fopen(input_filename, "r"); if (input_file != NULL) { ret = compress_file(input_file, output_file); @@ -464,42 +530,47 @@ static int prepare_log_collection_file_to_upload(const char *filename) { error: if (input_file != NULL) fclose(input_file); if (output_file != NULL) COMPRESS_CLOSE(output_file); - if (input_filename != NULL) ortp_free(input_filename); - if (output_filename != NULL) ortp_free(output_filename); + if (input_filename != NULL) ms_free(input_filename); + if (output_filename != NULL) ms_free(output_filename); ortp_mutex_unlock(&liblinphone_log_collection_mutex); return ret; } static size_t get_size_of_file_to_upload(const char *filename) { struct stat statbuf; - char *output_filename = ortp_strdup_printf("%s/%s", liblinphone_log_collection_path, filename); + char *output_filename = ms_strdup_printf("%s/%s", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, filename); FILE *output_file = fopen(output_filename, "rb"); fstat(fileno(output_file), &statbuf); fclose(output_file); + ms_free(output_filename); return statbuf.st_size; } void linphone_core_upload_log_collection(LinphoneCore *core) { - if ((core->log_collection_upload_information == NULL) && (linphone_core_get_log_collection_upload_server_url(core) != NULL) && (liblinphone_log_collection_enabled == TRUE)) { + if ((core->log_collection_upload_information == NULL) && (linphone_core_get_log_collection_upload_server_url(core) != NULL) && (liblinphone_log_collection_state != LinphoneLogCollectionDisabled)) { /* open a transaction with the server and send an empty request(RCS5.1 section 3.5.4.8.3.1) */ belle_http_request_listener_callbacks_t cbs = { 0 }; belle_http_request_listener_t *l; belle_generic_uri_t *uri; belle_http_request_t *req; + char *name; core->log_collection_upload_information = (LinphoneContent *)malloc(sizeof(LinphoneContent)); memset(core->log_collection_upload_information, 0, sizeof(LinphoneContent)); #ifdef HAVE_ZLIB core->log_collection_upload_information->type = "application"; core->log_collection_upload_information->subtype = "gzip"; - core->log_collection_upload_information->name = "linphone_log.gz"; #else - core->log_collection_upload_information->type = "text"; - core->log_collection_upload_information->subtype = "plain"; - core->log_collection_upload_information->name = "linphone_log.txt"; + linphone_content_set_type(core->log_collection_upload_information, "text"); + linphone_content_set_subtype(core->log_collection_upload_information,"plain"); #endif - if (prepare_log_collection_file_to_upload(core->log_collection_upload_information->name) < 0) return; - core->log_collection_upload_information->size = get_size_of_file_to_upload(core->log_collection_upload_information->name); + name = ms_strdup_printf("%s_log.%s", + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX, + COMPRESSED_LOG_COLLECTION_EXTENSION); + linphone_content_set_name(core->log_collection_upload_information, name); + if (prepare_log_collection_file_to_upload(name) < 0) return; + linphone_content_set_size(core->log_collection_upload_information, get_size_of_file_to_upload(name)); uri = belle_generic_uri_parse(linphone_core_get_log_collection_upload_server_url(core)); req = belle_http_request_create("POST", uri, NULL, NULL, NULL); cbs.process_response = process_response_from_post_file_log_collection; @@ -507,9 +578,44 @@ void linphone_core_upload_log_collection(LinphoneCore *core) { cbs.process_auth_requested = process_auth_requested_upload_log_collection; l = belle_http_request_listener_create_from_callbacks(&cbs, core); belle_http_provider_send_request(core->http_provider, req, l); + ms_free(name); } } +char * linphone_core_compress_log_collection() { + char *filename = NULL; + if (liblinphone_log_collection_state == LinphoneLogCollectionDisabled) return NULL; + filename = ms_strdup_printf("%s_log.%s", + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX, + COMPRESSED_LOG_COLLECTION_EXTENSION); + if (prepare_log_collection_file_to_upload(filename) < 0) { + ms_free(filename); + return NULL; + } + ms_free(filename); + return ms_strdup_printf("%s/%s_log.%s", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX, + COMPRESSED_LOG_COLLECTION_EXTENSION); +} + +void linphone_core_reset_log_collection() { + char *filename; + ortp_mutex_lock(&liblinphone_log_collection_mutex); + delete_log_collection_upload_file(); + filename = ms_strdup_printf("%s/%s1.log", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX); + unlink(filename); + ms_free(filename); + filename = ms_strdup_printf("%s/%s2.log", + liblinphone_log_collection_path ? liblinphone_log_collection_path : LOG_COLLECTION_DEFAULT_PATH, + liblinphone_log_collection_prefix ? liblinphone_log_collection_prefix : LOG_COLLECTION_DEFAULT_PREFIX); + unlink(filename); + ms_free(filename); + ortp_mutex_unlock(&liblinphone_log_collection_mutex); +} + /** * Enable logs in supplied FILE*. * @@ -1025,6 +1131,7 @@ static void codecs_config_read(LinphoneCore *lc) } } audio_codecs=add_missing_codecs(lc,SalAudio,audio_codecs); + for (i=0;get_codec(lc,"video_codec",i,&pt);i++){ if (pt){ if (!ms_filter_codec_supported(pt->mime_type)){ @@ -1196,6 +1303,7 @@ bool_t linphone_core_rtcp_enabled(const LinphoneCore *lc){ */ void linphone_core_set_download_bandwidth(LinphoneCore *lc, int bw){ lc->net_conf.download_bw=bw; + linphone_core_update_allocated_audio_bandwidth(lc); if (linphone_core_ready(lc)) lp_config_set_int(lc->config,"net","download_bw",bw); } @@ -1212,6 +1320,7 @@ void linphone_core_set_download_bandwidth(LinphoneCore *lc, int bw){ */ void linphone_core_set_upload_bandwidth(LinphoneCore *lc, int bw){ lc->net_conf.upload_bw=bw; + linphone_core_update_allocated_audio_bandwidth(lc); if (linphone_core_ready(lc)) lp_config_set_int(lc->config,"net","upload_bw",bw); } @@ -1393,7 +1502,6 @@ static void linphone_core_start(LinphoneCore * lc) { misc_config_read(lc); ui_config_read(lc); #ifdef TUNNEL_ENABLED - lc->tunnel=linphone_core_tunnel_new(lc); if (lc->tunnel) { linphone_tunnel_configure(lc->tunnel); } @@ -1418,9 +1526,10 @@ void linphone_configuring_terminated(LinphoneCore *lc, LinphoneConfiguringState static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtable, LpConfig *config, void * userdata) { const char *remote_provisioning_uri = NULL; - LinphoneCoreVTable* local_vtable= linphone_vtable_new(); + const char *aac_fmtp162248, *aac_fmtp3244; + LinphoneCoreVTable* local_vtable= linphone_core_v_table_new(); ms_message("Initializing LinphoneCore %s", linphone_core_get_version()); - memset (lc, 0, sizeof (LinphoneCore)); + lc->config=lp_config_ref(config); lc->data=userdata; lc->ringstream_autorelease=TRUE; @@ -1464,17 +1573,29 @@ static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtab linphone_core_assign_payload_type(lc,&payload_type_h264,102,"profile-level-id=42801F"); linphone_core_assign_payload_type(lc,&payload_type_vp8,103,NULL); - linphone_core_assign_payload_type(lc,&payload_type_theora,97,NULL); - linphone_core_assign_payload_type(lc,&payload_type_x_snow,-1,NULL); + /* linphone_core_assign_payload_type(lc,&payload_type_theora,97,NULL); commented out to free 1 slot */ + /* linphone_core_assign_payload_type(lc,&payload_type_x_snow,-1,NULL); commented out to free 1 slot */ /* due to limited space in SDP, we have to disable this h264 line which is normally no more necessary */ /* linphone_core_assign_payload_type(&payload_type_h264,-1,"packetization-mode=1;profile-level-id=428014");*/ #endif + /* For AAC, we use a config value to determine if we ought to support SBR. Since it is not offically supported + * for the mpeg4-generic mime type, setting this flag to 1 will break compatibility with other clients. */ + if( lp_config_get_int(lc->config, "misc", "aac_use_sbr", FALSE) ) { + ms_message("Using SBR for AAC"); + aac_fmtp162248 = "config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5; SBR-enabled=1"; + aac_fmtp3244 = "config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5; SBR-enabled=1"; + } else { + aac_fmtp162248 = "config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5"; + aac_fmtp3244 = "config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5"; + } + + /*add all payload type for which we don't care about the number */ linphone_core_assign_payload_type(lc,&payload_type_ilbc,-1,"mode=30"); linphone_core_assign_payload_type(lc,&payload_type_amr,-1,"octet-align=1"); linphone_core_assign_payload_type(lc,&payload_type_amrwb,-1,"octet-align=1"); - linphone_core_assign_payload_type(lc,&payload_type_lpc1015,-1,NULL); + /* linphone_core_assign_payload_type(lc,&payload_type_lpc1015,-1,NULL); commented out to free 1 slot */ linphone_core_assign_payload_type(lc,&payload_type_g726_16,-1,NULL); linphone_core_assign_payload_type(lc,&payload_type_g726_24,-1,NULL); linphone_core_assign_payload_type(lc,&payload_type_g726_32,-1,NULL); @@ -1488,8 +1609,11 @@ static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtab linphone_core_assign_payload_type(lc,&payload_type_silk_wb,-1,NULL); linphone_core_assign_payload_type(lc,&payload_type_silk_swb,-1,NULL); linphone_core_assign_payload_type(lc,&payload_type_g729,18,"annexb=no"); - linphone_core_assign_payload_type(lc,&payload_type_aaceld_22k,-1,"config=F8EE2000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5"); - linphone_core_assign_payload_type(lc,&payload_type_aaceld_44k,-1,"config=F8E82000; constantDuration=512; indexDeltaLength=3; indexLength=3; mode=AAC-hbr; profile-level-id=76; sizeLength=13; streamType=5"); + linphone_core_assign_payload_type(lc,&payload_type_aaceld_16k,-1,aac_fmtp162248); + linphone_core_assign_payload_type(lc,&payload_type_aaceld_22k,-1,aac_fmtp162248); + linphone_core_assign_payload_type(lc,&payload_type_aaceld_32k,-1,aac_fmtp3244); + linphone_core_assign_payload_type(lc,&payload_type_aaceld_44k,-1,aac_fmtp3244); + linphone_core_assign_payload_type(lc,&payload_type_aaceld_48k,-1,aac_fmtp162248); linphone_core_assign_payload_type(lc,&payload_type_opus,-1,"useinbandfec=1; stereo=0; sprop-stereo=0"); linphone_core_assign_payload_type(lc,&payload_type_isac,-1,NULL); linphone_core_handle_static_payloads(lc); @@ -1505,6 +1629,10 @@ static void linphone_core_init(LinphoneCore * lc, const LinphoneCoreVTable *vtab sal_set_user_pointer(lc->sal,lc); sal_set_callbacks(lc->sal,&linphone_sal_callbacks); +#ifdef TUNNEL_ENABLED + lc->tunnel=linphone_core_tunnel_new(lc); +#endif + lc->network_last_check = 0; lc->network_last_status = FALSE; @@ -1551,7 +1679,7 @@ LinphoneCore *linphone_core_new(const LinphoneCoreVTable *vtable, LinphoneCore *linphone_core_new_with_config(const LinphoneCoreVTable *vtable, struct _LpConfig *config, void *userdata) { - LinphoneCore *core = ms_new(LinphoneCore, 1); + LinphoneCore *core = ms_new0(LinphoneCore, 1); linphone_core_init(core, vtable, config, userdata); return core; } @@ -1702,6 +1830,7 @@ int linphone_core_set_audio_codecs(LinphoneCore *lc, MSList *codecs) if (lc->codecs_conf.audio_codecs!=NULL) ms_list_free(lc->codecs_conf.audio_codecs); lc->codecs_conf.audio_codecs=codecs; _linphone_core_codec_config_write(lc); + linphone_core_update_allocated_audio_bandwidth(lc); return 0; } @@ -2032,7 +2161,7 @@ static bool_t transports_unchanged(const LCSipTransports * tr1, const LCSipTrans tr2->tls_port==tr1->tls_port; } -static int apply_transports(LinphoneCore *lc){ +int _linphone_core_apply_transports(LinphoneCore *lc){ Sal *sal=lc->sal; const char *anyaddr; LCSipTransports *tr=&lc->sip_conf.transports; @@ -2046,20 +2175,26 @@ static int apply_transports(LinphoneCore *lc){ anyaddr="0.0.0.0"; sal_unlisten_ports(sal); - if (tr->udp_port!=0){ - if (sal_listen_port (sal,anyaddr,tr->udp_port,SalTransportUDP,FALSE)!=0){ - transport_error(lc,"udp",tr->udp_port); + if (lc->tunnel && linphone_tunnel_sip_enabled(lc->tunnel) && linphone_tunnel_get_activated(lc->tunnel)){ + if (sal_listen_port(sal,anyaddr,tr->udp_port,SalTransportUDP,TRUE)!=0){ + transport_error(lc,"udp+tunnel",tr->udp_port); } - } - if (tr->tcp_port!=0){ - if (sal_listen_port (sal,anyaddr,tr->tcp_port,SalTransportTCP,FALSE)!=0){ - transport_error(lc,"tcp",tr->tcp_port); + }else{ + if (tr->udp_port!=0){ + if (sal_listen_port(sal,anyaddr,tr->udp_port,SalTransportUDP,FALSE)!=0){ + transport_error(lc,"udp",tr->udp_port); + } } - } - if (linphone_core_sip_transport_supported(lc,LinphoneTransportTls)){ - if (tr->tls_port!=0){ - if (sal_listen_port (sal,anyaddr,tr->tls_port,SalTransportTLS,TRUE)!=0){ - transport_error(lc,"tls",tr->tls_port); + if (tr->tcp_port!=0){ + if (sal_listen_port (sal,anyaddr,tr->tcp_port,SalTransportTCP,FALSE)!=0){ + transport_error(lc,"tcp",tr->tcp_port); + } + } + if (linphone_core_sip_transport_supported(lc,LinphoneTransportTls)){ + if (tr->tls_port!=0){ + if (sal_listen_port (sal,anyaddr,tr->tls_port,SalTransportTLS,FALSE)!=0){ + transport_error(lc,"tls",tr->tls_port); + } } } } @@ -2112,7 +2247,7 @@ int linphone_core_set_sip_transports(LinphoneCore *lc, const LCSipTransports * t } if (lc->sal==NULL) return 0; - return apply_transports(lc); + return _linphone_core_apply_transports(lc); } /** @@ -2176,8 +2311,13 @@ void linphone_core_enable_ipv6(LinphoneCore *lc, bool_t val){ if (lc->sip_conf.ipv6_enabled!=val){ lc->sip_conf.ipv6_enabled=val; if (lc->sal){ - /* we need to restart eXosip */ - apply_transports(lc); + /* we need to update the sip stack */ + _linphone_core_apply_transports(lc); + } + /*update the localip immediately for the network monitor to avoid to "discover" later that we switched to ipv6*/ + linphone_core_get_local_ip(lc,AF_UNSPEC,NULL,lc->localip); + if (linphone_core_ready(lc)){ + lp_config_set_int(lc->config,"sip","use_ipv6",(int)val); } } } @@ -2431,8 +2571,8 @@ void linphone_core_iterate(LinphoneCore *lc){ } } if ( (lc->sip_conf.in_call_timeout > 0) - && (call->media_start_time != 0) - && ((curtime - call->media_start_time) > lc->sip_conf.in_call_timeout)) + && (call->log->connected_date_time != 0) + && ((curtime - call->log->connected_date_time) > lc->sip_conf.in_call_timeout)) { ms_message("in call timeout (%i)",lc->sip_conf.in_call_timeout); linphone_core_terminate_call(lc,call); @@ -2661,6 +2801,10 @@ LinphoneProxyConfig * linphone_core_lookup_known_proxy(LinphoneCore *lc, const L LinphoneProxyConfig *found_noreg_cfg=NULL; LinphoneProxyConfig *default_cfg=lc->default_proxy; + if (linphone_address_get_domain(uri) == NULL) { + ms_message("cannot seach for proxy for uri [%p] if no domain set. returning default",uri); + return default_cfg; + } /*return default proxy if it is matching the destination uri*/ if (default_cfg){ const char *domain=linphone_proxy_config_get_domain(default_cfg); @@ -3086,28 +3230,15 @@ void linphone_core_notify_incoming_call(LinphoneCore *lc, LinphoneCall *call){ char *barmesg; char *tmp; LinphoneAddress *from_parsed; - SalMediaDescription *md; bool_t propose_early_media=lp_config_get_int(lc->config,"sip","incoming_calls_early_media",FALSE); const char *ringback_tone=linphone_core_get_remote_ringback_tone (lc); - linphone_call_make_local_media_description(lc,call); - sal_call_set_local_media_description(call->op,call->localdesc); - md=sal_call_get_final_media_description(call->op); - if (md){ - if (sal_media_description_empty(md) || linphone_core_incompatible_security(lc,md)){ - sal_call_decline(call->op,SalReasonNotAcceptable,NULL); - linphone_call_set_state_base(call, LinphoneCallError, NULL,TRUE); - linphone_call_unref(call); - return; - } - } - from_parsed=linphone_address_new(sal_op_get_from(call->op)); linphone_address_clean(from_parsed); tmp=linphone_address_as_string(from_parsed); linphone_address_destroy(from_parsed); barmesg=ortp_strdup_printf("%s %s%s",tmp,_("is contacting you"), - (sal_call_autoanswer_asked(call->op)) ?_(" and asked autoanswer."):_(".")); + (sal_call_autoanswer_asked(call->op)) ?_(" and asked autoanswer."):"."); linphone_core_notify_show_interface(lc); linphone_core_notify_display_status(lc,barmesg); @@ -3260,15 +3391,20 @@ int linphone_core_start_update_call(LinphoneCore *lc, LinphoneCall *call){ **/ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallParams *params){ int err=0; + LinphoneCallState nextstate; #if defined(VIDEO_ENABLED) && defined(BUILD_UPNP) bool_t has_video = FALSE; #endif switch(call->state){ - case LinphoneCallIncomingEarlyMedia: case LinphoneCallIncomingReceived: + case LinphoneCallIncomingEarlyMedia: + case LinphoneCallOutgoingRinging: + case LinphoneCallOutgoingEarlyMedia: + nextstate=LinphoneCallEarlyUpdating; + break; case LinphoneCallStreamsRunning: - /*these states are allowed for linphone_core_update_call()*/ + nextstate=LinphoneCallUpdating; break; default: ms_error("linphone_core_update_call() is not allowed in [%s] state",linphone_call_state_to_string(call->state)); @@ -3276,7 +3412,7 @@ int linphone_core_update_call(LinphoneCore *lc, LinphoneCall *call, const Linpho } if (params!=NULL){ - linphone_call_set_state(call,LinphoneCallUpdating,"Updating call"); + linphone_call_set_state(call,nextstate,"Updating call"); #if defined(VIDEO_ENABLED) && defined(BUILD_UPNP) has_video = call->params->has_video; @@ -3510,7 +3646,7 @@ int linphone_core_accept_call_with_params(LinphoneCore *lc, LinphoneCall *call, return -1; break; } - + /* check if this call is supposed to replace an already running one*/ replaced=sal_call_get_replaces(call->op); if (replaced){ @@ -4556,7 +4692,10 @@ const char * linphone_core_get_ringback(const LinphoneCore *lc){ } /** - * Enables or disable echo cancellation. Value is saved an used for subsequent calls + * Enables or disable echo cancellation. Value is saved and used for subsequent calls. + * This actually controls software echo cancellation. If hardware echo cancellation is available, it will be always used and activated for calls, regardless + * of the value passed to this function. + * When hardware echo cancellation is available, the software one is of course not activated. * * @ingroup media_parameters **/ @@ -4651,38 +4790,10 @@ bool_t linphone_core_agc_enabled(const LinphoneCore *lc){ return lc->sound_conf.agc; } -/** - * Send the specified dtmf. - * - * @ingroup media_parameters - * This function only works during calls. The dtmf is automatically played to the user. - * @param lc The LinphoneCore object - * @param dtmf The dtmf name specified as a char, such as '0', '#' etc... - * -**/ void linphone_core_send_dtmf(LinphoneCore *lc, char dtmf) { LinphoneCall *call=linphone_core_get_current_call(lc); - if (call==NULL){ - ms_warning("linphone_core_send_dtmf(): no active call"); - return; - } - /*By default we send DTMF RFC2833 if we do not have enabled SIP_INFO but we can also send RFC2833 and SIP_INFO*/ - if (linphone_core_get_use_rfc2833_for_dtmf(lc)!=0 || linphone_core_get_use_info_for_dtmf(lc)==0) - { - /* In Band DTMF */ - if (call->audiostream!=NULL){ - audio_stream_send_dtmf(call->audiostream,dtmf); - } - else - { - ms_error("we cannot send RFC2833 dtmf when we are not in communication"); - } - } - if (linphone_core_get_use_info_for_dtmf(lc)!=0){ - /* Out of Band DTMF (use INFO method) */ - sal_call_send_dtmf(call->op,dtmf); - } + linphone_call_send_dtmf(call, dtmf); } void linphone_core_set_stun_server(LinphoneCore *lc, const char *server){ @@ -4833,11 +4944,11 @@ void linphone_core_set_firewall_policy(LinphoneCore *lc, LinphoneFirewallPolicy lp_config_set_string(lc->config,"net","firewall_policy",policy); } -ORTP_INLINE LinphoneFirewallPolicy linphone_core_get_firewall_policy(const LinphoneCore *lc) { +LinphoneFirewallPolicy linphone_core_get_firewall_policy(const LinphoneCore *lc) { return _linphone_core_get_firewall_policy_with_lie(lc, FALSE); } -ORTP_INLINE LinphoneFirewallPolicy _linphone_core_get_firewall_policy(const LinphoneCore *lc) { +LinphoneFirewallPolicy _linphone_core_get_firewall_policy(const LinphoneCore *lc) { return _linphone_core_get_firewall_policy_with_lie(lc, TRUE); } @@ -5544,10 +5655,14 @@ void linphone_core_set_preferred_video_size_by_name(LinphoneCore *lc, const char * * @ingroup media_parameters **/ -MSVideoSize linphone_core_get_preferred_video_size(LinphoneCore *lc){ +MSVideoSize linphone_core_get_preferred_video_size(const LinphoneCore *lc){ return lc->video_conf.vsize; } +char * linphone_core_get_preferred_video_size_name(const LinphoneCore *lc) { + return ms_strdup(video_size_get_name(lc->video_conf.vsize)); +} + /** * Set the preferred frame rate for video. * Based on the available bandwidth constraints and network conditions, the video encoder @@ -5933,6 +6048,8 @@ void sip_config_uninit(LinphoneCore *lc) if (i>=20) ms_warning("Cannot complete unregistration, giving up"); } config->proxies=ms_list_free_with_data(config->proxies,(void (*)(void*)) _linphone_proxy_config_release); + + config->deleted_proxies=ms_list_free_with_data(config->deleted_proxies,(void (*)(void*)) _linphone_proxy_config_release); /*no longuer need to write proxy config if not changedlinphone_proxy_config_write_to_config_file(lc->config,NULL,i);*/ /*mark the end */ @@ -6151,6 +6268,9 @@ static void linphone_core_uninit(LinphoneCore *lc) if(lc->rec_file!=NULL){ ms_free(lc->rec_file); } + if (lc->chat_db_file){ + ms_free(lc->chat_db_file); + } if(lc->presence_model){ linphone_presence_model_unref(lc->presence_model); } @@ -6162,7 +6282,7 @@ static void linphone_core_uninit(LinphoneCore *lc) if (liblinphone_serialize_logs == TRUE) { ortp_set_log_thread_id(0); } - ms_list_free_with_data(lc->vtables,(void (*)(void *))linphone_vtable_destroy); + ms_list_free_with_data(lc->vtables,(void (*)(void *))linphone_core_v_table_destroy); } static void set_network_reachable(LinphoneCore* lc,bool_t isReachable, time_t curtime){ @@ -6278,11 +6398,18 @@ bool_t linphone_core_can_we_add_call(LinphoneCore *lc) return FALSE; } +static void notify_soundcard_usage(LinphoneCore *lc, bool_t used){ + MSSndCard *card=lc->sound_conf.capt_sndcard; + if (card && ms_snd_card_get_capabilities(card) & MS_SND_CARD_CAP_IS_SLOW){ + ms_message("Notifying soundcard that we don't need it anymore for calls."); + ms_snd_card_set_usage_hint(card,used); + } +} int linphone_core_add_call( LinphoneCore *lc, LinphoneCall *call) { - if(linphone_core_can_we_add_call(lc)) - { + if (linphone_core_can_we_add_call(lc)){ + if (lc->calls==NULL) notify_soundcard_usage(lc,TRUE); lc->calls = ms_list_append(lc->calls,call); return 0; } @@ -6305,6 +6432,7 @@ int linphone_core_del_call( LinphoneCore *lc, LinphoneCall *call) return -1; } lc->calls = the_calls; + if (lc->calls==NULL) notify_soundcard_usage(lc,FALSE); return 0; } @@ -6392,6 +6520,7 @@ LinphoneCallParams *linphone_core_create_default_call_parameters(LinphoneCore *l * @param lc the LinphoneCore * @param call the call for which the parameters are to be build, or NULL in the case where the parameters are to be used for a new outgoing call. * @return a new LinphoneCallParams + * @ingroup call_control */ LinphoneCallParams *linphone_core_create_call_params(LinphoneCore *lc, LinphoneCall *call){ if (!call) return linphone_core_create_default_call_parameters(lc); @@ -6518,7 +6647,7 @@ typedef struct Hook{ }Hook; static Hook *hook_new(LinphoneCoreIterateHook hook, void *hook_data){ - Hook *h=ms_new(Hook,1); + Hook *h=ms_new0(Hook,1); h->fun=hook; h->data=hook_data; return h; @@ -6643,7 +6772,7 @@ bool_t linphone_core_media_encryption_supported(const LinphoneCore *lc, Linphone case LinphoneMediaEncryptionSRTP: return media_stream_srtp_supported(); case LinphoneMediaEncryptionZRTP: - return ortp_zrtp_available(); + return ms_zrtp_available(); case LinphoneMediaEncryptionNone: return TRUE; } @@ -6660,7 +6789,7 @@ int linphone_core_set_media_encryption(LinphoneCore *lc, LinphoneMediaEncryption ret=-1; }else type="srtp"; }else if (menc == LinphoneMediaEncryptionZRTP){ - if (!ortp_zrtp_available()){ + if (!ms_zrtp_available()){ ms_warning("ZRTP not supported by library."); type="none"; ret=-1; @@ -6718,7 +6847,7 @@ void linphone_core_set_sip_dscp(LinphoneCore *lc, int dscp){ sal_set_dscp(lc->sal,dscp); if (linphone_core_ready(lc)){ lp_config_set_int_hex(lc->config,"sip","dscp",dscp); - apply_transports(lc); + _linphone_core_apply_transports(lc); } } @@ -6898,20 +7027,38 @@ int linphone_payload_type_get_channels(const LinphonePayloadType *pt) { return pt->channels; } -LinphoneCoreVTable *linphone_vtable_new() { +LinphoneCoreVTable *linphone_core_v_table_new() { return ms_new0(LinphoneCoreVTable,1); } -void linphone_vtable_destroy(LinphoneCoreVTable* table) { +void linphone_core_v_table_set_user_data(LinphoneCoreVTable *table, void *data) { + if (table->user_data) { + ms_free(table->user_data); + } + table->user_data = data; +} + +void* linphone_core_v_table_get_user_data(LinphoneCoreVTable *table) { + return table->user_data; +} + +void linphone_core_v_table_destroy(LinphoneCoreVTable* table) { + if (table->user_data) { + ms_free(table->user_data); + } ms_free(table); } + +LinphoneCoreVTable *linphone_core_get_current_vtable(LinphoneCore *lc) { + return lc->current_vtable; +} + #define NOTIFY_IF_EXIST(function_name) \ MSList* iterator; \ ms_message ("Linphone core [%p] notifying [%s]",lc,#function_name);\ for (iterator=lc->vtables; iterator!=NULL; iterator=iterator->next) \ - if (((LinphoneCoreVTable*)(iterator->data))->function_name)\ + if ((lc->current_vtable=((LinphoneCoreVTable*)(iterator->data)))->function_name)\ ((LinphoneCoreVTable*)(iterator->data))->function_name - void linphone_core_notify_global_state_changed(LinphoneCore *lc, LinphoneGlobalState gstate, const char *message) { NOTIFY_IF_EXIST(global_state_changed)(lc,gstate,message); } @@ -6963,8 +7110,8 @@ void linphone_core_notify_file_transfer_recv(LinphoneCore *lc, LinphoneChatMessa void linphone_core_notify_file_transfer_send(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size) { NOTIFY_IF_EXIST(file_transfer_send)(lc,message,content,buff,size); } -void linphone_core_notify_file_transfer_progress_indication(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t progress) { - NOTIFY_IF_EXIST(file_transfer_progress_indication)(lc,message,content,progress); +void linphone_core_notify_file_transfer_progress_indication(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total) { + NOTIFY_IF_EXIST(file_transfer_progress_indication)(lc,message,content,offset,total); } void linphone_core_notify_is_composing_received(LinphoneCore *lc, LinphoneChatRoom *room) { NOTIFY_IF_EXIST(is_composing_received)(lc,room); @@ -7012,8 +7159,8 @@ void linphone_core_notify_publish_state_changed(LinphoneCore *lc, LinphoneEvent void linphone_core_notify_log_collection_upload_state_changed(LinphoneCore *lc, LinphoneCoreLogCollectionUploadState state, const char *info) { NOTIFY_IF_EXIST(log_collection_upload_state_changed)(lc, state, info); } -void linphone_core_notify_log_collection_upload_progress_indication(LinphoneCore *lc, size_t progress) { - NOTIFY_IF_EXIST(log_collection_upload_progress_indication)(lc, progress); +void linphone_core_notify_log_collection_upload_progress_indication(LinphoneCore *lc, size_t offset, size_t total) { + NOTIFY_IF_EXIST(log_collection_upload_progress_indication)(lc, offset, total); } void linphone_core_add_listener(LinphoneCore *lc, LinphoneCoreVTable *vtable) { ms_message("Vtable [%p] registered on core [%p]",lc,vtable); diff --git a/coreapi/linphonecore.h b/coreapi/linphonecore.h index 7dd4d8f55..bed8fdf0e 100644 --- a/coreapi/linphonecore.h +++ b/coreapi/linphonecore.h @@ -126,26 +126,6 @@ typedef struct SalAddress LinphoneAddress; typedef struct belle_sip_dict LinphoneDictionary; -/** - * The LinphoneContent struct holds data that can be embedded in a signaling message. - * @ingroup misc -**/ -struct _LinphoneContent{ - char *type; /** Can be created by linphone_chat_room_create_message(). */ typedef struct _LinphoneChatMessage LinphoneChatMessage; @@ -1302,9 +1323,10 @@ typedef struct _LinphoneChatRoom LinphoneChatRoom; typedef enum _LinphoneChatMessageState { LinphoneChatMessageStateIdle, /**< Initial state */ LinphoneChatMessageStateInProgress, /**< Delivery in progress */ - LinphoneChatMessageStateDelivered, /**< Message succesffully delivered an acknoleged by remote end point */ + LinphoneChatMessageStateDelivered, /**< Message successfully delivered and acknowledged by remote end point */ LinphoneChatMessageStateNotDelivered, /**< Message was not delivered */ - LinphoneChatMessageStateFileTransferError /**< Message was received(and acknowledged) but cannot get file from server */ + LinphoneChatMessageStateFileTransferError, /**< Message was received(and acknowledged) but cannot get file from server */ + LinphoneChatMessageStateFileTransferDone /**< File transfer has been completed successfully. */ } LinphoneChatMessageState; /** @@ -1315,6 +1337,46 @@ typedef enum _LinphoneChatMessageState { */ typedef void (*LinphoneChatMessageStateChangedCb)(LinphoneChatMessage* msg,LinphoneChatMessageState state,void* ud); +/** + * Call back used to notify message delivery status + * @param msg #LinphoneChatMessage object + * @param status LinphoneChatMessageState + */ +typedef void (*LinphoneChatMessageMsgStateChangedCb)(LinphoneChatMessage* msg, LinphoneChatMessageState state); + +/** + * File transfer receive callback prototype. This function is called by the core upon an incoming File transfer is started. This function may be call several time for the same file in case of large file. + * + * @param message #LinphoneChatMessage message from which the body is received. + * @param content #LinphoneContent incoming content information + * @param buff pointer to the received data + * @param size number of bytes to be read from buff. 0 means end of file. + * + */ +typedef void (*LinphoneChatMessageFileTransferRecvCb)(LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size); + +/** + * File transfer send callback prototype. This function is called by the core upon an outgoing File transfer is started. This function is called until size is set to 0. + *
a #LinphoneContent with a size equal zero + * + * @param message #LinphoneChatMessage message from which the body is received. + * @param content #LinphoneContent outgoing content + * @param buff pointer to the buffer where data chunk shall be written by the app + * @param size as input value, it represents the number of bytes expected by the framework. As output value, it means the number of bytes wrote by the application in the buffer. 0 means end of file. + * + */ +typedef void (*LinphoneChatMessageFileTransferSendCb)(LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size); + +/** + * File transfer progress indication callback prototype. + * + * @param message #LinphoneChatMessage message from which the body is received. + * @param content #LinphoneContent incoming content information + * @param offset The number of bytes sent/received since the beginning of the transfer. + * @param total The total number of bytes to be sent/received. + */ +typedef void (*LinphoneChatMessageFileTransferProgressIndicationCb)(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total); + LINPHONE_PUBLIC void linphone_core_set_chat_database_path(LinphoneCore *lc, const char *path); LINPHONE_PUBLIC LinphoneChatRoom * linphone_core_create_chat_room(LinphoneCore *lc, const char *to); LINPHONE_PUBLIC LinphoneChatRoom * linphone_core_get_or_create_chat_room(LinphoneCore *lc, const char *to); @@ -1365,6 +1427,7 @@ LINPHONE_PUBLIC LinphoneChatMessage* linphone_chat_room_create_file_transfer_mes LINPHONE_PUBLIC const LinphoneAddress* linphone_chat_room_get_peer_address(LinphoneChatRoom *cr); LINPHONE_PUBLIC void linphone_chat_room_send_message(LinphoneChatRoom *cr, const char *msg); LINPHONE_PUBLIC void linphone_chat_room_send_message2(LinphoneChatRoom *cr, LinphoneChatMessage* msg,LinphoneChatMessageStateChangedCb status_cb,void* ud); +LINPHONE_PUBLIC void linphone_chat_room_send_chat_message(LinphoneChatRoom *cr, LinphoneChatMessage *msg); LINPHONE_PUBLIC void linphone_chat_room_update_url(LinphoneChatRoom *cr, LinphoneChatMessage *msg); LINPHONE_PUBLIC MSList *linphone_chat_room_get_history(LinphoneChatRoom *cr,int nb_message); LINPHONE_PUBLIC void linphone_chat_room_mark_as_read(LinphoneChatRoom *cr); @@ -1425,8 +1488,9 @@ LINPHONE_PUBLIC const LinphoneAddress* linphone_chat_message_get_to_address(cons LINPHONE_PUBLIC const char* linphone_chat_message_get_external_body_url(const LinphoneChatMessage* message); LINPHONE_PUBLIC void linphone_chat_message_set_external_body_url(LinphoneChatMessage* message,const char* url); LINPHONE_PUBLIC const LinphoneContent* linphone_chat_message_get_file_transfer_information(const LinphoneChatMessage* message); -LINPHONE_PUBLIC void linphone_chat_message_start_file_download(LinphoneChatMessage* message, LinphoneChatMessageStateChangedCb status_cb); -LINPHONE_PUBLIC void linphone_chat_room_cancel_file_transfer(LinphoneChatMessage* msg); +LINPHONE_PUBLIC void linphone_chat_message_start_file_download(LinphoneChatMessage* message, LinphoneChatMessageStateChangedCb status_cb, void* ud); +LINPHONE_PUBLIC void linphone_chat_message_download_file(LinphoneChatMessage *message); +LINPHONE_PUBLIC void linphone_chat_message_cancel_file_transfer(LinphoneChatMessage* msg); LINPHONE_PUBLIC const char* linphone_chat_message_get_appdata(const LinphoneChatMessage* message); LINPHONE_PUBLIC void linphone_chat_message_set_appdata(LinphoneChatMessage* message, const char* data); LINPHONE_PUBLIC const char* linphone_chat_message_get_text(const LinphoneChatMessage* message); @@ -1443,6 +1507,23 @@ LINPHONE_PUBLIC bool_t linphone_chat_message_is_outgoing(LinphoneChatMessage* me LINPHONE_PUBLIC unsigned int linphone_chat_message_get_storage_id(LinphoneChatMessage* message); LINPHONE_PUBLIC LinphoneReason linphone_chat_message_get_reason(LinphoneChatMessage* msg); LINPHONE_PUBLIC const LinphoneErrorInfo *linphone_chat_message_get_error_info(const LinphoneChatMessage *msg); +LINPHONE_PUBLIC void linphone_chat_message_set_file_transfer_filepath(LinphoneChatMessage *msg, const char *filepath); +LINPHONE_PUBLIC const char * linphone_chat_message_get_file_transfer_filepath(LinphoneChatMessage *msg); +LINPHONE_PUBLIC LinphoneChatMessageCbs * linphone_chat_message_get_callbacks(const LinphoneChatMessage *msg); + +LINPHONE_PUBLIC LinphoneChatMessageCbs * linphone_chat_message_cbs_ref(LinphoneChatMessageCbs *cbs); +LINPHONE_PUBLIC void linphone_chat_message_cbs_unref(LinphoneChatMessageCbs *cbs); +LINPHONE_PUBLIC void *linphone_chat_message_cbs_get_user_data(const LinphoneChatMessageCbs *cbs); +LINPHONE_PUBLIC void linphone_chat_message_cbs_set_user_data(LinphoneChatMessageCbs *cbs, void *ud); +LINPHONE_PUBLIC LinphoneChatMessageMsgStateChangedCb linphone_chat_message_cbs_get_msg_state_changed(const LinphoneChatMessageCbs *cbs); +LINPHONE_PUBLIC void linphone_chat_message_cbs_set_msg_state_changed(LinphoneChatMessageCbs *cbs, LinphoneChatMessageMsgStateChangedCb cb); +LINPHONE_PUBLIC LinphoneChatMessageFileTransferRecvCb linphone_chat_message_cbs_get_file_transfer_recv(const LinphoneChatMessageCbs *cbs); +LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_recv(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferRecvCb cb); +LINPHONE_PUBLIC LinphoneChatMessageFileTransferSendCb linphone_chat_message_cbs_get_file_transfer_send(const LinphoneChatMessageCbs *cbs); +LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_send(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferSendCb cb); +LINPHONE_PUBLIC LinphoneChatMessageFileTransferProgressIndicationCb linphone_chat_message_cbs_get_file_transfer_progress_indication(const LinphoneChatMessageCbs *cbs); +LINPHONE_PUBLIC void linphone_chat_message_cbs_set_file_transfer_progress_indication(LinphoneChatMessageCbs *cbs, LinphoneChatMessageFileTransferProgressIndicationCb cb); + /** * @} */ @@ -1482,7 +1563,7 @@ typedef enum _LinphoneCoreLogCollectionUploadState { * @param gstate the global state * @param message informational message. */ -typedef void (*LinphoneCoreGlobalStateChangedCb )(LinphoneCore *lc, LinphoneGlobalState gstate, const char *message); +typedef void (*LinphoneCoreGlobalStateChangedCb)(LinphoneCore *lc, LinphoneGlobalState gstate, const char *message); /** * Call state notification callback. * @param lc the LinphoneCore @@ -1608,10 +1689,10 @@ typedef void (*LinphoneCoreFileTransferSendCb)(LinphoneCore *lc, LinphoneChatMes * @param lc #LinphoneCore object * @param message #LinphoneChatMessage message from which the body is received. * @param content #LinphoneContent incoming content information - * @param progress number of bytes sent/received from the begening of the transfer. - * + * @param offset The number of bytes sent/received since the beginning of the transfer. + * @param total The total number of bytes to be sent/received. */ -typedef void (*LinphoneCoreFileTransferProgressIndicationCb)(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t progress); +typedef void (*LinphoneCoreFileTransferProgressIndicationCb)(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total); /** * Is composing notification callback prototype. @@ -1694,7 +1775,7 @@ typedef void (*LinphoneCoreLogCollectionUploadStateChangedCb)(LinphoneCore *lc, * @param[in] lc LinphoneCore object * @param[in] progress Percentage of the file size of the log collection already uploaded. */ -typedef void (*LinphoneCoreLogCollectionUploadProgressIndicationCb)(LinphoneCore *lc, size_t progress); +typedef void (*LinphoneCoreLogCollectionUploadProgressIndicationCb)(LinphoneCore *lc, size_t offset, size_t total); /** * This structure holds all callbacks that the application should implement. @@ -1727,25 +1808,48 @@ typedef struct _LinphoneCoreVTable{ DisplayUrlCb display_url; /**< @deprecated */ ShowInterfaceCb show; /**< @deprecated Notifies the application that it should show up*/ LinphoneCoreTextMessageReceivedCb text_received; /**< @deprecated, use #message_received instead
A text message has been received */ - LinphoneCoreFileTransferRecvCb file_transfer_recv; /**< Callback to store file received attached to a #LinphoneChatMessage */ - LinphoneCoreFileTransferSendCb file_transfer_send; /**< Callback to collect file chunk to be sent for a #LinphoneChatMessage */ - LinphoneCoreFileTransferProgressIndicationCb file_transfer_progress_indication; /**< Callback to indicate file transfer progress */ + LinphoneCoreFileTransferRecvCb file_transfer_recv; /**< @deprecated Callback to store file received attached to a #LinphoneChatMessage */ + LinphoneCoreFileTransferSendCb file_transfer_send; /**< @deprecated Callback to collect file chunk to be sent for a #LinphoneChatMessage */ + LinphoneCoreFileTransferProgressIndicationCb file_transfer_progress_indication; /**< @deprecated Callback to indicate file transfer progress */ LinphoneCoreNetworkReachableCb network_reachable; /**< Callback to report IP network status (I.E up/down )*/ LinphoneCoreLogCollectionUploadStateChangedCb log_collection_upload_state_changed; /**< Callback to upload collected logs */ LinphoneCoreLogCollectionUploadProgressIndicationCb log_collection_upload_progress_indication; /**< Callback to indicate log collection upload progress */ + void *user_data; } LinphoneCoreVTable; /** - * Instantiate a vtable with all argument set to NULL + * Instantiate a vtable with all arguments set to NULL * @returns newly allocated vtable */ -LINPHONE_PUBLIC LinphoneCoreVTable *linphone_vtable_new(); +LINPHONE_PUBLIC LinphoneCoreVTable *linphone_core_v_table_new(); /** - * destroy a vtable. + * Sets a user data pointer in the vtable. + * @param table the vtable + * @param data the user data to attach + */ +LINPHONE_PUBLIC void linphone_core_v_table_set_user_data(LinphoneCoreVTable *table, void *data); + +/** + * Gets a user data pointer in the vtable. + * @param table the vtable + * @returns the data attached to the vtable + */ +LINPHONE_PUBLIC void* linphone_core_v_table_get_user_data(LinphoneCoreVTable *table); + +/** + * Gets the current VTable. + * This is meant only to be called from a callback to be able to get the user_data associated with the vtable that called the callback. + * @param lc the linphonecore + * @returns the vtable that called the last callback + */ +LINPHONE_PUBLIC LinphoneCoreVTable *linphone_core_get_current_vtable(LinphoneCore *lc); + +/** + * Destroy a vtable. * @param vtable to be destroyed */ -LINPHONE_PUBLIC void linphone_vtable_destroy(LinphoneCoreVTable* table); +LINPHONE_PUBLIC void linphone_core_v_table_destroy(LinphoneCoreVTable* table); /** * @} @@ -1753,8 +1857,8 @@ LINPHONE_PUBLIC void linphone_vtable_destroy(LinphoneCoreVTable* table); typedef struct _LCCallbackObj { - LinphoneCoreCbFunc _func; - void * _user_data; + LinphoneCoreCbFunc _func; + void * _user_data; }LCCallbackObj; @@ -1780,12 +1884,32 @@ typedef void * (*LinphoneCoreWaitingCallback)(LinphoneCore *lc, void *context, L /* THE main API */ +typedef enum _LinphoneLogCollectionState { + LinphoneLogCollectionDisabled, + LinphoneLogCollectionEnabled, + LinphoneLogCollectionEnabledWithoutPreviousLogHandler +} LinphoneLogCollectionState; + +/** + * Tells whether the linphone core log collection is enabled. + * @ingroup misc + * @returns The state of the linphone core log collection. + */ +LINPHONE_PUBLIC LinphoneLogCollectionState linphone_core_log_collection_enabled(void); + /** * Enable the linphone core log collection to upload logs on a server. * @ingroup misc - * @param[in] enable Boolean value telling whether to enable log collection or not. + * @param[in] state LinphoneLogCollectionState value telling whether to enable log collection or not. */ -LINPHONE_PUBLIC void linphone_core_enable_log_collection(bool_t enable); +LINPHONE_PUBLIC void linphone_core_enable_log_collection(LinphoneLogCollectionState state); + +/** + * Get the path where the log files will be written for log collection. + * @ingroup misc + * @returns The path where the log files will be written. + */ +LINPHONE_PUBLIC const char * linphone_core_get_log_collection_path(void); /** * Set the path where the log files will be written for log collection. @@ -1794,6 +1918,38 @@ LINPHONE_PUBLIC void linphone_core_enable_log_collection(bool_t enable); */ LINPHONE_PUBLIC void linphone_core_set_log_collection_path(const char *path); +/** + * Get the prefix of the filenames that will be used for log collection. + * @ingroup misc + * @returns The prefix of the filenames used for log collection. + */ +LINPHONE_PUBLIC const char * linphone_core_get_log_collection_prefix(void); + +/** + * Set the prefix of the filenames that will be used for log collection. + * @ingroup misc + * @param[in] prefix The prefix to use for the filenames for log collection. + */ +LINPHONE_PUBLIC void linphone_core_set_log_collection_prefix(const char *prefix); + +/** + * Get the max file size in bytes of the files used for log collection. + * @ingroup misc + * @returns The max file size in bytes of the files used for log collection. + */ +LINPHONE_PUBLIC int linphone_core_get_log_collection_max_file_size(void); + +/** + * Set the max file size in bytes of the files used for log collection. + * Warning: this function should only not be used to change size + * dynamically but instead only before calling @see + * linphone_core_enable_log_collection. If you increase max size + * on runtime, logs chronological order COULD be broken. + * @ingroup misc + * @param[in] size The max file size in bytes of the files used for log collection. + */ +LINPHONE_PUBLIC void linphone_core_set_log_collection_max_file_size(int size); + /** * Set the url of the server where to upload the collected log files. * @ingroup misc @@ -1809,6 +1965,19 @@ LINPHONE_PUBLIC void linphone_core_set_log_collection_upload_server_url(Linphone */ LINPHONE_PUBLIC void linphone_core_upload_log_collection(LinphoneCore *core); +/** + * Compress the log collection in a single file. + * @ingroup misc + * @return The path of the compressed log collection file (to be freed calling ms_free()). + */ +LINPHONE_PUBLIC char * linphone_core_compress_log_collection(); + +/** + * Reset the log collection by removing the log files. + * @ingroup misc + */ +LINPHONE_PUBLIC void linphone_core_reset_log_collection(); + /** * Define a log handler. * @@ -1983,6 +2152,16 @@ LINPHONE_PUBLIC LinphoneCallParams *linphone_core_create_call_params(LinphoneCor LINPHONE_PUBLIC LinphoneCall *linphone_core_get_call_by_remote_address(LinphoneCore *lc, const char *remote_address); +/** + * Send the specified dtmf. + * + * @ingroup media_parameters + * @deprecated Use #linphone_call_send_dtmf instead. + * This function only works during calls. The dtmf is automatically played to the user. + * @param lc The LinphoneCore object + * @param dtmf The dtmf name specified as a char, such as '0', '#' etc... + * +**/ LINPHONE_PUBLIC void linphone_core_send_dtmf(LinphoneCore *lc,char dtmf); LINPHONE_PUBLIC int linphone_core_set_primary_contact(LinphoneCore *lc, const char *contact); @@ -2612,7 +2791,14 @@ LINPHONE_PUBLIC void linphone_core_set_preferred_video_size(LinphoneCore *lc, MS LINPHONE_PUBLIC void linphone_core_set_preview_video_size(LinphoneCore *lc, MSVideoSize vsize); LINPHONE_PUBLIC void linphone_core_set_preview_video_size_by_name(LinphoneCore *lc, const char *name); LINPHONE_PUBLIC MSVideoSize linphone_core_get_preview_video_size(const LinphoneCore *lc); -LINPHONE_PUBLIC MSVideoSize linphone_core_get_preferred_video_size(LinphoneCore *lc); +LINPHONE_PUBLIC MSVideoSize linphone_core_get_preferred_video_size(const LinphoneCore *lc); + +/** + * Get the name of the current preferred video size for sending. + * @param[in] lc #LinphoneCore object. + * @returns A string containing the name of the current preferred video size (to be freed with ms_free()). + */ +LINPHONE_PUBLIC char * linphone_core_get_preferred_video_size_name(const LinphoneCore *lc); LINPHONE_PUBLIC void linphone_core_set_preferred_video_size_by_name(LinphoneCore *lc, const char *name); LINPHONE_PUBLIC void linphone_core_set_preferred_framerate(LinphoneCore *lc, float fps); LINPHONE_PUBLIC float linphone_core_get_preferred_framerate(LinphoneCore *lc); @@ -2687,7 +2873,7 @@ LINPHONE_PUBLIC void linphone_core_set_native_preview_window_id(LinphoneCore *lc **/ LINPHONE_PUBLIC void linphone_core_use_preview_window(LinphoneCore *lc, bool_t yesno); -int linphone_core_get_device_rotation(LinphoneCore *lc ); +LINPHONE_PUBLIC int linphone_core_get_device_rotation(LinphoneCore *lc ); LINPHONE_PUBLIC void linphone_core_set_device_rotation(LinphoneCore *lc, int rotation); /** @@ -3027,6 +3213,8 @@ LINPHONE_PUBLIC void linphone_core_set_avpf_mode(LinphoneCore *lc, LinphoneAVPFM LINPHONE_PUBLIC LinphoneAVPFMode linphone_core_get_avpf_mode(const LinphoneCore *lc); +LINPHONE_PUBLIC void linphone_core_set_avpf_rr_interval(LinphoneCore *lc, int interval); + LINPHONE_PUBLIC int linphone_core_get_avpf_rr_interval(const LinphoneCore *lc); #ifdef __cplusplus diff --git a/coreapi/linphonecore_jni.cc b/coreapi/linphonecore_jni.cc index dbcc128c7..83d28ef8c 100644 --- a/coreapi/linphonecore_jni.cc +++ b/coreapi/linphonecore_jni.cc @@ -21,14 +21,14 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "linphonecore_jni.h" #endif #include "linphonecore_utils.h" -#include +#include extern "C" { #include "mediastreamer2/mediastream.h" #include "mediastreamer2/mscommon.h" #include "mediastreamer2/dsptools.h" -#include "mediastreamer2/fileplayer.h" +#include "mediastreamer2/msmediaplayer.h" } #include "mediastreamer2/msjava.h" #include "private.h" @@ -163,122 +163,291 @@ extern "C" void Java_org_linphone_core_LinphoneCoreFactoryImpl_setDebugMode(JNIE } // LinphoneCore +/* + * returns the java LinphoneProxyConfig associated with a C LinphoneProxyConfig. +**/ +jobject getProxy(JNIEnv *env, LinphoneProxyConfig *proxy, jobject core){ + jobject jobj=0; + + if (proxy!=NULL){ + jclass proxyClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneProxyConfigImpl")); + jmethodID proxyCtrId = env->GetMethodID(proxyClass,"", "(Lorg/linphone/core/LinphoneCoreImpl;J)V"); + + void *up=linphone_proxy_config_get_user_data(proxy); + + if (up==NULL){ + jobj=env->NewObject(proxyClass,proxyCtrId,core,(jlong)proxy); + linphone_proxy_config_set_user_data(proxy,(void*)env->NewWeakGlobalRef(jobj)); + linphone_proxy_config_ref(proxy); + }else{ + //promote the weak ref to local ref + jobj=env->NewLocalRef((jobject)up); + if (jobj == NULL){ + //the weak ref was dead + jobj=env->NewObject(proxyClass,proxyCtrId,core,(jlong)proxy); + linphone_proxy_config_set_user_data(proxy,(void*)env->NewWeakGlobalRef(jobj)); + } + } + env->DeleteGlobalRef(proxyClass); + } + return jobj; +} + +jobject getCall(JNIEnv *env, LinphoneCall *call){ + jobject jobj=0; + + if (call!=NULL){ + jclass callClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCallImpl")); + jmethodID callCtrId = env->GetMethodID(callClass,"", "(J)V"); + + void *up=linphone_call_get_user_pointer(call); + + if (up==NULL){ + jobj=env->NewObject(callClass,callCtrId,(jlong)call); + jobj=env->NewGlobalRef(jobj); + linphone_call_set_user_pointer(call,(void*)jobj); + linphone_call_ref(call); + }else{ + jobj=(jobject)up; + } + env->DeleteGlobalRef(callClass); + } + return jobj; +} + +jobject getChatMessage(JNIEnv *env, LinphoneChatMessage *msg){ + jobject jobj = 0; + + if (msg != NULL){ + jclass chatMessageClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessageImpl")); + jmethodID chatMessageCtrId = env->GetMethodID(chatMessageClass,"", "(J)V"); + + void *up = linphone_chat_message_get_user_data(msg); + + if (up == NULL) { + jobj = env->NewObject(chatMessageClass,chatMessageCtrId,(jlong)linphone_chat_message_ref(msg)); + jobj = env->NewGlobalRef(jobj); + linphone_chat_message_set_user_data(msg,(void*)jobj); + } else { + jobj = (jobject)up; + } + env->DeleteGlobalRef(chatMessageClass); + } + return jobj; +} + +jobject getEvent(JNIEnv *env, LinphoneEvent *lev){ + if (lev==NULL) return NULL; + jobject jev=(jobject)linphone_event_get_user_data(lev); + if (jev==NULL){ + jclass linphoneEventClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneEventImpl")); + jmethodID linphoneEventCtrId = env->GetMethodID(linphoneEventClass,"", "(J)V"); + + jev=env->NewObject(linphoneEventClass,linphoneEventCtrId,(jlong)linphone_event_ref(lev)); + jev=env->NewGlobalRef(jev); + linphone_event_set_user_data(lev,jev); + + env->DeleteGlobalRef(linphoneEventClass); + } + return jev; +} + class LinphoneCoreData { public: - LinphoneCoreData(JNIEnv* env, jobject lc,jobject alistener, jobject auserdata) { - + LinphoneCoreData(JNIEnv *env, jobject lc, LinphoneCoreVTable *vTable, jobject alistener) { core = env->NewGlobalRef(lc); listener = env->NewGlobalRef(alistener); - userdata = auserdata?env->NewGlobalRef(auserdata):0; - memset(&vTable,0,sizeof(vTable)); - vTable.show = showInterfaceCb; - vTable.auth_info_requested = authInfoRequested; - vTable.display_status = displayStatusCb; - vTable.display_message = displayMessageCb; - vTable.display_warning = displayMessageCb; - vTable.global_state_changed = globalStateChange; - vTable.registration_state_changed = registrationStateChange; - vTable.call_state_changed = callStateChange; - vTable.call_encryption_changed = callEncryptionChange; - vTable.text_received = text_received; - vTable.message_received = message_received; - vTable.is_composing_received = is_composing_received; - vTable.dtmf_received = dtmf_received; - vTable.new_subscription_requested = new_subscription_requested; - vTable.notify_presence_received = notify_presence_received; - vTable.call_stats_updated = callStatsUpdated; - vTable.transfer_state_changed = transferStateChanged; - vTable.info_received = infoReceived; - vTable.subscription_state_changed=subscriptionStateChanged; - vTable.notify_received=notifyReceived; - vTable.publish_state_changed=publishStateChanged; - vTable.configuring_status=configuringStatus; - vTable.file_transfer_progress_indication=fileTransferProgressIndication; - vTable.file_transfer_send=fileTransferSend; - vTable.file_transfer_recv=fileTransferRecv; - - listenerClass = (jclass)env->NewGlobalRef(env->GetObjectClass( alistener)); + + memset(vTable, 0, sizeof(LinphoneCoreVTable)); + + listenerClass = (jclass)env->NewGlobalRef(env->GetObjectClass(alistener)); /*displayStatus(LinphoneCore lc,String message);*/ displayStatusId = env->GetMethodID(listenerClass,"displayStatus","(Lorg/linphone/core/LinphoneCore;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (displayStatusId) { + vTable->display_status = displayStatusCb; + } /*void generalState(LinphoneCore lc,int state); */ - globalStateId = env->GetMethodID(listenerClass,"globalState","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$GlobalState;Ljava/lang/String;)V"); globalStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$GlobalState")); globalStateFromIntId = env->GetStaticMethodID(globalStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCore$GlobalState;"); - + globalStateId = env->GetMethodID(listenerClass,"globalState","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$GlobalState;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (globalStateId) { + vTable->global_state_changed = globalStateChange; + } + /*registrationState(LinphoneCore lc, LinphoneProxyConfig cfg, LinphoneCore.RegistrationState cstate, String smessage);*/ - registrationStateId = env->GetMethodID(listenerClass,"registrationState","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneProxyConfig;Lorg/linphone/core/LinphoneCore$RegistrationState;Ljava/lang/String;)V"); registrationStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$RegistrationState")); registrationStateFromIntId = env->GetStaticMethodID(registrationStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCore$RegistrationState;"); - + registrationStateId = env->GetMethodID(listenerClass,"registrationState","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneProxyConfig;Lorg/linphone/core/LinphoneCore$RegistrationState;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (registrationStateId) { + vTable->registration_state_changed = registrationStateChange; + } + /*callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State cstate,String message);*/ - callStateId = env->GetMethodID(listenerClass,"callState","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;Lorg/linphone/core/LinphoneCall$State;Ljava/lang/String;)V"); callStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCall$State")); callStateFromIntId = env->GetStaticMethodID(callStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCall$State;"); - + callStateId = env->GetMethodID(listenerClass,"callState","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;Lorg/linphone/core/LinphoneCall$State;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (callStateId) { + vTable->call_state_changed = callStateChange; + } + transferStateId = env->GetMethodID(listenerClass,"transferState","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;Lorg/linphone/core/LinphoneCall$State;)V"); + env->ExceptionClear(); + if (transferStateId) { + vTable->transfer_state_changed = transferStateChanged; + } /*callStatsUpdated(LinphoneCore lc, LinphoneCall call, LinphoneCallStats stats);*/ callStatsUpdatedId = env->GetMethodID(listenerClass, "callStatsUpdated", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;Lorg/linphone/core/LinphoneCallStats;)V"); - - chatMessageStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessage$State")); - chatMessageStateFromIntId = env->GetStaticMethodID(chatMessageStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneChatMessage$State;"); + env->ExceptionClear(); + if (callStatsUpdatedId) { + vTable->call_stats_updated = callStatsUpdated; + } /*callEncryption(LinphoneCore lc, LinphoneCall call, boolean encrypted,String auth_token);*/ - callEncryptionChangedId=env->GetMethodID(listenerClass,"callEncryptionChanged","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;ZLjava/lang/String;)V"); + callEncryptionChangedId = env->GetMethodID(listenerClass,"callEncryptionChanged","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;ZLjava/lang/String;)V"); + env->ExceptionClear(); + if (callEncryptionChangedId) { + vTable->call_encryption_changed = callEncryptionChange; + } /*void ecCalibrationStatus(LinphoneCore.EcCalibratorStatus status, int delay_ms, Object data);*/ - ecCalibrationStatusId = env->GetMethodID(listenerClass,"ecCalibrationStatus","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$EcCalibratorStatus;ILjava/lang/Object;)V"); ecCalibratorStatusClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$EcCalibratorStatus")); ecCalibratorStatusFromIntId = env->GetStaticMethodID(ecCalibratorStatusClass,"fromInt","(I)Lorg/linphone/core/LinphoneCore$EcCalibratorStatus;"); + ecCalibrationStatusId = env->GetMethodID(listenerClass,"ecCalibrationStatus","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$EcCalibratorStatus;ILjava/lang/Object;)V"); + env->ExceptionClear(); /*void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf, String url)*/ newSubscriptionRequestId = env->GetMethodID(listenerClass,"newSubscriptionRequest","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneFriend;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (newSubscriptionRequestId) { + vTable->new_subscription_requested = new_subscription_requested; + } authInfoRequestedId = env->GetMethodID(listenerClass,"authInfoRequested","(Lorg/linphone/core/LinphoneCore;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (authInfoRequestedId) { + vTable->auth_info_requested = authInfoRequested; + } /*void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf);*/ notifyPresenceReceivedId = env->GetMethodID(listenerClass,"notifyPresenceReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneFriend;)V"); + env->ExceptionClear(); + if (notifyPresenceReceivedId) { + vTable->notify_presence_received = notify_presence_received; + } /*void textReceived(LinphoneCore lc, LinphoneChatRoom cr,LinphoneAddress from,String message);*/ textReceivedId = env->GetMethodID(listenerClass,"textReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatRoom;Lorg/linphone/core/LinphoneAddress;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (textReceivedId) { + vTable->text_received = text_received; + } + messageReceivedId = env->GetMethodID(listenerClass,"messageReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatRoom;Lorg/linphone/core/LinphoneChatMessage;)V"); + env->ExceptionClear(); + if (messageReceivedId) { + vTable->message_received = message_received; + } + isComposingReceivedId = env->GetMethodID(listenerClass,"isComposingReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatRoom;)V"); + env->ExceptionClear(); + if (isComposingReceivedId) { + vTable->is_composing_received = is_composing_received; + } + dtmfReceivedId = env->GetMethodID(listenerClass,"dtmfReceived","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;I)V"); - infoReceivedId = env->GetMethodID(listenerClass,"infoReceived", - "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;Lorg/linphone/core/LinphoneInfoMessage;)V"); + env->ExceptionClear(); + if (dtmfReceivedId) { + vTable->dtmf_received = dtmf_received; + } + + infoReceivedId = env->GetMethodID(listenerClass,"infoReceived", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCall;Lorg/linphone/core/LinphoneInfoMessage;)V"); + env->ExceptionClear(); + if (infoReceivedId) { + vTable->info_received = infoReceived; + } - subscriptionStateId = env->GetMethodID(listenerClass,"subscriptionStateChanged", - "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Lorg/linphone/core/SubscriptionState;)V"); - publishStateId = env->GetMethodID(listenerClass,"publishStateChanged", - "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Lorg/linphone/core/PublishState;)V"); - notifyRecvId = env->GetMethodID(listenerClass,"notifyReceived", - "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Ljava/lang/String;Lorg/linphone/core/LinphoneContent;)V"); + subscriptionStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/SubscriptionState")); + subscriptionStateFromIntId = env->GetStaticMethodID(subscriptionStateClass,"fromInt","(I)Lorg/linphone/core/SubscriptionState;"); + subscriptionStateId = env->GetMethodID(listenerClass,"subscriptionStateChanged", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Lorg/linphone/core/SubscriptionState;)V"); + env->ExceptionClear(); + if (subscriptionStateId) { + vTable->subscription_state_changed = subscriptionStateChanged; + } + + publishStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/PublishState")); + publishStateFromIntId = env->GetStaticMethodID(publishStateClass,"fromInt","(I)Lorg/linphone/core/PublishState;"); + publishStateId = env->GetMethodID(listenerClass,"publishStateChanged", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Lorg/linphone/core/PublishState;)V"); + env->ExceptionClear(); + if (publishStateId) { + vTable->publish_state_changed = publishStateChanged; + } + + notifyRecvId = env->GetMethodID(listenerClass,"notifyReceived", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneEvent;Ljava/lang/String;Lorg/linphone/core/LinphoneContent;)V"); + env->ExceptionClear(); + if (notifyRecvId) { + vTable->notify_received = notifyReceived; + } + configuringStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$RemoteProvisioningState")); + configuringStateFromIntId = env->GetStaticMethodID(configuringStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCore$RemoteProvisioningState;"); + configuringStateId = env->GetMethodID(listenerClass,"configuringStatus","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$RemoteProvisioningState;Ljava/lang/String;)V"); + env->ExceptionClear(); + if (configuringStateId) { + vTable->configuring_status = configuringStatus; + } + fileTransferProgressIndicationId = env->GetMethodID(listenerClass, "fileTransferProgressIndication", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;I)V"); + env->ExceptionClear(); + if (fileTransferProgressIndicationId) { + vTable->file_transfer_progress_indication = fileTransferProgressIndication; + } + + fileTransferSendId = env->GetMethodID(listenerClass, "fileTransferSend", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;Ljava/nio/ByteBuffer;I)I"); + env->ExceptionClear(); + if (fileTransferSendId) { + vTable->file_transfer_send = fileTransferSend; + } + + fileTransferRecvId = env->GetMethodID(listenerClass, "fileTransferRecv", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;[BI)V"); + env->ExceptionClear(); + if (fileTransferRecvId) { + vTable->file_transfer_recv = fileTransferRecv; + } + + chatMessageStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessage$State")); + chatMessageStateFromIntId = env->GetStaticMethodID(chatMessageStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneChatMessage$State;"); + proxyClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneProxyConfigImpl")); proxyCtrId = env->GetMethodID(proxyClass,"", "(Lorg/linphone/core/LinphoneCoreImpl;J)V"); callClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCallImpl")); callCtrId = env->GetMethodID(callClass,"", "(J)V"); + callSetAudioStatsId = env->GetMethodID(callClass, "setAudioStats", "(Lorg/linphone/core/LinphoneCallStats;)V"); + callSetVideoStatsId = env->GetMethodID(callClass, "setVideoStats", "(Lorg/linphone/core/LinphoneCallStats;)V"); chatMessageClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessageImpl")); - if (chatMessageClass) chatMessageCtrId = env->GetMethodID(chatMessageClass,"", "(J)V"); + if (chatMessageClass) { + chatMessageCtrId = env->GetMethodID(chatMessageClass,"", "(J)V"); + } chatRoomClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatRoomImpl")); chatRoomCtrId = env->GetMethodID(chatRoomClass,"", "(J)V"); friendClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneFriendImpl"));; - friendCtrId =env->GetMethodID(friendClass,"", "(J)V"); + friendCtrId = env->GetMethodID(friendClass,"", "(J)V"); addressClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneAddressImpl")); - addressCtrId =env->GetMethodID(addressClass,"", "(J)V"); + addressCtrId = env->GetMethodID(addressClass,"", "(J)V"); callStatsClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCallStatsImpl")); callStatsId = env->GetMethodID(callStatsClass, "", "(JJ)V"); - callSetAudioStatsId = env->GetMethodID(callClass, "setAudioStats", "(Lorg/linphone/core/LinphoneCallStats;)V"); - callSetVideoStatsId = env->GetMethodID(callClass, "setVideoStats", "(Lorg/linphone/core/LinphoneCallStats;)V"); infoMessageClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneInfoMessageImpl")); infoMessageCtor = env->GetMethodID(infoMessageClass,"", "(J)V"); @@ -286,22 +455,8 @@ public: linphoneEventClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneEventImpl")); linphoneEventCtrId = env->GetMethodID(linphoneEventClass,"", "(J)V"); - subscriptionStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/SubscriptionState")); - subscriptionStateFromIntId = env->GetStaticMethodID(subscriptionStateClass,"fromInt","(I)Lorg/linphone/core/SubscriptionState;"); - - publishStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/PublishState")); - publishStateFromIntId = env->GetStaticMethodID(publishStateClass,"fromInt","(I)Lorg/linphone/core/PublishState;"); - subscriptionDirClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/SubscriptionDir")); subscriptionDirFromIntId = env->GetStaticMethodID(subscriptionDirClass,"fromInt","(I)Lorg/linphone/core/SubscriptionDir;"); - - configuringStateId = env->GetMethodID(listenerClass,"configuringStatus","(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneCore$RemoteProvisioningState;Ljava/lang/String;)V"); - configuringStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneCore$RemoteProvisioningState")); - configuringStateFromIntId = env->GetStaticMethodID(configuringStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneCore$RemoteProvisioningState;"); - - fileTransferProgressIndicationId = env->GetMethodID(listenerClass, "fileTransferProgressIndication", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;I)V"); - fileTransferSendId = env->GetMethodID(listenerClass, "fileTransferSend", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;Ljava/nio/ByteBuffer;I)I"); - fileTransferRecvId = env->GetMethodID(listenerClass, "fileTransferRecv", "(Lorg/linphone/core/LinphoneCore;Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneContent;[BI)V"); } ~LinphoneCoreData() { @@ -309,7 +464,6 @@ public: jvm->AttachCurrentThread(&env,NULL); env->DeleteGlobalRef(core); env->DeleteGlobalRef(listener); - if (userdata) env->DeleteGlobalRef(userdata); env->DeleteGlobalRef(listenerClass); env->DeleteGlobalRef(globalStateClass); env->DeleteGlobalRef(configuringStateClass); @@ -328,7 +482,6 @@ public: } jobject core; jobject listener; - jobject userdata; jclass listenerClass; jmethodID displayStatusId; @@ -414,13 +567,7 @@ public: jmethodID fileTransferRecvId; LinphoneCoreVTable vTable; - - static void showInterfaceCb(LinphoneCore *lc) { - - } - static void byeReceivedCb(LinphoneCore *lc, const char *from) { - - } + static void displayStatusCb(LinphoneCore *lc, const char *message) { JNIEnv *env = 0; jint result = jvm->AttachCurrentThread(&env,NULL); @@ -428,11 +575,9 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener,lcData->displayStatusId,lcData->core,message ? env->NewStringUTF(message) : NULL); - } - static void displayMessageCb(LinphoneCore *lc, const char *message) { - } static void authInfoRequested(LinphoneCore *lc, const char *realm, const char *username, const char *domain) { JNIEnv *env = 0; @@ -441,7 +586,8 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener, lcData->authInfoRequestedId, lcData->core, @@ -456,38 +602,14 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->globalStateId ,lcData->core ,env->CallStaticObjectMethod(lcData->globalStateClass,lcData->globalStateFromIntId,(jint)gstate), message ? env->NewStringUTF(message) : NULL); } - /* - * returns the java LinphoneProxyConfig associated with a C LinphoneProxyConfig. - **/ - jobject getProxy(JNIEnv *env , LinphoneProxyConfig *proxy, jobject core){ - jobject jobj=0; - - if (proxy!=NULL){ - void *up=linphone_proxy_config_get_user_data(proxy); - - if (up==NULL){ - jobj=env->NewObject(proxyClass,proxyCtrId,core,(jlong)proxy); - linphone_proxy_config_set_user_data(proxy,(void*)env->NewWeakGlobalRef(jobj)); - linphone_proxy_config_ref(proxy); - }else{ - //promote the weak ref to local ref - jobj=env->NewLocalRef((jobject)up); - if (jobj == NULL){ - //the weak ref was dead - jobj=env->NewObject(proxyClass,proxyCtrId,core,(jlong)proxy); - linphone_proxy_config_set_user_data(proxy,(void*)env->NewWeakGlobalRef(jobj)); - } - } - } - return jobj; - } static void registrationStateChange(LinphoneCore *lc, LinphoneProxyConfig* proxy,LinphoneRegistrationState state,const char* message) { JNIEnv *env = 0; jint result = jvm->AttachCurrentThread(&env,NULL); @@ -496,31 +618,15 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->registrationStateId ,lcData->core - ,(jproxy=lcData->getProxy(env,proxy,lcData->core)) + ,(jproxy=getProxy(env,proxy,lcData->core)) ,env->CallStaticObjectMethod(lcData->registrationStateClass,lcData->registrationStateFromIntId,(jint)state), message ? env->NewStringUTF(message) : NULL); } - jobject getCall(JNIEnv *env , LinphoneCall *call){ - jobject jobj=0; - - if (call!=NULL){ - void *up=linphone_call_get_user_pointer(call); - - if (up==NULL){ - jobj=env->NewObject(callClass,callCtrId,(jlong)call); - jobj=env->NewGlobalRef(jobj); - linphone_call_set_user_pointer(call,(void*)jobj); - linphone_call_ref(call); - }else{ - jobj=(jobject)up; - } - } - return jobj; - } static void callStateChange(LinphoneCore *lc, LinphoneCall* call,LinphoneCallState state,const char* message) { JNIEnv *env = 0; @@ -530,11 +636,12 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->callStateId ,lcData->core - ,(jcall=lcData->getCall(env,call)) + ,(jcall=getCall(env,call)) ,env->CallStaticObjectMethod(lcData->callStateClass,lcData->callStateFromIntId,(jint)state), message ? env->NewStringUTF(message) : NULL); if (state==LinphoneCallReleased){ @@ -549,11 +656,12 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->callEncryptionChangedId ,lcData->core - ,lcData->getCall(env,call) + ,getCall(env,call) ,encrypted ,authentication_token ? env->NewStringUTF(authentication_token) : NULL); } @@ -564,7 +672,8 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->notifyPresenceReceivedId ,lcData->core @@ -577,7 +686,8 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->newSubscriptionRequestId ,lcData->core @@ -591,11 +701,12 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->dtmfReceivedId ,lcData->core - ,lcData->getCall(env,call) + ,getCall(env,call) ,dtmf); } static void text_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from, const char *message) { @@ -605,7 +716,8 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->textReceivedId ,lcData->core @@ -613,38 +725,23 @@ public: ,env->NewObject(lcData->addressClass,lcData->addressCtrId,(jlong)from) ,message ? env->NewStringUTF(message) : NULL); } - jobject getChatMessage(JNIEnv *env , LinphoneChatMessage *msg){ - jobject jobj = 0; - - if (msg != NULL){ - void *up = linphone_chat_message_get_user_data(msg); - - if (up == NULL) { - jobj = env->NewObject(chatMessageClass,chatMessageCtrId,(jlong)linphone_chat_message_ref(msg)); - jobj = env->NewGlobalRef(jobj); - linphone_chat_message_set_user_data(msg,(void*)jobj); - } else { - jobj = (jobject)up; - } - } - return jobj; - } static void message_received(LinphoneCore *lc, LinphoneChatRoom *room, LinphoneChatMessage *msg) { - JNIEnv *env = 0; - jobject jmsg; - jint result = jvm->AttachCurrentThread(&env,NULL); - if (result != 0) { - ms_error("cannot attach VM"); - return; - } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); - /*note: we call linphone_chat_message_ref() because the application does not acquire the object when invoked from a callback*/ - env->CallVoidMethod(lcData->listener - ,lcData->messageReceivedId - ,lcData->core - ,env->NewObject(lcData->chatRoomClass,lcData->chatRoomCtrId,(jlong)room) - ,(jmsg = lcData->getChatMessage(env, msg))); + JNIEnv *env = 0; + jobject jmsg; + jint result = jvm->AttachCurrentThread(&env,NULL); + if (result != 0) { + ms_error("cannot attach VM"); + return; } + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + /*note: we call linphone_chat_message_ref() because the application does not acquire the object when invoked from a callback*/ + env->CallVoidMethod(lcData->listener + ,lcData->messageReceivedId + ,lcData->core + ,env->NewObject(lcData->chatRoomClass,lcData->chatRoomCtrId,(jlong)room) + ,(jmsg = getChatMessage(env, msg))); + } static void is_composing_received(LinphoneCore *lc, LinphoneChatRoom *room) { JNIEnv *env = 0; jint result = jvm->AttachCurrentThread(&env,NULL); @@ -652,7 +749,8 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->isComposingReceivedId ,lcData->core @@ -665,7 +763,8 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->ecCalibrationStatusId ,lcData->core @@ -687,9 +786,10 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); statsobj = env->NewObject(lcData->callStatsClass, lcData->callStatsId, (jlong)call, (jlong)stats); - callobj = lcData->getCall(env, call); + callobj = getCall(env, call); if (stats->type == LINPHONE_CALL_STATS_AUDIO) env->CallVoidMethod(callobj, lcData->callSetAudioStatsId, statsobj); else @@ -704,41 +804,32 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->transferStateId ,lcData->core - ,(jcall=lcData->getCall(env,call)) + ,(jcall=getCall(env,call)) ,env->CallStaticObjectMethod(lcData->callStateClass,lcData->callStateFromIntId,(jint)remote_call_state) ); } static void infoReceived(LinphoneCore *lc, LinphoneCall*call, const LinphoneInfoMessage *info){ JNIEnv *env = 0; jint result = jvm->AttachCurrentThread(&env,NULL); - jobject jcall; if (result != 0) { ms_error("cannot attach VM"); return; } LinphoneInfoMessage *copy_info=linphone_info_message_copy(info); - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener ,lcData->infoReceivedId ,lcData->core - ,lcData->getCall(env,call) + ,getCall(env,call) ,env->NewObject(lcData->infoMessageClass,lcData->infoMessageCtor,(jlong)copy_info) ); } - jobject getEvent(JNIEnv *env, LinphoneEvent *lev){ - if (lev==NULL) return NULL; - jobject jev=(jobject)linphone_event_get_user_data(lev); - if (jev==NULL){ - jev=env->NewObject(linphoneEventClass,linphoneEventCtrId,(jlong)linphone_event_ref(lev)); - jev=env->NewGlobalRef(jev); - linphone_event_set_user_data(lev,jev); - } - return jev; - } static void subscriptionStateChanged(LinphoneCore *lc, LinphoneEvent *ev, LinphoneSubscriptionState state){ JNIEnv *env = 0; jint result = jvm->AttachCurrentThread(&env,NULL); @@ -748,8 +839,9 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); - jevent=lcData->getEvent(env,ev); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + jevent=getEvent(env,ev); jstate=env->CallStaticObjectMethod(lcData->subscriptionStateClass,lcData->subscriptionStateFromIntId,(jint)state); env->CallVoidMethod(lcData->listener ,lcData->subscriptionStateId @@ -772,8 +864,9 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); - jevent=lcData->getEvent(env,ev); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + jevent=getEvent(env,ev); jstate=env->CallStaticObjectMethod(lcData->publishStateClass,lcData->publishStateFromIntId,(jint)state); env->CallVoidMethod(lcData->listener ,lcData->publishStateId @@ -790,8 +883,9 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); - jevent=lcData->getEvent(env,ev); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + jevent=getEvent(env,ev); env->CallVoidMethod(lcData->listener ,lcData->notifyRecvId ,lcData->core @@ -808,23 +902,26 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); env->CallVoidMethod(lcData->listener, lcData->configuringStateId, lcData->core, env->CallStaticObjectMethod(lcData->configuringStateClass,lcData->configuringStateFromIntId,(jint)status), message ? env->NewStringUTF(message) : NULL); } - static void fileTransferProgressIndication(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t progress) { + static void fileTransferProgressIndication(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total) { JNIEnv *env = 0; jobject jmsg; + size_t progress = (offset * 100) / total; jint result = jvm->AttachCurrentThread(&env,NULL); if (result != 0) { ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); - env->CallVoidMethod(lcData->listener, - lcData->fileTransferProgressIndicationId, - lcData->core, - (jmsg = lcData->getChatMessage(env, message)), + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + env->CallVoidMethod(lcData->listener, + lcData->fileTransferProgressIndicationId, + lcData->core, + (jmsg = getChatMessage(env, message)), content ? create_java_linphone_content(env, content) : NULL, progress); } @@ -838,11 +935,12 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); - *size = env->CallIntMethod(lcData->listener, - lcData->fileTransferSendId, - lcData->core, - (jmsg = lcData->getChatMessage(env, message)), + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + *size = env->CallIntMethod(lcData->listener, + lcData->fileTransferSendId, + lcData->core, + (jmsg = getChatMessage(env, message)), content ? create_java_linphone_content(env, content) : NULL, buff ? env->NewDirectByteBuffer(buff, asking) : NULL, asking); @@ -856,15 +954,16 @@ public: ms_error("cannot attach VM"); return; } - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); - + LinphoneCoreVTable *table = linphone_core_get_current_vtable(lc); + LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_v_table_get_user_data(table); + jbyteArray jbytes = env->NewByteArray(size); env->SetByteArrayRegion(jbytes, 0, size, (jbyte*)buff); - - env->CallVoidMethod(lcData->listener, - lcData->fileTransferRecvId, - lcData->core, - (jmsg = lcData->getChatMessage(env, message)), + + env->CallVoidMethod(lcData->listener, + lcData->fileTransferRecvId, + lcData->core, + (jmsg = getChatMessage(env, message)), content ? create_java_linphone_content(env, content) : NULL, jbytes, size); @@ -872,15 +971,18 @@ public: }; extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_newLinphoneCore(JNIEnv* env - ,jobject thiz + ,jobject thiz ,jobject jlistener ,jstring juserConfig ,jstring jfactoryConfig - ,jobject juserdata){ + ,jobject juserdata){ const char* userConfig = juserConfig?env->GetStringUTFChars(juserConfig, NULL):NULL; const char* factoryConfig = jfactoryConfig?env->GetStringUTFChars(jfactoryConfig, NULL):NULL; - LinphoneCoreData* ldata = new LinphoneCoreData(env,thiz,jlistener,juserdata); + + LinphoneCoreVTable *vTable = linphone_core_v_table_new(); + LinphoneCoreData* ldata = new LinphoneCoreData(env, thiz, vTable, jlistener); + linphone_core_v_table_set_user_data(vTable, ldata); ms_init(); // Initialize mediastreamer2 before loading the plugins @@ -906,23 +1008,31 @@ extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_newLinphoneCore(JNIEnv* libmswebrtc_init(); #endif - jlong nativePtr = (jlong)linphone_core_new( &ldata->vTable - ,userConfig - ,factoryConfig - ,ldata); - + jobject core = env->NewGlobalRef(thiz); + jlong nativePtr = (jlong)linphone_core_new(vTable, userConfig, factoryConfig, core); if (userConfig) env->ReleaseStringUTFChars(juserConfig, userConfig); if (factoryConfig) env->ReleaseStringUTFChars(jfactoryConfig, factoryConfig); return nativePtr; } -extern "C" void Java_org_linphone_core_LinphoneCoreImpl_delete(JNIEnv* env - ,jobject thiz - ,jlong lc) { - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc); +extern "C" void Java_org_linphone_core_LinphoneCoreImpl_delete(JNIEnv* env, jobject thiz, jlong lc) { + jobject core = (jobject)linphone_core_get_user_data((LinphoneCore*)lc); linphone_core_destroy((LinphoneCore*)lc); ms_exit(); - delete lcData; + if (core) { + env->DeleteGlobalRef(core); + } +} + +extern "C" void Java_org_linphone_core_LinphoneCoreImpl_addListener(JNIEnv* env, jobject thiz, jlong lc, jobject jlistener) { + LinphoneCoreVTable *vTable = linphone_core_v_table_new(); + LinphoneCoreData* ldata = new LinphoneCoreData(env, thiz, vTable, jlistener); + linphone_core_v_table_set_user_data(vTable, ldata); + linphone_core_add_listener((LinphoneCore*)lc, vTable); +} + +extern "C" void Java_org_linphone_core_LinphoneCoreImpl_removeListener(JNIEnv* env, jobject thiz, jlong lc, jobject jlistener) { + //TODO } extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_migrateToMultiTransport(JNIEnv* env @@ -992,15 +1102,14 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setDefaultProxyConfig( J ,jlong pc) { linphone_core_set_default_proxy((LinphoneCore*)lc,(LinphoneProxyConfig*)pc); } - + extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_getDefaultProxyConfig(JNIEnv* env ,jobject thiz ,jlong lc) { LinphoneProxyConfig *config=0; - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc); linphone_core_get_default_proxy((LinphoneCore*)lc,&config); if(config != 0) { - jobject jproxy = lcData->getProxy(env,config,lcData->core); + jobject jproxy = getProxy(env,config,thiz); return jproxy; } else { return NULL; @@ -1012,11 +1121,10 @@ extern "C" jobjectArray Java_org_linphone_core_LinphoneCoreImpl_getProxyConfigLi int proxyCount = ms_list_size(proxies); jclass cls = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneProxyConfigImpl")); jobjectArray jProxies = env->NewObjectArray(proxyCount,cls,NULL); - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc); for (int i = 0; i < proxyCount; i++ ) { LinphoneProxyConfig* proxy = (LinphoneProxyConfig*)proxies->data; - jobject jproxy = lcData->getProxy(env,proxy,lcData->core); + jobject jproxy = getProxy(env,proxy,thiz); if(jproxy != NULL){ env->SetObjectArrayElement(jProxies, i, jproxy); } @@ -1098,17 +1206,15 @@ extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_invite(JNIEnv* env ,jlong lc ,jstring juri) { const char* uri = env->GetStringUTFChars(juri, NULL); - LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc); LinphoneCall* lCall = linphone_core_invite((LinphoneCore*)lc,uri); env->ReleaseStringUTFChars(juri, uri); - return lcd->getCall(env,lCall); + return getCall(env,lCall); } extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_inviteAddress(JNIEnv* env ,jobject thiz ,jlong lc ,jlong to) { - LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc); - return lcd->getCall(env, linphone_core_invite_address((LinphoneCore*)lc,(LinphoneAddress*)to)); + return getCall(env, linphone_core_invite_address((LinphoneCore*)lc,(LinphoneAddress*)to)); } extern "C" void Java_org_linphone_core_LinphoneCoreImpl_terminateCall(JNIEnv* env @@ -1458,9 +1564,7 @@ extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_getCurrentCall(JNIEnv ,jobject thiz ,jlong lc ) { - LinphoneCoreData *lcdata=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc); - - return lcdata->getCall(env,linphone_core_get_current_call((LinphoneCore*)lc)); + return getCall(env,linphone_core_get_current_call((LinphoneCore*)lc)); } extern "C" void Java_org_linphone_core_LinphoneCoreImpl_addFriend(JNIEnv* env ,jobject thiz @@ -2384,9 +2488,8 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneCallImpl_getTransferState( JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCallImpl_getTransfererCall(JNIEnv *env, jobject jCall, jlong callptr){ LinphoneCall *call=(LinphoneCall*)callptr; LinphoneCore *lc=linphone_call_get_core(call); - LinphoneCoreData *lcdata=(LinphoneCoreData*)linphone_core_get_user_data(lc); LinphoneCall *ret=linphone_call_get_transferer_call(call); - return lcdata->getCall(env,ret); + return getCall(env,ret); } /* @@ -2397,9 +2500,8 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCallImpl_getTransfererC JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCallImpl_getTransferTargetCall(JNIEnv *env, jobject jCall, jlong callptr){ LinphoneCall *call=(LinphoneCall*)callptr; LinphoneCore *lc=linphone_call_get_core(call); - LinphoneCoreData *lcdata=(LinphoneCoreData*)linphone_core_get_user_data(lc); LinphoneCall *ret=linphone_call_get_transfer_target_call(call); - return lcdata->getCall(env,ret); + return getCall(env,ret); } extern "C" void Java_org_linphone_core_LinphoneCallImpl_enableEchoCancellation( JNIEnv* env @@ -2429,8 +2531,7 @@ extern "C" jboolean Java_org_linphone_core_LinphoneCallImpl_isEchoLimiterEnabled extern "C" jobject Java_org_linphone_core_LinphoneCallImpl_getReplacedCall( JNIEnv* env ,jobject thiz ,jlong ptr) { - LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data(linphone_call_get_core((LinphoneCall*)ptr)); - return lcd->getCall(env,linphone_call_get_replaced_call((LinphoneCall*)ptr)); + return getCall(env,linphone_call_get_replaced_call((LinphoneCall*)ptr)); } extern "C" jfloat Java_org_linphone_core_LinphoneCallImpl_getCurrentQuality( JNIEnv* env @@ -2445,6 +2546,10 @@ extern "C" jfloat Java_org_linphone_core_LinphoneCallImpl_getAverageQuality( JNI return (jfloat)linphone_call_get_average_quality((LinphoneCall*)ptr); } +extern "C" jlong Java_org_linphone_core_LinphoneCallImpl_getPlayer(JNIEnv *env, jobject thiz, jlong callPtr) { + return (jlong)linphone_call_get_player((LinphoneCall *)callPtr); +} + //LinphoneFriend extern "C" jlong Java_org_linphone_core_LinphoneFriendImpl_newLinphoneFriend(JNIEnv* env ,jobject thiz @@ -2503,8 +2608,8 @@ extern "C" jobject Java_org_linphone_core_LinphoneFriendImpl_getCore(JNIEnv* en ,jlong ptr) { LinphoneCore *lc=linphone_friend_get_core((LinphoneFriend*)ptr); if (lc!=NULL){ - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); - return lcData->core; + jobject core = (jobject)linphone_core_get_user_data(lc); + return core; } return NULL; } @@ -2666,14 +2771,14 @@ extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_destroy(JNIEnv* env } extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_createFileTransferMessage(JNIEnv* env, jobject thiz, jlong ptr, jstring jname, jstring jtype, jstring jsubtype, jint data_size) { - LinphoneContent content = {0}; + LinphoneContentPrivate content = {0}; LinphoneChatMessage *message = NULL; content.type = (char*)env->GetStringUTFChars(jtype, NULL); content.subtype = (char*)env->GetStringUTFChars(jsubtype, NULL); content.name = (char*)env->GetStringUTFChars(jname, NULL); content.size = data_size; - message = linphone_chat_room_create_file_transfer_message((LinphoneChatRoom *)ptr, &content); + message = linphone_chat_room_create_file_transfer_message((LinphoneChatRoom *)ptr, LINPHONE_CONTENT(&content)); env->ReleaseStringUTFChars(jtype, content.type); env->ReleaseStringUTFChars(jsubtype, content.subtype); env->ReleaseStringUTFChars(jname, content.name); @@ -2681,8 +2786,8 @@ extern "C" jlong Java_org_linphone_core_LinphoneChatRoomImpl_createFileTransferM return (jlong) message; } -extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_cancelFileTransfer(JNIEnv* env, jobject thiz, jlong ptr, jlong message) { - linphone_chat_room_cancel_file_transfer((LinphoneChatMessage *)message); +extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_cancelFileTransfer(JNIEnv* env, jobject thiz, jlong ptr) { + linphone_chat_message_cancel_file_transfer((LinphoneChatMessage *)ptr); } extern "C" jobject Java_org_linphone_core_LinphoneChatMessageImpl_getFileTransferInformation(JNIEnv* env, jobject thiz, jlong ptr) { @@ -2698,14 +2803,14 @@ extern "C" jstring Java_org_linphone_core_LinphoneChatMessageImpl_getAppData(JNI } extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_setAppData(JNIEnv* env, jobject thiz, jlong ptr, jstring appdata) { - const char * data = appdata ? env->GetStringUTFChars(appdata, NULL) : NULL; + const char * data = appdata ? env->GetStringUTFChars(appdata, NULL) : NULL; linphone_chat_message_set_appdata((LinphoneChatMessage *)ptr, data); if (appdata) env->ReleaseStringUTFChars(appdata, data); } extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setFileTransferServer(JNIEnv* env, jobject thiz, jlong ptr, jstring server_url) { - const char * url = server_url ? env->GetStringUTFChars(server_url, NULL) : NULL; + const char * url = server_url ? env->GetStringUTFChars(server_url, NULL) : NULL; linphone_core_set_file_transfer_server((LinphoneCore *)ptr, url); if (server_url) env->ReleaseStringUTFChars(server_url, url); @@ -2722,11 +2827,15 @@ extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_store(JNIEnv* en linphone_chat_message_store((LinphoneChatMessage*)ptr); } -extern "C" jstring Java_org_linphone_core_LinphoneChatMessageImpl_getText(JNIEnv* env +extern "C" jbyteArray Java_org_linphone_core_LinphoneChatMessageImpl_getText(JNIEnv* env ,jobject thiz ,jlong ptr) { - jstring jvalue =env->NewStringUTF(linphone_chat_message_get_text((LinphoneChatMessage*)ptr)); - return jvalue; + const char *message = linphone_chat_message_get_text((LinphoneChatMessage*)ptr); + size_t length = strlen(message); + jbyteArray array = env->NewByteArray(length); + env->SetByteArrayRegion(array, 0, length, (const jbyte*)message); + + return array; } extern "C" jint Java_org_linphone_core_LinphoneChatMessageImpl_getReason(JNIEnv* env @@ -2868,12 +2977,14 @@ static void chat_room_impl_callback(LinphoneChatMessage* msg, LinphoneChatMessag jmethodID method = env->GetMethodID(clazz, "onLinphoneChatMessageStateChanged","(Lorg/linphone/core/LinphoneChatMessage;Lorg/linphone/core/LinphoneChatMessage$State;)V"); jobject jmessage=(jobject)linphone_chat_message_get_user_data(msg); LinphoneCore *lc = linphone_chat_room_get_lc(linphone_chat_message_get_chat_room(msg)); - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); + + jclass chatMessageStateClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneChatMessage$State")); + jmethodID chatMessageStateFromIntId = env->GetStaticMethodID(chatMessageStateClass,"fromInt","(I)Lorg/linphone/core/LinphoneChatMessage$State;"); env->CallVoidMethod( listener, method, jmessage, - env->CallStaticObjectMethod(lcData->chatMessageStateClass,lcData->chatMessageStateFromIntId,(jint)state)); + env->CallStaticObjectMethod(chatMessageStateClass,chatMessageStateFromIntId,(jint)state)); if (state == LinphoneChatMessageStateDelivered || state == LinphoneChatMessageStateNotDelivered) { env->DeleteGlobalRef(listener); @@ -2886,8 +2997,8 @@ extern "C" jobject Java_org_linphone_core_LinphoneChatRoomImpl_getCore(JNIEnv* ,jobject thiz ,jlong chatroom_ptr){ LinphoneCore *lc=linphone_chat_room_get_core((LinphoneChatRoom*)chatroom_ptr); - LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data(lc); - return lcd->core; + jobject core = (jobject)linphone_core_get_user_data(lc); + return core; } extern "C" void Java_org_linphone_core_LinphoneChatRoomImpl_sendMessage2(JNIEnv* env @@ -2907,7 +3018,7 @@ extern "C" void Java_org_linphone_core_LinphoneChatMessageImpl_startFileDownload jobject listener = env->NewGlobalRef(jlistener); LinphoneChatMessage * message = (LinphoneChatMessage *)ptr; message->cb_ud = listener; - linphone_chat_message_start_file_download(message, chat_room_impl_callback); + linphone_chat_message_start_file_download(message, chat_room_impl_callback, NULL); } extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setVideoWindowId(JNIEnv* env @@ -3126,8 +3237,7 @@ extern "C" void Java_org_linphone_core_LinphoneCallImpl_stopRecording(JNIEnv *en } extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_inviteAddressWithParams(JNIEnv *env, jobject thiz, jlong lc, jlong addr, jlong params){ - LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc); - return lcd->getCall(env,linphone_core_invite_address_with_params((LinphoneCore *)lc, (const LinphoneAddress *)addr, (const LinphoneCallParams *)params)); + return getCall(env,linphone_core_invite_address_with_params((LinphoneCore *)lc, (const LinphoneAddress *)addr, (const LinphoneCallParams *)params)); } extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_updateAddressWithParams(JNIEnv *env, jobject thiz, jlong lc, jlong call, jlong params){ @@ -3378,9 +3488,8 @@ extern "C" void Java_org_linphone_core_LinphoneCoreImpl_terminateAllCalls(JNIEnv linphone_core_terminate_all_calls((LinphoneCore *) pCore); } extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_getCall(JNIEnv *env,jobject thiz,jlong pCore,jint position) { - LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)pCore); LinphoneCall* lCall = (LinphoneCall*) ms_list_nth_data(linphone_core_get_calls((LinphoneCore *) pCore),position); - return lcd->getCall(env,lCall); + return getCall(env,lCall); } extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_getCallsNb(JNIEnv *env,jobject thiz,jlong pCore) { return (jint)ms_list_size(linphone_core_get_calls((LinphoneCore *) pCore)); @@ -3397,8 +3506,7 @@ extern "C" jint Java_org_linphone_core_LinphoneCoreImpl_transferCallToAnother(JN } extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_startReferedCall(JNIEnv *env, jobject thiz, jlong lc, jlong callptr, jlong params){ - LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)lc); - return lcd->getCall(env,linphone_core_start_refered_call((LinphoneCore *)lc, (LinphoneCall *)callptr, (const LinphoneCallParams *)params)); + return getCall(env,linphone_core_start_refered_call((LinphoneCore *)lc, (LinphoneCall *)callptr, (const LinphoneCallParams *)params)); } extern "C" void Java_org_linphone_core_LinphoneCoreImpl_setZrtpSecretsCache(JNIEnv *env,jobject thiz,jlong pCore, jstring jFile) { @@ -3415,8 +3523,7 @@ extern "C" jobject Java_org_linphone_core_LinphoneCoreImpl_findCallFromUri(JNIEn const char* cUri=env->GetStringUTFChars(jUri, NULL); const LinphoneCall *call=linphone_core_find_call_from_uri((const LinphoneCore *) pCore,cUri); env->ReleaseStringUTFChars(jUri, cUri); - LinphoneCoreData *lcdata=(LinphoneCoreData*)linphone_core_get_user_data((LinphoneCore*)pCore); - return (jobject) lcdata->getCall(env,(LinphoneCall*)call); + return (jobject) getCall(env,(LinphoneCall*)call); } @@ -3782,11 +3889,10 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_subscribe(JNIE jstring jevname, jint expires, jstring jtype, jstring jsubtype, jbyteArray jdata, jstring jencoding){ LinphoneCore *lc=(LinphoneCore*)coreptr; LinphoneAddress *addr=(LinphoneAddress*)addrptr; - LinphoneContent content={0}; + LinphoneContentPrivate content={0}; LinphoneEvent *ev; jobject jev=NULL; const char *evname=env->GetStringUTFChars(jevname,NULL); - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); if (jtype){ content.type=(char*)env->GetStringUTFChars(jtype,NULL); @@ -3795,7 +3901,7 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_subscribe(JNIE content.data=(void*)env->GetByteArrayElements(jdata,NULL); content.size=env->GetArrayLength(jdata); } - ev=linphone_core_subscribe(lc,addr,evname,expires,content.type ? &content : NULL); + ev=linphone_core_subscribe(lc,addr,evname,expires,content.type ? LINPHONE_CONTENT(&content) : NULL); if (jtype){ env->ReleaseStringUTFChars(jtype,content.type); env->ReleaseStringUTFChars(jsubtype,content.subtype); @@ -3804,7 +3910,7 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_subscribe(JNIE } env->ReleaseStringUTFChars(jevname,evname); if (ev){ - jev=lcData->getEvent(env,ev); + jev=getEvent(env,ev); } return jev; } @@ -3818,11 +3924,10 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_publish(JNIEnv jstring jtype, jstring jsubtype, jbyteArray jdata, jstring jencoding){ LinphoneCore *lc=(LinphoneCore*)coreptr; LinphoneAddress *addr=(LinphoneAddress*)addrptr; - LinphoneContent content={0}; + LinphoneContentPrivate content={0}; LinphoneEvent *ev; jobject jev=NULL; const char *evname=env->GetStringUTFChars(jevname,NULL); - LinphoneCoreData* lcData = (LinphoneCoreData*)linphone_core_get_user_data(lc); if (jtype){ content.type=(char*)env->GetStringUTFChars(jtype,NULL); @@ -3831,7 +3936,7 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_publish(JNIEnv content.data=(void*)env->GetByteArrayElements(jdata,NULL); content.size=env->GetArrayLength(jdata); } - ev=linphone_core_publish(lc,addr,evname,expires,content.type ? &content : NULL); + ev=linphone_core_publish(lc,addr,evname,expires,content.type ? LINPHONE_CONTENT(&content) : NULL); if (jtype){ env->ReleaseStringUTFChars(jtype,content.type); env->ReleaseStringUTFChars(jsubtype,content.subtype); @@ -3840,7 +3945,7 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_publish(JNIEnv } env->ReleaseStringUTFChars(jevname,evname); if (ev){ - jev=lcData->getEvent(env,ev); + jev=getEvent(env,ev); } return jev; } @@ -3973,12 +4078,13 @@ extern "C" jintArray Java_org_linphone_core_LpConfigImpl_getIntRange(JNIEnv *env return returnValues; } -static jobject create_java_linphone_content(JNIEnv *env, const LinphoneContent *content){ +static jobject create_java_linphone_content(JNIEnv *env, const LinphoneContent *icontent){ jclass contentClass; jmethodID ctor; jstring jtype, jsubtype, jencoding, jname; jbyteArray jdata = NULL; jint jsize = 0; + const LinphoneContentPrivate *content = LINPHONE_CONTENT_PRIVATE(icontent); contentClass = (jclass)env->NewGlobalRef(env->FindClass("org/linphone/core/LinphoneContentImpl")); ctor = env->GetMethodID(contentClass,"", "(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;[BLjava/lang/String;I)V"); @@ -4018,13 +4124,13 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneInfoMessageImpl_getCont * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)V */ JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneInfoMessageImpl_setContent(JNIEnv *env, jobject jobj, jlong infoptr, jstring jtype, jstring jsubtype, jstring jdata){ - LinphoneContent content={0}; + LinphoneContentPrivate content={0}; content.type=(char*)env->GetStringUTFChars(jtype,NULL); content.subtype=(char*)env->GetStringUTFChars(jsubtype,NULL); content.data=(void*)env->GetStringUTFChars(jdata,NULL); content.size=strlen((char*)content.data); - linphone_info_message_set_content((LinphoneInfoMessage*)infoptr,&content); + linphone_info_message_set_content((LinphoneInfoMessage*)infoptr,LINPHONE_CONTENT(&content)); env->ReleaseStringUTFChars(jtype,content.type); env->ReleaseStringUTFChars(jsubtype,content.subtype); env->ReleaseStringUTFChars(jdata,(char*)content.data); @@ -4050,7 +4156,7 @@ JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneInfoMessageImpl_addHeader( * Signature: (JLjava/lang/String;)Ljava/lang/String; */ JNIEXPORT jstring JNICALL Java_org_linphone_core_LinphoneInfoMessageImpl_getHeader(JNIEnv *env, jobject jobj, jlong infoptr, jstring jname){ - const char *name=name=env->GetStringUTFChars(jname,NULL); + const char *name=env->GetStringUTFChars(jname,NULL); const char *ret=linphone_info_message_get_header((LinphoneInfoMessage*)infoptr,name); env->ReleaseStringUTFChars(jname,name); return ret ? env->NewStringUTF(ret) : NULL; @@ -4085,8 +4191,8 @@ JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneCoreFactoryImpl__1setLogHa JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneEventImpl_getCore(JNIEnv *env, jobject jobj, jlong evptr){ LinphoneCore *lc=linphone_event_get_core((LinphoneEvent*)evptr); - LinphoneCoreData *lcd=(LinphoneCoreData*)linphone_core_get_user_data(lc); - return lcd->core; + jobject core = (jobject)linphone_core_get_user_data(lc); + return core; } /* @@ -4126,7 +4232,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_denySubscription * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_notify(JNIEnv *env, jobject jobj, jlong evptr, jstring jtype, jstring jsubtype, jbyteArray jdata, jstring jencoding){ - LinphoneContent content={0}; + LinphoneContentPrivate content={0}; LinphoneEvent *ev=(LinphoneEvent*)evptr; jint err; @@ -4138,7 +4244,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_notify(JNIEnv *e content.size=env->GetArrayLength(jdata); } - err=linphone_event_notify(ev,content.type ? &content : NULL); + err=linphone_event_notify(ev,content.type ? LINPHONE_CONTENT(&content) : NULL); if (jtype){ env->ReleaseStringUTFChars(jtype,content.type); @@ -4155,7 +4261,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_notify(JNIEnv *e * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_updateSubscribe(JNIEnv *env, jobject jobj, jlong evptr, jstring jtype, jstring jsubtype, jbyteArray jdata, jstring jencoding){ - LinphoneContent content={0}; + LinphoneContentPrivate content={0}; LinphoneEvent *ev=(LinphoneEvent*)evptr; jint err; @@ -4167,7 +4273,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_updateSubscribe( content.size=env->GetArrayLength(jdata); } - err=linphone_event_update_subscribe(ev,content.type ? &content : NULL); + err=linphone_event_update_subscribe(ev,content.type ? LINPHONE_CONTENT(&content) : NULL); if (jtype){ env->ReleaseStringUTFChars(jtype,content.type); @@ -4184,7 +4290,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_updateSubscribe( * Signature: (JLjava/lang/String;Ljava/lang/String;Ljava/lang/String;)I */ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_updatePublish(JNIEnv *env, jobject jobj, jlong evptr, jstring jtype, jstring jsubtype, jbyteArray jdata, jstring jencoding){ - LinphoneContent content={0}; + LinphoneContentPrivate content={0}; LinphoneEvent *ev=(LinphoneEvent*)evptr; jint err; @@ -4196,7 +4302,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_updatePublish(JN content.size=env->GetArrayLength(jdata); } - err=linphone_event_update_publish(ev,content.type ? &content : NULL); + err=linphone_event_update_publish(ev,content.type ? LINPHONE_CONTENT(&content) : NULL); if (jtype){ env->ReleaseStringUTFChars(jtype,content.type); @@ -4255,7 +4361,6 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_LinphoneEventImpl_getSubscriptionS JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_createSubscribe(JNIEnv *env, jobject thiz, jlong jcore, jlong jaddr, jstring jeventname, jint expires) { LinphoneCore *lc = (LinphoneCore*) jcore; - LinphoneCoreData* lcData = (LinphoneCoreData*) linphone_core_get_user_data(lc); LinphoneAddress *addr = (LinphoneAddress*) jaddr; LinphoneEvent *event; jobject jevent = NULL; @@ -4264,13 +4369,13 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_createSubscrib event = linphone_core_create_subscribe(lc, addr, event_name, expires); env->ReleaseStringUTFChars(jeventname, event_name); if (event) { - jevent = lcData->getEvent(env, event); + jevent = getEvent(env, event); } return jevent; } JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneEventImpl_sendSubscribe(JNIEnv *env, jobject thiz, jlong jevent, jstring jtype, jstring jsubtype, jbyteArray jdata, jstring jencoding) { - LinphoneContent content = {0}; + LinphoneContentPrivate content = {0}; if (jtype) { content.type = (char*) env->GetStringUTFChars(jtype, NULL); content.subtype = (char*) env->GetStringUTFChars(jsubtype, NULL); @@ -4278,7 +4383,7 @@ JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneEventImpl_sendSubscribe(JN content.data = (void*) env->GetByteArrayElements(jdata, NULL); content.size = env->GetArrayLength(jdata); } - linphone_event_send_subscribe((LinphoneEvent*) jevent, content.type ? &content : NULL); + linphone_event_send_subscribe((LinphoneEvent*) jevent, content.type ? LINPHONE_CONTENT(&content) : NULL); if (jtype) { env->ReleaseStringUTFChars(jtype, content.type); env->ReleaseStringUTFChars(jsubtype, content.subtype); @@ -4289,7 +4394,6 @@ JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneEventImpl_sendSubscribe(JN JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_createPublish(JNIEnv *env, jobject thiz, jlong jcore, jlong jaddr, jstring jeventname, jint expires) { LinphoneCore *lc = (LinphoneCore*) jcore; - LinphoneCoreData* lcData = (LinphoneCoreData*) linphone_core_get_user_data(lc); LinphoneAddress *addr = (LinphoneAddress*) jaddr; LinphoneEvent *event; jobject jevent = NULL; @@ -4298,13 +4402,13 @@ JNIEXPORT jobject JNICALL Java_org_linphone_core_LinphoneCoreImpl_createPublish( event = linphone_core_create_publish(lc, addr, event_name, expires); env->ReleaseStringUTFChars(jeventname, event_name); if (event) { - jevent = lcData->getEvent(env, event); + jevent = getEvent(env, event); } return jevent; } JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneEventImpl_sendPublish(JNIEnv *env, jobject thiz, jlong jevent, jstring jtype, jstring jsubtype, jbyteArray jdata, jstring jencoding) { - LinphoneContent content = {0}; + LinphoneContentPrivate content = {0}; if (jtype) { content.type = (char*) env->GetStringUTFChars(jtype, NULL); content.subtype = (char*) env->GetStringUTFChars(jsubtype, NULL); @@ -4312,7 +4416,7 @@ JNIEXPORT void JNICALL Java_org_linphone_core_LinphoneEventImpl_sendPublish(JNIE content.data = (void*) env->GetByteArrayElements(jdata, NULL); content.size = env->GetArrayLength(jdata); } - linphone_event_send_publish((LinphoneEvent*) jevent, content.type ? &content : NULL); + linphone_event_send_publish((LinphoneEvent*) jevent, content.type ? LINPHONE_CONTENT(&content) : NULL); if (jtype) { env->ReleaseStringUTFChars(jtype, content.type); env->ReleaseStringUTFChars(jsubtype, content.subtype); @@ -4722,6 +4826,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_PresenceActivityImpl_setDescriptio const char *cdescription = description ? env->GetStringUTFChars(description, NULL) : NULL; linphone_presence_activity_set_description(activity, cdescription); if (cdescription) env->ReleaseStringUTFChars(description, cdescription); + return (jint)0; } /* @@ -4773,6 +4878,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_PresenceServiceImpl_setId(JNIEnv * const char *cid = id ? env->GetStringUTFChars(id, NULL) : NULL; linphone_presence_service_set_id(service, cid); if (cid) env->ReleaseStringUTFChars(id, cid); + return (jint)0; } /* @@ -4818,6 +4924,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_PresenceServiceImpl_setContact(JNI const char *ccontact = contact ? env->GetStringUTFChars(contact, NULL) : NULL; linphone_presence_service_set_contact(service, ccontact); if (ccontact) env->ReleaseStringUTFChars(contact, ccontact); + return (jint)0; } /* @@ -4908,6 +5015,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_PresencePersonImpl_setId(JNIEnv *e const char *cid = id ? env->GetStringUTFChars(id, NULL) : NULL; linphone_presence_person_set_id(person, cid); if (cid) env->ReleaseStringUTFChars(id, cid); + return (jint)0; } /* @@ -5080,6 +5188,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_PresenceNoteImpl_setContent(JNIEnv const char *ccontent = content ? env->GetStringUTFChars(content, NULL) : NULL; linphone_presence_note_set_content(note, ccontent); if (ccontent) env->ReleaseStringUTFChars(content, ccontent); + return (jint)0; } /* @@ -5103,6 +5212,7 @@ JNIEXPORT jint JNICALL Java_org_linphone_core_PresenceNoteImpl_setLang(JNIEnv *e const char *clang = lang ? env->GetStringUTFChars(lang, NULL) : NULL; linphone_presence_note_set_lang(note, clang); if (clang) env->ReleaseStringUTFChars(lang, clang); + return (jint)0; } /* @@ -5261,7 +5371,6 @@ extern "C" jint Java_org_linphone_core_LinphonePlayerImpl_open(JNIEnv *env, jobj } extern "C" jint Java_org_linphone_core_LinphonePlayerImpl_start(JNIEnv *env, jobject jobj, jlong ptr) { - LinphonePlayerData *player_data = (LinphonePlayerData *)((LinphonePlayer *)ptr)->user_data; return (jint)linphone_player_start((LinphonePlayer *)ptr); } @@ -5295,15 +5404,24 @@ extern "C" void Java_org_linphone_core_LinphonePlayerImpl_close(JNIEnv *env, job linphone_player_close(player); } -extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_createPlayer(JNIEnv *env, jobject jobj, jlong ptr, jobject window) { - jobject window_ref = NULL; - MSSndCard *snd_card = ms_snd_card_manager_get_default_playback_card(ms_snd_card_manager_get()); - if(snd_card == NULL) { - ms_error("No default playback sound card found"); - return 0; +extern "C" void Java_org_linphone_core_LinphonePlayerImpl_destroy(JNIEnv *env, jobject jobj, jlong playerPtr) { + LinphonePlayer *player = (LinphonePlayer *)playerPtr; + if(player == NULL) { + ms_error("Cannot destroy the LinphonePlayerImpl object. Native pointer is NULL"); + return; } + if(player->user_data) { + delete (LinphonePlayerData *)player->user_data; + } + jobject window_id = (jobject)ms_media_player_get_window_id((MSMediaPlayer *)player->impl); + if(window_id) env->DeleteGlobalRef(window_id); + linphone_player_destroy(player); +} + +extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_createLocalPlayer(JNIEnv *env, jobject jobj, jlong ptr, jobject window) { + jobject window_ref = NULL; window_ref = env->NewGlobalRef(window); - LinphonePlayer *player = linphone_core_create_file_player((LinphoneCore *)ptr, snd_card, "MSAndroidDisplay", window_ref); + LinphonePlayer *player = linphone_core_create_local_player((LinphoneCore *)ptr, NULL, "MSAndroidDisplay", (unsigned long)window_ref); if(player == NULL) { ms_error("Fails to create a player"); if(window_ref) env->DeleteGlobalRef(window_ref); @@ -5312,13 +5430,3 @@ extern "C" jlong Java_org_linphone_core_LinphoneCoreImpl_createPlayer(JNIEnv *en return (jlong)player; } } - -extern "C" void Java_org_linphone_core_LinphoneCoreImpl_destroyPlayer(JNIEnv *env, jobject jobj, jlong playerPtr) { - LinphonePlayer *player = (LinphonePlayer *)playerPtr; - if(player->user_data) { - delete (LinphonePlayerData *)player->user_data; - } - jobject window_id = (jobject)ms_file_player_get_window_id((MSFilePlayer *)player->impl); - if(window_id) env->DeleteGlobalRef(window_id); - linphone_file_player_destroy(player); -} diff --git a/coreapi/localplayer.c b/coreapi/localplayer.c new file mode 100644 index 000000000..964c1c920 --- /dev/null +++ b/coreapi/localplayer.c @@ -0,0 +1,98 @@ +/* +linphone +Copyright (C) 2000 - 2010 Simon MORLAT (simon.morlat@linphone.org) + +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 2 +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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +*/ + +#include "private.h" +#include +#include + +static int _local_player_open(LinphonePlayer *obj, const char *filename); +static int _local_player_start(LinphonePlayer *obj); +static int _local_player_pause(LinphonePlayer *obj); +static int _local_player_seek(LinphonePlayer *obj, int time_ms); +static MSPlayerState _local_player_get_state(LinphonePlayer *obj); +static int _local_player_get_duration(LinphonePlayer *obj); +static int _local_player_get_current_position(LinphonePlayer *obj); +static void _local_player_close(LinphonePlayer *obj); +static void _local_player_destroy(LinphonePlayer *obj); +static void _local_player_eof_callback(void *user_data); + +LinphonePlayer *linphone_core_create_local_player(LinphoneCore *lc, MSSndCard *snd_card, const char *video_out, unsigned long window_id) { + LinphonePlayer *obj = ms_new0(LinphonePlayer, 1); + if(snd_card == NULL) snd_card = lc->sound_conf.ring_sndcard; + if(video_out == NULL) video_out = linphone_core_get_video_display_filter(lc); + obj->impl = ms_media_player_new(snd_card, video_out, window_id); + obj->open = _local_player_open; + obj->start = _local_player_start; + obj->pause = _local_player_pause; + obj->seek = _local_player_seek; + obj->get_state = _local_player_get_state; + obj->get_duration = _local_player_get_duration; + obj->get_position = _local_player_get_current_position; + obj->close = _local_player_close; + obj->destroy = _local_player_destroy; + ms_media_player_set_eof_callback((MSMediaPlayer *)obj->impl, _local_player_eof_callback, obj); + return obj; +} + +bool_t linphone_local_player_matroska_supported(void) { + return ms_media_player_matroska_supported(); +} + +static int _local_player_open(LinphonePlayer *obj, const char *filename) { + return ms_media_player_open((MSMediaPlayer *)obj->impl, filename) ? 0 : -1; +} + +static int _local_player_start(LinphonePlayer *obj) { + return ms_media_player_start((MSMediaPlayer *)obj->impl) ? 0 : -1; +} + +static int _local_player_pause(LinphonePlayer *obj) { + ms_media_player_pause((MSMediaPlayer *)obj->impl); + return 0; +} + +static int _local_player_seek(LinphonePlayer *obj, int time_ms) { + return ms_media_player_seek((MSMediaPlayer *)obj->impl, time_ms) ? 0 : -1; +} + +static MSPlayerState _local_player_get_state(LinphonePlayer *obj) { + return ms_media_player_get_state((MSMediaPlayer *)obj->impl); +} + +static int _local_player_get_duration(LinphonePlayer *obj) { + return ms_media_player_get_duration((MSMediaPlayer *)obj->impl); +} + +static int _local_player_get_current_position(LinphonePlayer *obj) { + return ms_media_player_get_current_position((MSMediaPlayer *)obj->impl); +} + +static void _local_player_destroy(LinphonePlayer *obj) { + ms_media_player_free((MSMediaPlayer *)obj->impl); + _linphone_player_destroy(obj); +} + +static void _local_player_close(LinphonePlayer *obj) { + ms_media_player_close((MSMediaPlayer *)obj->impl); +} + +static void _local_player_eof_callback(void *user_data) { + LinphonePlayer *obj = (LinphonePlayer *)user_data; + obj->cb(obj, obj->user_data); +} diff --git a/coreapi/lpconfig.c b/coreapi/lpconfig.c index c1ffea0fc..a940fb696 100644 --- a/coreapi/lpconfig.c +++ b/coreapi/lpconfig.c @@ -49,7 +49,9 @@ #include #endif - +#ifdef WIN32 +#define RENAME_REQUIRES_NONEXISTENT_NEW_PATH 1 +#endif #define lp_new0(type,n) (type*)calloc(sizeof(type),n) @@ -77,6 +79,7 @@ struct _LpConfig{ int refcnt; FILE *file; char *filename; + char *tmpfilename; MSList *sections; int modified; int readonly; @@ -349,22 +352,34 @@ LpConfig *lp_config_new_with_factory(const char *config_filename, const char *fa if (config_filename!=NULL){ ms_message("Using (r/w) config information from %s", config_filename); lpconfig->filename=ortp_strdup(config_filename); - lpconfig->file=fopen(config_filename,"r+"); + lpconfig->tmpfilename=ortp_strdup_printf("%s.tmp",config_filename); + +#if !defined(WIN32) + { + struct stat fileStat; + if ((stat(config_filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) { + /* make existing configuration files non-group/world-accessible */ + if (chmod(config_filename, S_IRUSR | S_IWUSR) == -1) { + ms_warning("unable to correct permissions on " + "configuration file: %s", strerror(errno)); + } + } + } +#endif /*WIN32*/ + /*open with r+ to check if we can write on it later*/ + lpconfig->file=fopen(lpconfig->filename,"r+"); +#ifdef RENAME_REQUIRES_NONEXISTENT_NEW_PATH + if (lpconfig->file==NULL){ + lpconfig->file=fopen(lpconfig->tmpfilename,"r+"); + if (lpconfig->file){ + ms_warning("Could not open %s but %s works, app may have crashed during last sync.",lpconfig->filename,lpconfig->tmpfilename); + } + } +#endif if (lpconfig->file!=NULL){ lp_config_parse(lpconfig,lpconfig->file); fclose(lpconfig->file); -#if !defined(WIN32) - { - struct stat fileStat; - if ((stat(config_filename,&fileStat) == 0) && (S_ISREG(fileStat.st_mode))) { - /* make existing configuration files non-group/world-accessible */ - if (chmod(config_filename, S_IRUSR | S_IWUSR) == -1) { - ms_warning("unable to correct permissions on " - "configuration file: %s", strerror(errno)); - } - } - } -#endif /*WIN32*/ + lpconfig->file=NULL; lpconfig->modified=0; } @@ -396,6 +411,7 @@ void lp_item_set_value(LpItem *item, const char *value){ static void _lp_config_destroy(LpConfig *lpconfig){ if (lpconfig->filename!=NULL) ortp_free(lpconfig->filename); + if (lpconfig->tmpfilename) ortp_free(lpconfig->tmpfilename); ms_list_for_each(lpconfig->sections,(void (*)(void*))lp_section_destroy); ms_list_free(lpconfig->sections); free(lpconfig); @@ -583,7 +599,7 @@ int lp_config_sync(LpConfig *lpconfig){ /* don't create group/world-accessible files */ (void) umask(S_IRWXG | S_IRWXO); #endif - file=fopen(lpconfig->filename,"w"); + file=fopen(lpconfig->tmpfilename,"w"); if (file==NULL){ ms_warning("Could not write %s ! Maybe it is read-only. Configuration will not be saved.",lpconfig->filename); lpconfig->readonly=1; @@ -591,6 +607,16 @@ int lp_config_sync(LpConfig *lpconfig){ } ms_list_for_each2(lpconfig->sections,(void (*)(void *,void*))lp_section_write,(void *)file); fclose(file); +#ifdef RENAME_REQUIRES_NONEXISTENT_NEW_PATH + /* On windows, rename() does not accept that the newpath is an existing file, while it is accepted on Unix. + * As a result, we are forced to first delete the linphonerc file, and then rename.*/ + if (remove(lpconfig->filename)!=0){ + ms_error("Cannot remove %s: %s",lpconfig->filename, strerror(errno)); + } +#endif + if (rename(lpconfig->tmpfilename,lpconfig->filename)!=0){ + ms_error("Cannot rename %s into %s: %s",lpconfig->tmpfilename,lpconfig->filename,strerror(errno)); + } lpconfig->modified=0; return 0; } diff --git a/coreapi/message_storage.c b/coreapi/message_storage.c index c87891a34..2684ba0b5 100644 --- a/coreapi/message_storage.c +++ b/coreapi/message_storage.c @@ -21,10 +21,13 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "linphonecore.h" #ifdef MSG_STORAGE_ENABLED +#ifndef PRIu64 +#define PRIu64 "I64u" +#endif #include "sqlite3.h" -static inline LinphoneChatMessage* get_transient_message(LinphoneChatRoom* cr, unsigned int storage_id){ +static ORTP_INLINE LinphoneChatMessage* get_transient_message(LinphoneChatRoom* cr, unsigned int storage_id){ MSList* transients = cr->transient_messages; LinphoneChatMessage* chat; while( transients ){ @@ -51,18 +54,15 @@ static int callback_content(void *data, int argc, char **argv, char **colName) { LinphoneChatMessage *message = (LinphoneChatMessage *)data; if (message->file_transfer_information) { - linphone_content_uninit(message->file_transfer_information); - ms_free(message->file_transfer_information); + linphone_content_unref(message->file_transfer_information); message->file_transfer_information = NULL; } - message->file_transfer_information = (LinphoneContent *)malloc(sizeof(LinphoneContent)); - memset(message->file_transfer_information, 0, sizeof(*(message->file_transfer_information))); - - message->file_transfer_information->type = argv[1] ? ms_strdup(argv[1]) : NULL; - message->file_transfer_information->subtype = argv[2] ? ms_strdup(argv[2]) : NULL; - message->file_transfer_information->name = argv[3] ? ms_strdup(argv[3]) : NULL; - message->file_transfer_information->encoding = argv[4] ? ms_strdup(argv[4]) : NULL; - message->file_transfer_information->size = (size_t) atoi(argv[5]); + message->file_transfer_information = linphone_content_new(); + if (argv[1]) linphone_content_set_type(message->file_transfer_information, argv[1]); + if (argv[2]) linphone_content_set_subtype(message->file_transfer_information, argv[2]); + if (argv[3]) linphone_content_set_name(message->file_transfer_information, argv[3]); + if (argv[4]) linphone_content_set_encoding(message->file_transfer_information, argv[4]); + linphone_content_set_size(message->file_transfer_information, (size_t)atoi(argv[5])); return 0; } @@ -196,13 +196,13 @@ static int linphone_chat_message_store_content(LinphoneChatMessage *msg) { if (lc->db) { LinphoneContent *content = msg->file_transfer_information; char *buf = sqlite3_mprintf("INSERT INTO content VALUES(NULL,%Q,%Q,%Q,%Q,%i,%Q);", - content->type, - content->subtype, - content->name, - content->encoding, - content->size, + linphone_content_get_type(content), + linphone_content_get_subtype(content), + linphone_content_get_name(content), + linphone_content_get_encoding(content), + linphone_content_get_size(content), NULL - ); + ); linphone_sql_request(lc->db, buf); sqlite3_free(buf); id = (unsigned int) sqlite3_last_insert_rowid (lc->db); @@ -225,7 +225,7 @@ unsigned int linphone_chat_message_store(LinphoneChatMessage *msg){ peer=linphone_address_as_string_uri_only(linphone_chat_room_get_peer_address(msg->chat_room)); local_contact=linphone_address_as_string_uri_only(linphone_chat_message_get_local_address(msg)); - buf=sqlite3_mprintf("INSERT INTO history VALUES(NULL,%Q,%Q,%i,%Q,%Q,%i,%i,%Q,%i,%Q,%i);", + buf = sqlite3_mprintf("INSERT INTO history VALUES(NULL,%Q,%Q,%i,%Q,%Q,%i,%i,%Q,%lld,%Q,%i);", local_contact, peer, msg->dir, @@ -234,10 +234,10 @@ unsigned int linphone_chat_message_store(LinphoneChatMessage *msg){ msg->is_read, msg->state, msg->external_body_url, - msg->time, + (int64_t)msg->time, msg->appdata, content_id - ); + ); linphone_sql_request(lc->db,buf); sqlite3_free(buf); ms_free(local_contact); @@ -250,18 +250,11 @@ unsigned int linphone_chat_message_store(LinphoneChatMessage *msg){ void linphone_chat_message_store_state(LinphoneChatMessage *msg){ LinphoneCore *lc=msg->chat_room->lc; if (lc->db){ - char *buf=sqlite3_mprintf("UPDATE history SET status=%i WHERE (id = %i) AND utc = %i;", - msg->state,msg->storage_id,msg->time); + char *buf=sqlite3_mprintf("UPDATE history SET status=%i WHERE (id = %i);", + msg->state,msg->storage_id); linphone_sql_request(lc->db,buf); sqlite3_free(buf); } - - if( msg->state == LinphoneChatMessageStateDelivered - || msg->state == LinphoneChatMessageStateNotDelivered ){ - // message is not transient anymore, we can remove it from our transient list: - msg->chat_room->transient_messages = ms_list_remove(msg->chat_room->transient_messages, msg); - linphone_chat_message_unref(msg); - } } void linphone_chat_message_store_appdata(LinphoneChatMessage* msg){ @@ -361,7 +354,7 @@ void linphone_chat_room_delete_history(LinphoneChatRoom *cr){ MSList *linphone_chat_room_get_history_range(LinphoneChatRoom *cr, int startm, int endm){ LinphoneCore *lc=linphone_chat_room_get_lc(cr); MSList *ret; - char *buf; + char *buf,*buf2; char *peer; uint64_t begin,end; int buf_max_size = 512; @@ -375,17 +368,24 @@ MSList *linphone_chat_room_get_history_range(LinphoneChatRoom *cr, int startm, i buf=ms_malloc(buf_max_size); buf=sqlite3_snprintf(buf_max_size-1,buf,"SELECT * FROM history WHERE remoteContact = %Q ORDER BY id DESC",peer); + if (startm<0) startm=0; - if (endm>0&&endm>=startm){ - buf=sqlite3_snprintf(buf_max_size-1,buf,"%s LIMIT %i ",buf,endm+1-startm); + if ((endm>0&&endm>=startm) || (startm == 0 && endm == 0) ){ + buf2=ms_strdup_printf("%s LIMIT %i ",buf,endm+1-startm); + ms_free(buf); + buf = buf2; }else if(startm>0){ - ms_message("%s(): end is lower than start (%d < %d). No end assumed.",__FUNCTION__,endm,startm); - buf=sqlite3_snprintf(buf_max_size-1,buf,"%s LIMIT -1",buf); + ms_message("%s(): end is lower than start (%d < %d). Assuming no end limit.",__FUNCTION__,endm,startm); + buf2=ms_strdup_printf("%s LIMIT -1",buf); + ms_free(buf); + buf = buf2; } if (startm>0){ - buf=sqlite3_snprintf(buf_max_size-1,buf,"%s OFFSET %i ",buf,startm); + buf2=ms_strdup_printf("%s OFFSET %i ",buf,startm); + ms_free(buf); + buf = buf2; } begin=ortp_get_cur_time_ms(); @@ -400,7 +400,7 @@ MSList *linphone_chat_room_get_history_range(LinphoneChatRoom *cr, int startm, i } MSList *linphone_chat_room_get_history(LinphoneChatRoom *cr,int nb_message){ - return linphone_chat_room_get_history_range(cr, 0, nb_message); + return linphone_chat_room_get_history_range(cr, 0, nb_message-1); } @@ -459,7 +459,7 @@ static int migrate_messages_timestamp(void* data,int argc, char** argv, char** c time_t new_time = parse_time_from_db(argv[1]); if( new_time ){ /* replace 'time' by -1 and set 'utc' to the timestamp */ - char *buf = sqlite3_mprintf("UPDATE history SET utc=%i,time='-1' WHERE id=%i;", new_time, atoi(argv[0])); + char *buf = sqlite3_mprintf("UPDATE history SET utc=%lld,time='-1' WHERE id=%i;", (int64_t)new_time, atoi(argv[0])); if( buf) { linphone_sql_request((sqlite3*)data, buf); sqlite3_free(buf); @@ -486,7 +486,7 @@ static void linphone_migrate_timestamps(sqlite3* db){ uint64_t end; linphone_sql_request(db, "COMMIT"); end=ortp_get_cur_time_ms(); - ms_message("Migrated message timestamps to UTC in %i ms",(int)(end-begin)); + ms_message("Migrated message timestamps to UTC in %lu ms",(unsigned long)(end-begin)); } } diff --git a/coreapi/misc.c b/coreapi/misc.c index 30100a304..a869d5301 100644 --- a/coreapi/misc.c +++ b/coreapi/misc.c @@ -86,6 +86,7 @@ int linphone_core_enable_payload_type(LinphoneCore *lc, LinphonePayloadType *pt, if (ms_list_find(lc->codecs_conf.audio_codecs,pt) || ms_list_find(lc->codecs_conf.video_codecs,pt)){ payload_type_set_enable(pt,enabled); _linphone_core_codec_config_write(lc); + linphone_core_update_allocated_audio_bandwidth(lc); return 0; } ms_error("Enabling codec not in audio or video list of PayloadType !"); @@ -113,12 +114,14 @@ void linphone_core_set_payload_type_bitrate(LinphoneCore *lc, LinphonePayloadTyp if (pt->type==PAYLOAD_VIDEO || pt->flags & PAYLOAD_TYPE_IS_VBR){ pt->normal_bitrate=bitrate*1000; pt->flags|=PAYLOAD_TYPE_BITRATE_OVERRIDE; + linphone_core_update_allocated_audio_bandwidth(lc); }else{ ms_error("Cannot set an explicit bitrate for codec %s/%i, because it is not VBR.",pt->mime_type,pt->clock_rate); return; } + } else { + ms_error("linphone_core_set_payload_type_bitrate() payload type not in audio or video list !"); } - ms_error("linphone_core_set_payload_type_bitrate() payload type not in audio or video list !"); } @@ -188,7 +191,6 @@ int linphone_core_get_payload_type_bitrate(LinphoneCore *lc, const LinphonePaylo return get_audio_payload_bandwidth(lc,pt,maxbw); }else if (pt->type==PAYLOAD_VIDEO){ int video_bw; - linphone_core_update_allocated_audio_bandwidth(lc); if (maxbw<=0) { video_bw=1500; /*default bitrate for video stream when no bandwidth limit is set, around 1.5 Mbit/s*/ }else{ @@ -250,7 +252,19 @@ bool_t linphone_core_is_payload_type_usable_for_bandwidth(LinphoneCore *lc, cons /* return TRUE if codec can be used with bandwidth, FALSE else*/ bool_t linphone_core_check_payload_type_usability(LinphoneCore *lc, const PayloadType *pt){ - return linphone_core_is_payload_type_usable_for_bandwidth(lc, pt, linphone_core_get_payload_type_bitrate(lc,pt)); + bool_t ret=linphone_core_is_payload_type_usable_for_bandwidth(lc, pt, linphone_core_get_payload_type_bitrate(lc,pt)); + if ((pt->type==PAYLOAD_AUDIO_CONTINUOUS || pt->type==PAYLOAD_AUDIO_PACKETIZED) + && lc->sound_conf.capt_sndcard + && !(ms_snd_card_get_capabilities(lc->sound_conf.capt_sndcard) & MS_SND_CARD_CAP_BUILTIN_ECHO_CANCELLER) + && linphone_core_echo_cancellation_enabled(lc) + && (pt->clock_rate!=16000 && pt->clock_rate!=8000) + && strcasecmp(pt->mime_type,"opus")!=0 + && ms_filter_lookup_by_name("MSWebRTCAEC")!=NULL){ + ms_warning("Payload type %s/%i cannot be used because software echo cancellation is required but is unable to operate at this rate.", + pt->mime_type,pt->clock_rate); + ret=FALSE; + } + return ret; } bool_t lp_spawn_command_line_sync(const char *command, char **result,int *command_ret){ @@ -627,6 +641,24 @@ int linphone_core_gather_ice_candidates(LinphoneCore *lc, LinphoneCall *call) return 0; } +const char *linphone_ice_state_to_string(LinphoneIceState state){ + switch(state){ + case LinphoneIceStateFailed: + return "IceStateFailed"; + case LinphoneIceStateHostConnection: + return "IceStateHostConnection"; + case LinphoneIceStateInProgress: + return "IceStateInProgress"; + case LinphoneIceStateNotActivated: + return "IceStateNotActivated"; + case LinphoneIceStateReflexiveConnection: + return "IceStateReflexiveConnection"; + case LinphoneIceStateRelayConnection: + return "IceStateRelayConnection"; + } + return "invalid"; +} + void linphone_core_update_ice_state_in_call_stats(LinphoneCall *call) { IceCheckList *audio_check_list; @@ -673,7 +705,7 @@ void linphone_core_update_ice_state_in_call_stats(LinphoneCall *call) } else { call->stats[LINPHONE_CALL_STATS_VIDEO].ice_state = LinphoneIceStateFailed; } - } + }else call->stats[LINPHONE_CALL_STATS_VIDEO].ice_state = LinphoneIceStateNotActivated; } else if (session_state == IS_Running) { call->stats[LINPHONE_CALL_STATS_AUDIO].ice_state = LinphoneIceStateInProgress; if (call->params->has_video && (video_check_list != NULL)) { @@ -685,9 +717,11 @@ void linphone_core_update_ice_state_in_call_stats(LinphoneCall *call) call->stats[LINPHONE_CALL_STATS_VIDEO].ice_state = LinphoneIceStateFailed; } } + ms_message("Call [%p] New ICE state: audio: [%s] video: [%s]", call, + linphone_ice_state_to_string(call->stats[LINPHONE_CALL_STATS_AUDIO].ice_state), linphone_ice_state_to_string(call->stats[LINPHONE_CALL_STATS_VIDEO].ice_state)); } -void linphone_core_update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session) +void _update_local_media_description_from_ice(SalMediaDescription *desc, IceSession *session) { const char *rtp_addr, *rtcp_addr; IceSessionState session_state = ice_session_state(session); @@ -808,7 +842,7 @@ static void clear_ice_check_list(LinphoneCall *call, IceCheckList *removed){ call->videostream->ms.ice_check_list=NULL; } -void linphone_core_update_ice_from_remote_media_description(LinphoneCall *call, const SalMediaDescription *md) +void linphone_call_update_ice_from_remote_media_description(LinphoneCall *call, const SalMediaDescription *md) { bool_t ice_restarted = FALSE; @@ -966,6 +1000,8 @@ unsigned int linphone_core_get_audio_features(LinphoneCore *lc){ else if (strcasecmp(name,"DTMF")==0) ret|=AUDIO_STREAM_FEATURE_DTMF; else if (strcasecmp(name,"DTMF_ECHO")==0) ret|=AUDIO_STREAM_FEATURE_DTMF_ECHO; else if (strcasecmp(name,"MIXED_RECORDING")==0) ret|=AUDIO_STREAM_FEATURE_MIXED_RECORDING; + else if (strcasecmp(name,"LOCAL_PLAYING")==0) ret|=AUDIO_STREAM_FEATURE_LOCAL_PLAYING; + else if (strcasecmp(name,"REMOTE_PLAYING")==0) ret|=AUDIO_STREAM_FEATURE_REMOTE_PLAYING; else if (strcasecmp(name,"ALL")==0) ret|=AUDIO_STREAM_FEATURE_ALL; else if (strcasecmp(name,"NONE")==0) ret=0; else ms_error("Unsupported audio feature %s requested in config file.",name); diff --git a/coreapi/player.c b/coreapi/player.c index 54573ccb8..1b2a01022 100644 --- a/coreapi/player.c +++ b/coreapi/player.c @@ -97,6 +97,18 @@ void linphone_player_close(LinphonePlayer *obj){ return obj->close(obj); } +/** + * @brief Destroy a player + * @param obj The player + */ +void linphone_player_destroy(LinphonePlayer *obj) { + if(obj->destroy) obj->destroy(obj); +} + +void _linphone_player_destroy(LinphonePlayer *player) { + ms_free(player); +} + /* * Call player implementation below. @@ -169,7 +181,7 @@ static void call_player_close(LinphonePlayer *player){ } static void on_call_destroy(void *obj, belle_sip_object_t *call_being_destroyed){ - ms_free(obj); + _linphone_player_destroy(obj); } LinphonePlayer *linphone_call_build_player(LinphoneCall *call){ diff --git a/coreapi/private.h b/coreapi/private.h index 40777e207..0ce88fee5 100644 --- a/coreapi/private.h +++ b/coreapi/private.h @@ -102,7 +102,7 @@ struct _LinphoneCallParams{ bool_t real_early_media; /*send real media even during early media (for outgoing calls)*/ bool_t in_conference; /*in conference mode */ bool_t low_bandwidth; - bool_t no_user_consent;/*when set to TRUE an UPDATE request will be used instead of reINVITE*/ + bool_t no_user_consent;/*when set to TRUE an UPDATE request will be used instead of reINVITE*/ uint16_t avpf_rr_interval; /*in milliseconds*/ LinphonePrivacyMask privacy; }; @@ -125,12 +125,13 @@ struct _LinphoneCallLog{ LinphoneAddress *from; /**dial_prefix==NULL || proxy->dial_prefix[0]=='\0'){ /*no prefix configured, nothing else to do*/ @@ -931,10 +934,10 @@ int linphone_proxy_config_normalize_number(LinphoneProxyConfig *proxy, const cha }else{ dial_plan_t dialplan; lookup_dial_plan(proxy->dial_prefix,&dialplan); - ms_message("Using dialplan '%s'",dialplan.country); + ms_debug("Using dialplan '%s'",dialplan.country); if (flatten[0]=='+' || strstr(flatten,dialplan.icp)==flatten){ /* the number has international prefix or +, so nothing to do*/ - ms_message("Prefix already present."); + ms_debug("Prefix already present."); /*eventually replace the plus*/ replace_plus(flatten,result,result_len,proxy->dial_escape_plus ? dialplan.icp : NULL); ms_free(flatten); diff --git a/coreapi/quality_reporting.c b/coreapi/quality_reporting.c index 9e2e6c7ea..bb1d443bf 100644 --- a/coreapi/quality_reporting.c +++ b/coreapi/quality_reporting.c @@ -18,7 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H -#include "../config.h" +#include "config.h" #endif #include "linphonecore.h" @@ -257,7 +257,7 @@ static void append_metrics_to_buffer(char ** buffer, size_t * size, size_t * off } static int send_report(LinphoneCall* call, reporting_session_report_t * report, const char * report_event) { - LinphoneContent content = {0}; + LinphoneContent *content = linphone_content_new(); LinphoneAddress *addr; int expires = -1; size_t offset = 0; @@ -294,9 +294,9 @@ static int send_report(LinphoneCall* call, reporting_session_report_t * report, goto end; } - buffer = (char *) ms_malloc(size); - content.type = ms_strdup("application"); - content.subtype = ms_strdup("vq-rtcpxr"); + buffer = (char *) belle_sip_malloc(size); + linphone_content_set_type(content, "application"); + linphone_content_set_subtype(content, "vq-rtcpxr"); append_to_buffer(&buffer, &size, &offset, "%s\r\n", report_event); append_to_buffer(&buffer, &size, &offset, "CallID: %s\r\n", report->info.call_id); @@ -331,17 +331,16 @@ static int send_report(LinphoneCall* call, reporting_session_report_t * report, append_to_buffer(&buffer, &size, &offset, "\r\n"); } - content.data = buffer; - content.size = strlen(buffer); + linphone_content_set_buffer(content, buffer, strlen(buffer)); if (call->log->reporting.on_report_sent != NULL){ call->log->reporting.on_report_sent( call, (report==call->log->reporting.reports[0])?LINPHONE_CALL_STATS_AUDIO:LINPHONE_CALL_STATS_VIDEO, - &content); + content); } - if (! linphone_core_publish(call->core, addr, "vq-rtcpxr", expires, &content)){ + if (! linphone_core_publish(call->core, addr, "vq-rtcpxr", expires, content)){ ret=4; } else { reset_avg_metrics(report); @@ -354,7 +353,7 @@ static int send_report(LinphoneCall* call, reporting_session_report_t * report, linphone_address_destroy(addr); - linphone_content_uninit(&content); + linphone_content_unref(content); end: ms_message("QualityReporting[%p]: Send '%s' with status %d", @@ -386,7 +385,7 @@ static void update_ip(LinphoneCall * call, int stats_type) { if (local_desc != NULL) { /*since this function might be called for video stream AFTER it has been uninitialized, local description might be invalid. In any other case, IP/port should be always filled and valid*/ - if (local_desc->rtp_addr != NULL && strlen(local_desc->rtp_addr) > 0) { + if (strlen(local_desc->rtp_addr) > 0) { call->log->reporting.reports[stats_type]->info.local_addr.port = local_desc->rtp_port; STR_REASSIGN(call->log->reporting.reports[stats_type]->info.local_addr.ip, ms_strdup(local_desc->rtp_addr)); } @@ -397,7 +396,7 @@ static void update_ip(LinphoneCall * call, int stats_type) { call->log->reporting.reports[stats_type]->info.remote_addr.port = remote_desc->rtp_port; /*for IP it can be not set if we are using a direct route*/ - if (remote_desc->rtp_addr != NULL && strlen(remote_desc->rtp_addr) > 0) { + if (strlen(remote_desc->rtp_addr) > 0) { STR_REASSIGN(call->log->reporting.reports[stats_type]->info.remote_addr.ip, ms_strdup(remote_desc->rtp_addr)); } else { STR_REASSIGN(call->log->reporting.reports[stats_type]->info.remote_addr.ip, ms_strdup(sal_call_get_remote_media_description(call->op)->addr)); diff --git a/coreapi/sipsetup.c b/coreapi/sipsetup.c index 91abf5d62..bf1b411e8 100644 --- a/coreapi/sipsetup.c +++ b/coreapi/sipsetup.c @@ -18,7 +18,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ #ifdef HAVE_CONFIG_H -#include "../config.h" +#include "config.h" #endif #include "linphonecore.h" diff --git a/coreapi/upnp.c b/coreapi/upnp.c index c8082514f..68b82e2ed 100644 --- a/coreapi/upnp.c +++ b/coreapi/upnp.c @@ -145,7 +145,7 @@ char * linphone_upnp_format_device_id(const char *device_id) { if(device_id == NULL) { return ret; } - ret = ms_new(char, UPNP_UUID_LEN + 1); + ret = ms_new0(char, UPNP_UUID_LEN + 1); tmp = ret; if(linphone_upnp_strncmpi(device_id, "uuid:", linphone_upnp_str_min(device_id, "uuid:")) == 0) { device_id += strlen("uuid:"); @@ -840,6 +840,8 @@ int linphone_upnp_call_process(LinphoneCall *call) { linphone_core_proceed_with_invite_if_ready(lc, call, NULL); break; case LinphoneCallIdle: + linphone_call_update_local_media_description_from_ice_or_upnp(call); + sal_call_set_local_media_description(call->op,call->localdesc); linphone_core_notify_incoming_call(lc, call); break; default: diff --git a/gtk/CMakeLists.txt b/gtk/CMakeLists.txt new file mode 100644 index 000000000..e5d66561b --- /dev/null +++ b/gtk/CMakeLists.txt @@ -0,0 +1,87 @@ +############################################################################ +# CMakeLists.txt +# Copyright (C) 2014 Belledonne Communications, Grenoble France +# +############################################################################ +# +# 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 2 +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################ + +find_package(GTK2 2.18 REQUIRED gtk) + +set(UI_FILES + about.ui + audio_assistant.ui + buddylookup.ui + call_logs.ui + call_statistics.ui + config-uri.ui + contact.ui + dscp_settings.ui + keypad.ui + ldap.ui + log.ui + main.ui + parameters.ui + password.ui + provisioning-fetch.ui + sip_account.ui + tunnel_config.ui + waiting.ui +) + +set(PIXMAPS stock_people.png) + +set(SOURCE_FILES + audio_assistant.c + buddylookup.c + calllogs.c + chat.c + conference.c + config-fetching.c + friendlist.c + incall_view.c + logging.c + loginframe.c + main.c + propertybox.c + singleinstance.c + support.c + update.c + utils.c + videowindow.c +) + +add_executable(linphone-gtk ${SOURCE_FILES}) +set_target_properties(linphone-gtk PROPERTIES OUTPUT_NAME linphone) +target_include_directories(linphone-gtk PUBLIC ${GTK2_INCLUDE_DIRS}) +target_link_libraries(linphone-gtk linphone ${GTK2_LIBRARIES}) +if(ENABLE_NOTIFY) + target_include_directories(linphone-gtk PUBLIC ${NOTIFY_INCLUDE_DIRS}) + target_link_libraries(linphone-gtk ${NOTIFY_LIBRARIES}) +endif() + +install(TARGETS linphone-gtk + RUNTIME DESTINATION bin + LIBRARY DESTINATION lib + ARCHIVE DESTINATION lib + PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_EXECUTE WORLD_READ WORLD_EXECUTE +) + +install(FILES ${UI_FILES} ${PIXMAPS} + DESTINATION ${PACKAGE_DATA_DIR}/linphone + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ +) diff --git a/gtk/about.ui b/gtk/about.ui index 38fc2e796..d647724b2 100644 --- a/gtk/about.ui +++ b/gtk/about.ui @@ -5,14 +5,14 @@ GDK_POINTER_MOTION_MASK | GDK_POINTER_MOTION_HINT_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK 5 - About linphone + About Linphone False center-on-parent dialog False Linphone undef - (C) Belledonne Communications,2010 + (C) Belledonne Communications, 2010 An internet video phone using the standard SIP (rfc3261) protocol. http://www.linphone.org diff --git a/gtk/audio_assistant.c b/gtk/audio_assistant.c index 83a89a3eb..7d50fedc2 100644 --- a/gtk/audio_assistant.c +++ b/gtk/audio_assistant.c @@ -315,7 +315,7 @@ static void open_mixer(){ static GtkWidget *create_intro(){ GtkWidget *vbox=gtk_vbox_new(FALSE,2); - GtkWidget *label=gtk_label_new(_("Welcome !\nThis assistant will help you to configure audio settings for Linphone")); + GtkWidget *label=gtk_label_new(_("Welcome!\nThis assistant will help you to configure audio settings for Linphone")); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2); gtk_widget_show_all(vbox); return vbox; diff --git a/gtk/calllogs.c b/gtk/calllogs.c index a4b86240a..7960708c7 100644 --- a/gtk/calllogs.c +++ b/gtk/calllogs.c @@ -332,7 +332,7 @@ void linphone_gtk_call_log_update(GtkWidget *w){ ngettext("%i second", "%i seconds", duration%60), duration%60); if (status==NULL) { - headtxt=g_markup_printf_escaped(_("%s\t%s"),display,start_date ? start_date : ""); + headtxt=g_markup_printf_escaped("%s\t%s",display,start_date ? start_date : ""); logtxt=g_markup_printf_escaped( _("%s\t" "Quality: %s\n%s\t%s\t"), @@ -340,8 +340,8 @@ void linphone_gtk_call_log_update(GtkWidget *w){ } else { headtxt=g_markup_printf_escaped(_("%s\t%s"),display,start_date ? start_date : ""); logtxt=g_markup_printf_escaped( - _("%s\t" - "\n%s"),addr, status); + "%s\t" + "\n%s",addr, status); } g_free(minutes); g_free(seconds); diff --git a/gtk/chat.c b/gtk/chat.c index 940437950..daa5fd95a 100644 --- a/gtk/chat.c +++ b/gtk/chat.c @@ -276,7 +276,7 @@ void update_chat_state_message(LinphoneChatMessageState state,LinphoneChatMessag } } -static void on_chat_state_changed(LinphoneChatMessage *msg, LinphoneChatMessageState state, void *user_pointer){ +static void on_chat_state_changed(LinphoneChatMessage *msg, LinphoneChatMessageState state){ update_chat_state_message(state,msg); } @@ -300,8 +300,11 @@ void linphone_gtk_send_text(){ entered=gtk_entry_get_text(GTK_ENTRY(entry)); if (strlen(entered)>0) { LinphoneChatMessage *msg; + LinphoneChatMessageCbs *cbs; msg=linphone_chat_room_create_message(cr,entered); - linphone_chat_room_send_message2(cr,msg,on_chat_state_changed,NULL); + cbs=linphone_chat_message_get_callbacks(msg); + linphone_chat_message_cbs_set_msg_state_changed(cbs,on_chat_state_changed); + linphone_chat_room_send_chat_message(cr,msg); linphone_gtk_push_text(w,linphone_chat_message_get_from(msg), TRUE,cr,msg,FALSE); @@ -471,8 +474,9 @@ void linphone_gtk_load_chatroom(LinphoneChatRoom *cr,const LinphoneAddress *uri, } void linphone_gtk_chat_destroyed(GtkWidget *w){ + /* LinphoneChatRoom *cr=(LinphoneChatRoom*)g_object_get_data(G_OBJECT(w),"cr"); - linphone_chat_room_destroy(cr); + */ } diff --git a/gtk/config-uri.ui b/gtk/config-uri.ui index 5e864743e..cc99c40db 100644 --- a/gtk/config-uri.ui +++ b/gtk/config-uri.ui @@ -77,7 +77,7 @@ Please enter or modify the configuration URI below. After clicking OK, Linphone True True - https:// + https:// False False True diff --git a/gtk/incall_view.c b/gtk/incall_view.c index 5329508b6..1d1c95e6a 100644 --- a/gtk/incall_view.c +++ b/gtk/incall_view.c @@ -426,7 +426,9 @@ void linphone_gtk_update_video_button(LinphoneCall *call){ GtkWidget *conf_frame; const LinphoneCallParams *params=linphone_call_get_current_params(call); gboolean has_video=linphone_call_params_video_enabled(params); + gboolean button_sensitive=FALSE; if (call_view==NULL) return; + button=linphone_gtk_get_widget(call_view,"video_button"); gtk_button_set_image(GTK_BUTTON(button), @@ -436,12 +438,20 @@ void linphone_gtk_update_video_button(LinphoneCall *call){ gtk_widget_set_sensitive(button,FALSE); return; } + switch(linphone_call_get_state(call)){ + case LinphoneCallStreamsRunning: + button_sensitive=!linphone_call_media_in_progress(call); + break; + default: + button_sensitive=FALSE; + break; + } + gtk_widget_set_sensitive(button,button_sensitive); if (GPOINTER_TO_INT(g_object_get_data(G_OBJECT(button),"signal_connected"))==0){ g_signal_connect(G_OBJECT(button),"clicked",(GCallback)video_button_clicked,call); g_object_set_data(G_OBJECT(button),"signal_connected",GINT_TO_POINTER(1)); } conf_frame=(GtkWidget *)g_object_get_data(G_OBJECT(linphone_gtk_get_main_window()),"conf_frame"); - gtk_widget_set_sensitive(button,linphone_call_get_state(call)==LinphoneCallStreamsRunning); if(conf_frame!=NULL){ gtk_widget_set_sensitive(button,FALSE); } @@ -705,7 +715,7 @@ void linphone_gtk_in_call_view_set_in_call(LinphoneCall *call){ GtkWidget *call_stats=(GtkWidget*)g_object_get_data(G_OBJECT(callview),"call_stats"); linphone_gtk_in_call_show_video(call); - + display_peer_name_in_label(callee,linphone_call_get_remote_address (call)); gtk_widget_hide(linphone_gtk_get_widget(callview,"answer_decline_panel")); @@ -758,7 +768,7 @@ void linphone_gtk_in_call_view_update_duration(LinphoneCall *call){ int seconds=duration%60; int minutes=(duration/60)%60; int hours=duration/3600; - snprintf(tmp,sizeof(tmp)-1,_("%02i::%02i::%02i"),hours,minutes,seconds); + snprintf(tmp,sizeof(tmp)-1,"%02i::%02i::%02i",hours,minutes,seconds); gtk_label_set_text(GTK_LABEL(duration_label),tmp); } diff --git a/gtk/keypad.ui b/gtk/keypad.ui index 2dd62a0f0..86c957531 100644 --- a/gtk/keypad.ui +++ b/gtk/keypad.ui @@ -29,7 +29,7 @@ True - D + D True True True @@ -45,7 +45,7 @@ - # + # True True True @@ -61,7 +61,7 @@ - 0 + 0 True True True @@ -77,7 +77,7 @@ - * + * True True True @@ -91,7 +91,7 @@ - C + C True True True @@ -107,7 +107,7 @@ - 9 + 9 True True True @@ -123,7 +123,7 @@ - 8 + 8 True True True @@ -139,7 +139,7 @@ - 7 + 7 True True True @@ -153,7 +153,7 @@ - B + B True True True @@ -169,7 +169,7 @@ - 6 + 6 True True True @@ -185,7 +185,7 @@ - 5 + 5 True True True @@ -201,7 +201,7 @@ - 4 + 4 True True True @@ -215,7 +215,7 @@ - A + A True True True @@ -229,7 +229,7 @@ - 3 + 3 True True True @@ -243,7 +243,7 @@ - 2 + 2 True True True @@ -257,7 +257,7 @@ - 1 + 1 40 40 True diff --git a/gtk/main.c b/gtk/main.c index 5dd2b046f..ea3078c9a 100644 --- a/gtk/main.c +++ b/gtk/main.c @@ -1228,14 +1228,19 @@ static bool_t notify_actions_supported() { } static NotifyNotification* build_notification(const char *title, const char *body) { - const char *icon_path = linphone_gtk_get_ui_config("icon", LINPHONE_ICON); - GdkPixbuf *pbuf = create_pixbuf(icon_path); NotifyNotification *n = notify_notification_new(title, body, NULL #ifdef HAVE_NOTIFY1 ,NULL #endif ); - notify_notification_set_icon_from_pixbuf(n, pbuf); +#ifndef HAVE_NOTIFY1 + { + const char *icon_path = linphone_gtk_get_ui_config("icon", LINPHONE_ICON); + GdkPixbuf *pbuf = create_pixbuf(icon_path); + /*with notify1, this function makes the notification crash the app with obscure dbus glib critical errors*/ + notify_notification_set_icon_from_pixbuf(n, pbuf); + } +#endif return n; } diff --git a/gtk/main.ui b/gtk/main.ui index 06909d6c6..c66728af5 100644 --- a/gtk/main.ui +++ b/gtk/main.ui @@ -1890,7 +1890,7 @@ True False - <b>Welcome !</b> + <b>Welcome!</b> True diff --git a/gtk/p2pwizard.ui b/gtk/p2pwizard.ui index e8e6703ee..111f46ff5 100644 --- a/gtk/p2pwizard.ui +++ b/gtk/p2pwizard.ui @@ -8,8 +8,8 @@ True - Welcome ! -This wizard will help you to setup a SIP account. + Welcome! +This wizard will help you to setup a SIP account. True GTK_JUSTIFY_CENTER diff --git a/gtk/parameters.ui b/gtk/parameters.ui index 7705e1319..aa8480aa9 100644 --- a/gtk/parameters.ui +++ b/gtk/parameters.ui @@ -2538,7 +2538,7 @@ True False - label + label 1 @@ -2550,7 +2550,7 @@ True False - label + label 1 @@ -2564,7 +2564,7 @@ True False - label + label 1 diff --git a/gtk/setupwizard.c b/gtk/setupwizard.c index 491014625..8e269e266 100644 --- a/gtk/setupwizard.c +++ b/gtk/setupwizard.c @@ -31,7 +31,7 @@ static GdkPixbuf *notok; static GtkWidget *create_intro(){ GtkWidget *vbox=gtk_vbox_new(FALSE,2); - GtkWidget *label=gtk_label_new(_("Welcome !\nThis assistant will help you to use a SIP account for your calls.")); + GtkWidget *label=gtk_label_new(_("Welcome!\nThis assistant will help you to use a SIP account for your calls.")); gtk_box_pack_start (GTK_BOX (vbox), label, TRUE, TRUE, 2); g_object_set_data(G_OBJECT(vbox),"label",label); gtk_widget_show_all(vbox); @@ -452,7 +452,7 @@ static void linphone_gtk_assistant_prepare(GtkWidget *assistant, GtkWidget *page linphone_core_add_auth_info(linphone_gtk_get_core(),info); linphone_address_destroy(identity); - if (strcmp(creator->domain, "sip:sip.linphone.org") == 0 ){ + if (strcmp(creator->domain, "sip:sip.linphone.org") == 0) { linphone_proxy_config_enable_avpf(cfg,TRUE); // If account created on sip.linphone.org, we configure linphone to use TLS by default if (linphone_core_sip_transport_supported(linphone_gtk_get_core(),LinphoneTransportTls)) { @@ -465,6 +465,8 @@ static void linphone_gtk_assistant_prepare(GtkWidget *assistant, GtkWidget *page ms_free(tmp); linphone_address_destroy(addr); } + linphone_core_set_stun_server(linphone_gtk_get_core(), "stun.linphone.org"); + linphone_core_set_firewall_policy(linphone_gtk_get_core(), LinphonePolicyUseIce); } if (linphone_core_add_proxy_config(linphone_gtk_get_core(),cfg)==-1) diff --git a/gtk/videowindow.c b/gtk/videowindow.c index 4a119faa9..f2247e573 100644 --- a/gtk/videowindow.c +++ b/gtk/videowindow.c @@ -19,7 +19,7 @@ Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. #include "linphone.h" -#ifdef __linux +#ifdef GDK_WINDOWING_X11 #include #elif defined(WIN32) #include @@ -74,7 +74,7 @@ static void drag_data_received(GtkWidget *widget, GdkDragContext *context, gint } static gboolean drag_drop(GtkWidget *widget, GdkDragContext *drag_context, gint x, gint y, guint time, gpointer user_data){ -#if GTK_CHECK_VERSION(2,20,0) +#if GTK_CHECK_VERSION(2,21,0) GList *l=gdk_drag_context_list_targets(drag_context); GList *elem; @@ -95,7 +95,7 @@ static gboolean drag_drop(GtkWidget *widget, GdkDragContext *drag_context, gint } unsigned long get_native_handle(GdkWindow *gdkw){ -#ifdef __linux +#ifdef GDK_WINDOWING_X11 return (unsigned long)GDK_WINDOW_XID(gdkw); #elif defined(WIN32) return (unsigned long)GDK_WINDOW_HWND(gdkw); diff --git a/include/sal/sal.h b/include/sal/sal.h index 8f81f320d..040ab9951 100644 --- a/include/sal/sal.h +++ b/include/sal/sal.h @@ -65,7 +65,7 @@ typedef enum { SalTransportUDP, /*UDP*/ SalTransportTCP, /*TCP*/ SalTransportTLS, /*TLS*/ - SalTransportDTLS /*DTLS*/ + SalTransportDTLS, /*DTLS*/ }SalTransport; #define SAL_MEDIA_DESCRIPTION_UNCHANGED 0x00 @@ -110,6 +110,9 @@ void sal_address_set_transport_name(SalAddress* addr,const char* transport); void sal_address_set_params(SalAddress *addr, const char *params); void sal_address_set_uri_params(SalAddress *addr, const char *params); bool_t sal_address_is_ipv6(SalAddress *addr); +void sal_address_set_password(SalAddress *addr, const char *passwd); +const char *sal_address_get_password(const SalAddress *addr); +void sal_address_set_header(SalAddress *addr, const char *header_name, const char *header_value); Sal * sal_init(); void sal_uninit(Sal* sal); @@ -516,7 +519,7 @@ void sal_signing_key_delete(SalSigningKey *key); void sal_set_callbacks(Sal *ctx, const SalCallbacks *cbs); -int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_secure); +int sal_listen_port(Sal *ctx, const char *addr, int port, SalTransport tr, int is_tunneled); int sal_get_listening_port(Sal *ctx, SalTransport tr); int sal_unlisten_ports(Sal *ctx); int sal_transport_available(Sal *ctx, SalTransport t); @@ -533,8 +536,7 @@ void sal_append_stack_string_to_user_agent(Sal *ctx); /*keepalive period in ms*/ void sal_set_keepalive_period(Sal *ctx,unsigned int value); void sal_use_tcp_tls_keepalive(Sal *ctx, bool_t enabled); -int sal_enable_tunnel(Sal *ctx, void *tunnelclient); -void sal_disable_tunnel(Sal *ctx); +int sal_set_tunnel(Sal *ctx, void *tunnelclient); /*Default value is true*/ void sal_enable_sip_update_method(Sal *ctx,bool_t value); @@ -639,6 +641,12 @@ bool_t sal_call_autoanswer_asked(SalOp *op); void sal_call_send_vfu_request(SalOp *h); int sal_call_is_offerer(const SalOp *h); int sal_call_notify_refer_state(SalOp *h, SalOp *newcall); +/* Call test API */ +/*willingly fails to parse SDP from received packets (INVITE and/or ACK) if value=true */ +/* First version: for all new SalOp created (eg. each incoming or outgoing call). Do not forget to reset previous value when you are done!*/ +void sal_default_enable_sdp_removal(Sal* h, bool_t enable) ; +/* Second version: for a specific call*/ +void sal_call_enable_sdp_removal(SalOp *h, bool_t enable) ; /*Registration*/ int sal_register(SalOp *op, const char *proxy, const char *from, int expires); @@ -750,6 +758,7 @@ LINPHONE_PUBLIC bool_t sal_dns_srv_enabled(const Sal *sal); LINPHONE_PUBLIC void sal_set_dns_user_hosts_file(Sal *sal, const char *hosts_file); LINPHONE_PUBLIC const char *sal_get_dns_user_hosts_file(const Sal *sal); unsigned int sal_get_random(void); +char *sal_get_random_token(int size); unsigned char * sal_get_random_bytes(unsigned char *ret, size_t size); belle_sip_source_t * sal_create_timer(Sal *sal, belle_sip_source_func_t func, void *data, unsigned int timeout_value_ms, const char* timer_name); void sal_cancel_timer(Sal *sal, belle_sip_source_t *timer); diff --git a/java/common/org/.DS_Store b/java/common/org/.DS_Store deleted file mode 100644 index 2d8977d32..000000000 Binary files a/java/common/org/.DS_Store and /dev/null differ diff --git a/java/common/org/linphone/.DS_Store b/java/common/org/linphone/.DS_Store deleted file mode 100644 index f0988f202..000000000 Binary files a/java/common/org/linphone/.DS_Store and /dev/null differ diff --git a/java/common/org/linphone/core/LinphoneCall.java b/java/common/org/linphone/core/LinphoneCall.java index d75f1bbdb..404fdbcf0 100644 --- a/java/common/org/linphone/core/LinphoneCall.java +++ b/java/common/org/linphone/core/LinphoneCall.java @@ -119,6 +119,15 @@ public interface LinphoneCall { */ public static final State CallReleased = new State(18,"Released"); + /** + * The call is updated by remote while not yet answered (SIP UPDATE in early dialog received) + */ + public static final State CallEarlyUpdatedByRemote = new State(19,"EarlyUpdatedByRemote"); + + /** + * We are updating the call while not yet answered (SIP UPDATE in early dialog sent) + **/ + public static final State CallEarlyUpdating = new State(20,"EarlyUpdating"); private State(int value,String stringValue) { mValue = value; @@ -333,4 +342,11 @@ public interface LinphoneCall { * @return an Object. */ Object getUserData(); + + /** + * Get a call player + * Call player enable to stream a media file through a call + * @return A player + */ + public LinphonePlayer getPlayer(); } diff --git a/java/common/org/linphone/core/LinphoneChatMessage.java b/java/common/org/linphone/core/LinphoneChatMessage.java index 930a064db..b1b839b5e 100644 --- a/java/common/org/linphone/core/LinphoneChatMessage.java +++ b/java/common/org/linphone/core/LinphoneChatMessage.java @@ -163,6 +163,10 @@ public interface LinphoneChatMessage { */ void startFileDownload(LinphoneChatMessage.StateListener listener); + /** + * Cancel an ongoing file transfer attached to this message.(upload or download). + */ + void cancelFileTransfer(); /** * Get the file_transfer_information (used by call backs to recover informations during a rcs file transfer) * @return a pointer to the LinphoneContent structure or NULL if not present. @@ -179,4 +183,5 @@ public interface LinphoneChatMessage { * @return the data stored in the chat message if any, else null */ String getAppData(); + } diff --git a/java/common/org/linphone/core/LinphoneChatRoom.java b/java/common/org/linphone/core/LinphoneChatRoom.java index 1f8c58f8c..b18e79d0c 100644 --- a/java/common/org/linphone/core/LinphoneChatRoom.java +++ b/java/common/org/linphone/core/LinphoneChatRoom.java @@ -144,9 +144,4 @@ public interface LinphoneChatRoom { */ LinphoneChatMessage createFileTransferMessage(LinphoneContent content); - /** - * Cancel an ongoing file transfer attached to this message (upload or download) - * @param message - */ - void cancelFileTransfer(LinphoneChatMessage message); } diff --git a/java/common/org/linphone/core/LinphoneCore.java b/java/common/org/linphone/core/LinphoneCore.java index dfa2f6bca..b13a510d6 100644 --- a/java/common/org/linphone/core/LinphoneCore.java +++ b/java/common/org/linphone/core/LinphoneCore.java @@ -1786,11 +1786,17 @@ public interface LinphoneCore { * Create a media player * @return An object that implement LinphonePlayer */ - public LinphonePlayer createPlayer(AndroidVideoWindowImpl window); + public LinphonePlayer createLocalPlayer(AndroidVideoWindowImpl window); /** - * Destroy a player - * @param player Player to destroy + * Adds a new listener to be called by the core + * @param listener to add */ - public void destroyPlayer(LinphonePlayer player); + public void addListener(LinphoneCoreListener listener); + + /** + * Removes a listener previously added with addListener + * @param listener to remove + */ + public void removeListener(LinphoneCoreListener listener); } diff --git a/java/common/org/linphone/core/LinphoneCoreListener.java b/java/common/org/linphone/core/LinphoneCoreListener.java index c82390c48..d92743ce1 100644 --- a/java/common/org/linphone/core/LinphoneCoreListener.java +++ b/java/common/org/linphone/core/LinphoneCoreListener.java @@ -22,203 +22,226 @@ import java.nio.ByteBuffer; import org.linphone.core.LinphoneCore.RemoteProvisioningState; - /** * *This interface holds all callbacks that the application should implement. None is mandatory. */ public interface LinphoneCoreListener { - /**< Ask the application some authentication information - * @return */ - void authInfoRequested(LinphoneCore lc, String realm, String username, String Domain); - - /** General State notification - * @param state LinphoneCore.State - * @return - * */ - void globalState(LinphoneCore lc,LinphoneCore.GlobalState state, String message); - - /** Call State notification - * @param state LinphoneCall.State - * @return - * */ - void callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State cstate,String message); - - /** - * Call stats notification - */ - void callStatsUpdated(LinphoneCore lc, LinphoneCall call, LinphoneCallStats stats); - - /** - * Callback to display change in encryption state. - * @param encrypted true if all streams of the call are encrypted - * @param authenticationToken token like ZRTP SAS that may be displayed to user - */ - void callEncryptionChanged(LinphoneCore lc, LinphoneCall call, boolean encrypted, String authenticationToken); - - /** - * Registration state notification - * */ - void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg, LinphoneCore.RegistrationState cstate, String smessage); - - /** - * Reports that a new subscription request has been received and wait for a decision. - *Status on this subscription request is notified by changing policy for this friend - *@param lc LinphoneCore - *@param lf LinphoneFriend corresponding to the subscriber - *@param url of the subscriber - * - */ - void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf, String url); - - /** - * Report status change for a friend previously added to LinphoneCore. - * @param lc LinphoneCore - * @param lf updated LinphoneFriend - */ - void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf); - - /** - * invoked when a new text message is received - * @param lc LinphoneCore - * @param room LinphoneChatRoom involved in this conversation. Can be be created by the framework in case the from is not present in any chat room. - * @param from LinphoneAddress from - * @param message incoming message - */ - void textReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneAddress from, String message); - /** - * invoked when a new linphone chat message is received - * @param lc LinphoneCore - * @param room LinphoneChatRoom involved in this conversation. Can be be created by the framework in case the from is not present in any chat room. - * @param message incoming linphone chat message message - */ - void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message); + public interface LinphoneListener extends LinphoneCoreListener, + LinphoneRemoteProvisioningListener, LinphoneMessageListener, LinphoneCallStateListener, + LinphoneCallEncryptionStateListener, LinphoneNotifyListener, LinphoneComposingListener, + LinphoneGlobalStateListener, LinphoneRegistrationStateListener { + /**< Ask the application some authentication information + * @return */ + void authInfoRequested(LinphoneCore lc, String realm, String username, String Domain); - /** - * invoked when a composing notification is received - * @param lc LinphoneCore - * @param room LinphoneChatRoom involved in the conversation. - */ - void isComposingReceived(LinphoneCore lc, LinphoneChatRoom cr); + /** + * Call stats notification + */ + void callStatsUpdated(LinphoneCore lc, LinphoneCall call, LinphoneCallStats stats); - /** - * invoked when a new dtmf is received - * @param lc LinphoneCore - * @param call LinphoneCall involved in the dtmf sending - * @param dtmf value of the dtmf sent - */ - void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf); - - /** - * Invoked when echo cancalation calibration is completed - * @param lc LinphoneCore - * @param status - * @param delay_ms echo delay - * @param data - */ - void ecCalibrationStatus(LinphoneCore lc,LinphoneCore.EcCalibratorStatus status, int delay_ms, Object data); - /** - * Report Notified message received for this identity. - * @param lc LinphoneCore - * @param call LinphoneCall in case the notify is part of a dialog, may be null - * @param from LinphoneAddress the message comes from - * @param event String the raw body of the notify event. - * - */ - void notifyReceived(LinphoneCore lc, LinphoneCall call, LinphoneAddress from, byte[] event); + /** + * Reports that a new subscription request has been received and wait for a decision. + *Status on this subscription request is notified by changing policy for this friend + *@param lc LinphoneCore + *@param lf LinphoneFriend corresponding to the subscriber + *@param url of the subscriber + * + */ + void newSubscriptionRequest(LinphoneCore lc, LinphoneFriend lf, String url); - /** - * Notifies progress of a call transfer. - * @param lc the LinphoneCore - * @param call the call through which the transfer was sent. - * @param new_call_state the state of the call resulting of the transfer, at the other party. - **/ - void transferState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State new_call_state); - - /** - * Notifies an incoming INFO message. - * @param lc the LinphoneCore. - * @param info the info message - */ - void infoReceived(LinphoneCore lc, LinphoneCall call, LinphoneInfoMessage info); - - /** - * Notifies of subscription requests state changes, including new incoming subscriptions. - * @param lc the LinphoneCore - * @param ev LinphoneEvent object representing the subscription context. - * @param state actual state of the subscription. - */ - void subscriptionStateChanged(LinphoneCore lc, LinphoneEvent ev, SubscriptionState state); - - /** - * Notifies of an incoming NOTIFY received. - * @param lc the linphoneCore - * @param ev a LinphoneEvent representing the subscription context for which this notify belongs, or null if it is a NOTIFY out of of any subscription. - * @param eventName the event name - * @param content content of the NOTIFY request. - */ - void notifyReceived(LinphoneCore lc, LinphoneEvent ev, String eventName, LinphoneContent content); - /** - * Notifies about outgoing generic publish states. - * @param lc the LinphoneCore - * @param ev a LinphoneEvent representing the publish, typically created by {@link LinphoneCore#publish} - * @param state the publish state - */ - void publishStateChanged(LinphoneCore lc, LinphoneEvent ev, PublishState state); - - /** - * Notifies the changes about the remote provisioning step - * @param lc the LinphoneCore - * @param state the RemoteProvisioningState - * @param message the error message if state == Failed - */ - void configuringStatus(LinphoneCore lc, RemoteProvisioningState state, - String message); - - /**< @Deprecated Notifies the application that it should show up - * @return */ - void show(LinphoneCore lc); - /**< @Deprecated Callback that notifies various events with human readable text. - * @return */ - void displayStatus(LinphoneCore lc,String message); + /** + * Report status change for a friend previously added to LinphoneCore. + * @param lc LinphoneCore + * @param lf updated LinphoneFriend + */ + void notifyPresenceReceived(LinphoneCore lc, LinphoneFriend lf); - /**< @Deprecated Callback to display a message to the user - * @return */ - void displayMessage(LinphoneCore lc,String message); + /** + * invoked when a new text message is received + * @param lc LinphoneCore + * @param room LinphoneChatRoom involved in this conversation. Can be be created by the framework in case the from is not present in any chat room. + * @param from LinphoneAddress from + * @param message incoming message + */ + void textReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneAddress from, String message); + + /** + * invoked when a new dtmf is received + * @param lc LinphoneCore + * @param call LinphoneCall involved in the dtmf sending + * @param dtmf value of the dtmf sent + */ + void dtmfReceived(LinphoneCore lc, LinphoneCall call, int dtmf); + + /** + * Invoked when echo cancalation calibration is completed + * @param lc LinphoneCore + * @param status + * @param delay_ms echo delay + * @param data + */ + void ecCalibrationStatus(LinphoneCore lc,LinphoneCore.EcCalibratorStatus status, int delay_ms, Object data); + + /** + * Report Notified message received for this identity. + * @param lc LinphoneCore + * @param call LinphoneCall in case the notify is part of a dialog, may be null + * @param from LinphoneAddress the message comes from + * @param event String the raw body of the notify event. + * + */ + void notifyReceived(LinphoneCore lc, LinphoneCall call, LinphoneAddress from, byte[] event); - /** @Deprecated Callback to display a warning to the user - * @return */ - void displayWarning(LinphoneCore lc,String message); + /** + * Notifies progress of a call transfer. + * @param lc the LinphoneCore + * @param call the call through which the transfer was sent. + * @param new_call_state the state of the call resulting of the transfer, at the other party. + **/ + void transferState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State new_call_state); + + /** + * Notifies an incoming INFO message. + * @param lc the LinphoneCore. + * @param info the info message + */ + void infoReceived(LinphoneCore lc, LinphoneCall call, LinphoneInfoMessage info); + + /** + * Notifies of subscription requests state changes, including new incoming subscriptions. + * @param lc the LinphoneCore + * @param ev LinphoneEvent object representing the subscription context. + * @param state actual state of the subscription. + */ + void subscriptionStateChanged(LinphoneCore lc, LinphoneEvent ev, SubscriptionState state); + + /** + * Notifies about outgoing generic publish states. + * @param lc the LinphoneCore + * @param ev a LinphoneEvent representing the publish, typically created by {@link LinphoneCore#publish} + * @param state the publish state + */ + void publishStateChanged(LinphoneCore lc, LinphoneEvent ev, PublishState state); + + /**< @Deprecated Notifies the application that it should show up + * @return */ + void show(LinphoneCore lc); + + /**< @Deprecated Callback that notifies various events with human readable text. + * @return */ + void displayStatus(LinphoneCore lc,String message); + + /**< @Deprecated Callback to display a message to the user + * @return */ + void displayMessage(LinphoneCore lc,String message); + + /** @Deprecated Callback to display a warning to the user + * @return */ + void displayWarning(LinphoneCore lc,String message); + + /** + * Callback to be notified about the transfer progress. + * @param lc the LinphoneCore + * @param message the LinphoneChatMessage + * @param content the LinphoneContent + * @param progress percentage of the transfer done + */ + void fileTransferProgressIndication(LinphoneCore lc, LinphoneChatMessage message, LinphoneContent content, int progress); + + /** + * Callback to be notified when new data has been received + * @param lc the LinphoneCore + * @param message the LinphoneChatMessage + * @param content the LinphoneContent + * @param buffer + * @param size + */ + void fileTransferRecv(LinphoneCore lc, LinphoneChatMessage message, LinphoneContent content, byte[] buffer, int size); + + /** + * Callback to be notified when new data needs to be sent + * @param lc the LinphoneCore + * @param message the LinphoneChatMessage + * @param content the LinphoneContent + * @param buffer + * @param size + * @return the number of bytes written into buffer + */ + int fileTransferSend(LinphoneCore lc, LinphoneChatMessage message, LinphoneContent content, ByteBuffer buffer, int size); + } - /** - * Callback to be notified about the transfer progress. - * @param lc the LinphoneCore - * @param message the LinphoneChatMessage - * @param content the LinphoneContent - * @param progress percentage of the transfer done - */ - void fileTransferProgressIndication(LinphoneCore lc, LinphoneChatMessage message, LinphoneContent content, int progress); + public interface LinphoneGlobalStateListener extends LinphoneCoreListener { + /** General State notification + * @param state LinphoneCore.State + * @return + * */ + void globalState(LinphoneCore lc,LinphoneCore.GlobalState state, String message); + } - /** - * Callback to be notified when new data has been received - * @param lc the LinphoneCore - * @param message the LinphoneChatMessage - * @param content the LinphoneContent - * @param buffer - * @param size - */ - void fileTransferRecv(LinphoneCore lc, LinphoneChatMessage message, LinphoneContent content, byte[] buffer, int size); + public interface LinphoneRegistrationStateListener extends LinphoneCoreListener { + /** + * Registration state notification + * */ + void registrationState(LinphoneCore lc, LinphoneProxyConfig cfg, LinphoneCore.RegistrationState state, String smessage); + } - /** - * Callback to be notified when new data needs to be sent - * @param lc the LinphoneCore - * @param message the LinphoneChatMessage - * @param content the LinphoneContent - * @param buffer - * @param size - * @return the number of bytes written into buffer - */ - int fileTransferSend(LinphoneCore lc, LinphoneChatMessage message, LinphoneContent content, ByteBuffer buffer, int size); + public interface LinphoneRemoteProvisioningListener extends LinphoneCoreListener { + /** + * Notifies the changes about the remote provisioning step + * @param lc the LinphoneCore + * @param state the RemoteProvisioningState + * @param message the error message if state == Failed + */ + void configuringStatus(LinphoneCore lc, RemoteProvisioningState state, String message); + } + + public interface LinphoneMessageListener extends LinphoneCoreListener { + /** + * invoked when a new linphone chat message is received + * @param lc LinphoneCore + * @param room LinphoneChatRoom involved in this conversation. Can be be created by the framework in case the from is not present in any chat room. + * @param message incoming linphone chat message message + */ + void messageReceived(LinphoneCore lc, LinphoneChatRoom cr, LinphoneChatMessage message); + } + + public interface LinphoneCallStateListener extends LinphoneCoreListener { + /** Call State notification + * @param state LinphoneCall.State + * @return + * */ + void callState(LinphoneCore lc, LinphoneCall call, LinphoneCall.State state, String message); + } + + public interface LinphoneCallEncryptionStateListener extends LinphoneCoreListener { + /** + * Callback to display change in encryption state. + * @param encrypted true if all streams of the call are encrypted + * @param authenticationToken token like ZRTP SAS that may be displayed to user + */ + void callEncryptionChanged(LinphoneCore lc, LinphoneCall call, boolean encrypted, String authenticationToken); + } + + public interface LinphoneNotifyListener extends LinphoneCoreListener { + /** + * Notifies of an incoming NOTIFY received. + * @param lc the linphoneCore + * @param ev a LinphoneEvent representing the subscription context for which this notify belongs, or null if it is a NOTIFY out of of any subscription. + * @param eventName the event name + * @param content content of the NOTIFY request. + */ + void notifyReceived(LinphoneCore lc, LinphoneEvent ev, String eventName, LinphoneContent content); + } + + public interface LinphoneComposingListener extends LinphoneCoreListener { + /** + * invoked when a composing notification is received + * @param lc LinphoneCore + * @param room LinphoneChatRoom involved in the conversation. + */ + void isComposingReceived(LinphoneCore lc, LinphoneChatRoom cr); + } } diff --git a/java/common/org/linphone/core/LinphonePlayer.java b/java/common/org/linphone/core/LinphonePlayer.java index faba92d5d..79d05dbb4 100644 --- a/java/common/org/linphone/core/LinphonePlayer.java +++ b/java/common/org/linphone/core/LinphonePlayer.java @@ -14,9 +14,9 @@ public interface LinphonePlayer { * */ public enum State { - closed, /**< No file is open */ - paused, /**< A file is open and playback is not running */ - playing; /**< A file is open and playback is running */ + closed, /*< No file is open */ + paused, /*< A file is open and playback is not running */ + playing; /*< A file is open and playback is running */ public static State fromValue(int value) { if(value == 0) { diff --git a/java/impl/org/linphone/core/LinphoneCallImpl.java b/java/impl/org/linphone/core/LinphoneCallImpl.java index ee78e9d89..b2cad202c 100644 --- a/java/impl/org/linphone/core/LinphoneCallImpl.java +++ b/java/impl/org/linphone/core/LinphoneCallImpl.java @@ -245,4 +245,10 @@ class LinphoneCallImpl implements LinphoneCall { public Object getUserData() { return userData; } + + private native long getPlayer(long callPtr); + @Override + public LinphonePlayer getPlayer() { + return new LinphonePlayerImpl(getPlayer(nativePtr)); + } } diff --git a/java/impl/org/linphone/core/LinphoneChatMessageImpl.java b/java/impl/org/linphone/core/LinphoneChatMessageImpl.java index d25ae426a..6d6009c92 100644 --- a/java/impl/org/linphone/core/LinphoneChatMessageImpl.java +++ b/java/impl/org/linphone/core/LinphoneChatMessageImpl.java @@ -1,8 +1,10 @@ package org.linphone.core; +import java.io.UnsupportedEncodingException; + public class LinphoneChatMessageImpl implements LinphoneChatMessage { protected final long nativePtr; - private native String getText(long ptr); + private native byte[] getText(long ptr); private native long getPeerAddress(long ptr); private native String getExternalBodyUrl(long ptr); private native void setExternalBodyUrl(long ptr, String url); @@ -25,7 +27,12 @@ public class LinphoneChatMessageImpl implements LinphoneChatMessage { @Override public String getText() { - return getText(nativePtr); + try { + return new String(getText(nativePtr), "UTF-8"); + } catch (UnsupportedEncodingException e) { + e.printStackTrace(); + } + return null; } @Override @@ -127,4 +134,10 @@ public class LinphoneChatMessageImpl implements LinphoneChatMessage { public String getAppData() { return getAppData(nativePtr); } + + private native void cancelFileTransfer(long messagePtr); + @Override + public void cancelFileTransfer() { + cancelFileTransfer(nativePtr); + } } diff --git a/java/impl/org/linphone/core/LinphoneChatRoomImpl.java b/java/impl/org/linphone/core/LinphoneChatRoomImpl.java index d47e4e47e..9236bce03 100644 --- a/java/impl/org/linphone/core/LinphoneChatRoomImpl.java +++ b/java/impl/org/linphone/core/LinphoneChatRoomImpl.java @@ -177,11 +177,4 @@ class LinphoneChatRoomImpl implements LinphoneChatRoom { } } - private native void cancelFileTransfer(long ptr, long messagePtr); - @Override - public void cancelFileTransfer(LinphoneChatMessage message) { - synchronized(getCore()) { - cancelFileTransfer(nativePtr, ((LinphoneChatMessageImpl)message).getNativePtr()); - } - } } diff --git a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java index f0d3ae064..925bae78d 100644 --- a/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreFactoryImpl.java @@ -48,13 +48,9 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { // FFMPEG (audio/video) if (Version.isX86()) { - loadOptionalLibrary("avutil-linphone-x86"); - loadOptionalLibrary("swscale-linphone-x86"); - loadOptionalLibrary("avcodec-linphone-x86"); + loadOptionalLibrary("ffmpeg-linphone-x86"); } else if (Version.isArmv7()) { - loadOptionalLibrary("avutil-linphone-arm"); - loadOptionalLibrary("swscale-linphone-arm"); - loadOptionalLibrary("avcodec-linphone-arm"); + loadOptionalLibrary("ffmpeg-linphone-arm"); } //Main library @@ -102,7 +98,9 @@ public class LinphoneCoreFactoryImpl extends LinphoneCoreFactory { public LinphoneCore createLinphoneCore(LinphoneCoreListener listener, Object context) throws LinphoneCoreException { try { MediastreamerAndroidContext.setContext(context); - return new LinphoneCoreImpl(listener); + LinphoneCore lc = new LinphoneCoreImpl(listener); + if(context!=null) lc.setContext(context); + return lc; } catch (IOException e) { throw new LinphoneCoreException("Cannot create LinphoneCore",e); } diff --git a/java/impl/org/linphone/core/LinphoneCoreImpl.java b/java/impl/org/linphone/core/LinphoneCoreImpl.java index 750ec1903..d5db2ad48 100644 --- a/java/impl/org/linphone/core/LinphoneCoreImpl.java +++ b/java/impl/org/linphone/core/LinphoneCoreImpl.java @@ -268,6 +268,7 @@ class LinphoneCoreImpl implements LinphoneCore { return logs; } public synchronized void destroy() { + setAndroidPowerManager(null); delete(nativePtr); nativePtr=0; } @@ -1280,10 +1281,10 @@ class LinphoneCoreImpl implements LinphoneCore { return getFileTransferServer(nativePtr); } - private native long createPlayer(long nativePtr, AndroidVideoWindowImpl window); + private native long createLocalPlayer(long nativePtr, AndroidVideoWindowImpl window); @Override - public synchronized LinphonePlayer createPlayer(AndroidVideoWindowImpl window) { - long playerPtr = createPlayer(nativePtr, window); + public synchronized LinphonePlayer createLocalPlayer(AndroidVideoWindowImpl window) { + long playerPtr = createLocalPlayer(nativePtr, window); if(playerPtr != 0) { return new LinphonePlayerImpl(playerPtr); } else { @@ -1291,9 +1292,15 @@ class LinphoneCoreImpl implements LinphoneCore { } } - private native void destroyPlayer(long playerPtr); + private native void addListener(long nativePtr, LinphoneCoreListener listener); @Override - public synchronized void destroyPlayer(LinphonePlayer player) { - + public void addListener(LinphoneCoreListener listener) { + addListener(nativePtr, listener); + } + + private native void removeListener(long nativePtr, LinphoneCoreListener listener); + @Override + public void removeListener(LinphoneCoreListener listener) { + removeListener(nativePtr, listener); } } diff --git a/java/impl/org/linphone/core/LinphonePlayerImpl.java b/java/impl/org/linphone/core/LinphonePlayerImpl.java index 08168e093..fe486321e 100644 --- a/java/impl/org/linphone/core/LinphonePlayerImpl.java +++ b/java/impl/org/linphone/core/LinphonePlayerImpl.java @@ -61,4 +61,10 @@ public class LinphonePlayerImpl implements LinphonePlayer { public synchronized void close() { close(nativePtr); } + + private native void destroy(long nativePtr); + @Override + protected void finalize() { + destroy(nativePtr); + } } diff --git a/m4/readline.m4 b/m4/readline.m4 index ebb7656cd..16065e348 100644 --- a/m4/readline.m4 +++ b/m4/readline.m4 @@ -5,8 +5,12 @@ AC_DEFUN([LP_CHECK_READLINE],[ AC_ARG_WITH( readline, - [ --with-readline Set prefix where gnu readline headers and libs can be found (ex:/usr, /usr/local, none) [default=/usr] ], - [ readline_prefix=${withval}],[ readline_prefix="/usr" ]) + [ --with-readline Set prefix where gnu readline headers and libs can be found (ex:/usr, /usr/local, none) [default=/usr] ], + [ readline_prefix=${withval} ], + [ readline_prefix="/usr/local" ], + [ readline_prefix="/opt/local" ], + [ readline_prefix="/usr" ] +) if test "$readline_prefix" != "none"; then @@ -14,14 +18,14 @@ if test "$readline_prefix" != "none"; then READLINE_CFLAGS="-I$readline_prefix/include" READLINE_LIBS="-L$readline_prefix/lib" fi - + CPPFLAGS_save=$CPPFLAGS LIBS_save=$LIBS CPPFLAGS="$CPPFLAGS $READLINE_CFLAGS" LIBS="$LIBS $READLINE_LIBS" AC_CHECK_HEADERS(readline.h readline/readline.h, readline_h_found=yes) AC_CHECK_HEADERS(history.h readline/history.h) - + for termcap_lib in "" -ltermcap -lcurses -lncurses; do unset ac_cv_lib_readline_readline AC_CHECK_LIB(readline, readline, [readline_libs_found=yes],[],[$termcap_lib]) @@ -33,14 +37,14 @@ if test "$readline_prefix" != "none"; then LIBS=$LIBS_save CPPFLAGS=$CPPFLAGS_save - + if test "$readline_libs_found$readline_h_found" != "yesyes" ; then AC_MSG_WARN([Could not find libreadline headers or library, linphonec will have limited prompt features]) else AC_DEFINE([HAVE_READLINE],1,[defined when compiling with readline support]) fi - - + + AC_SUBST(READLINE_CFLAGS) AC_SUBST(READLINE_LIBS) diff --git a/mediastreamer2 b/mediastreamer2 index 2fa9c8e25..06a14487a 160000 --- a/mediastreamer2 +++ b/mediastreamer2 @@ -1 +1 @@ -Subproject commit 2fa9c8e258eacadc789f87d3ea3a152faea291ea +Subproject commit 06a14487aa5acc0e3f0d4931c9a974762829d7bd diff --git a/oRTP b/oRTP index 05e0242a9..a3debbd39 160000 --- a/oRTP +++ b/oRTP @@ -1 +1 @@ -Subproject commit 05e0242a91391747408340dffa34f9b4e1335be4 +Subproject commit a3debbd394fb32ab54ed265d2190711971c890e7 diff --git a/pixmaps/CMakeLists.txt b/pixmaps/CMakeLists.txt new file mode 100644 index 000000000..61dacfe46 --- /dev/null +++ b/pixmaps/CMakeLists.txt @@ -0,0 +1,64 @@ +############################################################################ +# CMakeLists.txt +# Copyright (C) 2014 Belledonne Communications, Grenoble France +# +############################################################################ +# +# 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 2 +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################ + +set(PIXMAPS + active_chat.png + addcall-green.png + call.png + call_status_incoming.png + call_status_outgoing.png + chat_message_delivered.png + chat_message_inprogress.png + chat_message_not_delivered.png + chat.png + composing_active_chat.png + composing_chat.png + contact-orange.png + contact_starred.png + contact_unstarred.png + dialer-orange.png + dialer.png + history-orange.png + hold_off.png + hold_on.png + linphone-banner.png + linphone.icns + linphone.png + mic_active.png + mic_muted.png + notok.png + ok.png + speaker.png + startcall-green.png + startcall-small.png + status-green.png + status-offline.png + status-orange.png + status-red.png + stopcall-red.png + stopcall-small.png +) + +install(FILES ${PIXMAPS} + DESTINATION ${PACKAGE_DATA_DIR}/pixmaps/linphone + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ +) diff --git a/po/POTFILES.in b/po/POTFILES.in index 5d2aabf39..19003b0f6 100644 --- a/po/POTFILES.in +++ b/po/POTFILES.in @@ -40,3 +40,5 @@ coreapi/proxy.c coreapi/callbacks.c coreapi/linphonecall.c +coreapi/call_log.c +gtk/videowindow.c diff --git a/po/POTFILES.skip b/po/POTFILES.skip index 6b9ad1b55..32dcd19f2 100755 --- a/po/POTFILES.skip +++ b/po/POTFILES.skip @@ -48,3 +48,6 @@ mediastreamer2/src/videofilters/winvideo2.c mediastreamer2/src/videofilters/x11video.c mediastreamer2/src/voip/ice.c build/vsx/LibLinphoneTester-wp8/LibLinphoneTester-wp8/Resources/AppResources.Designer.cs +build/wp8/LibLinphoneTester-wp8/Resources/AppResources.Designer.cs +mediastreamer2/build/wp8/mediastreamer2-tester-wp8/Resources/AppResources.Designer.cs +share/linphone.desktop.in diff --git a/po/ar.po b/po/ar.po new file mode 100644 index 000000000..455a8df4c --- /dev/null +++ b/po/ar.po @@ -0,0 +1,1946 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# محيي الدين , 2014 +# محيي الدين , 2014 +msgid "" +msgstr "" +"Project-Id-Version: linphone-gtk\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Arabic (http://www.transifex.com/projects/p/linphone-gtk/language/ar/)\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Language: ar\n" +"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5;\n" + +#: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 +#, c-format +msgid "Call %s" +msgstr "اتصل بـ %s" + +#: ../gtk/calllogs.c:149 ../gtk/friendlist.c:975 +#, c-format +msgid "Send text to %s" +msgstr "أرسل رسالة إلى %s" + +#: ../gtk/calllogs.c:232 +#, c-format +msgid "Recent calls (%i)" +msgstr "المكالمات الفائتة (%i)" + +#: ../gtk/calllogs.c:314 +msgid "n/a" +msgstr "—" + +#: ../gtk/calllogs.c:317 +msgid "Aborted" +msgstr "أُلغيت" + +#: ../gtk/calllogs.c:320 +msgid "Missed" +msgstr "فائتة" + +#: ../gtk/calllogs.c:323 +msgid "Declined" +msgstr "مرفوضة" + +#: ../gtk/calllogs.c:329 +#, c-format +msgid "%i minute" +msgid_plural "%i minutes" +msgstr[0] "%i دقيقة" +msgstr[1] "دقيقة واحدة" +msgstr[2] "دقيقتان" +msgstr[3] "%i دقائق" +msgstr[4] "%i دقيقة" +msgstr[5] "%i دقيقة" + +#: ../gtk/calllogs.c:332 +#, c-format +msgid "%i second" +msgid_plural "%i seconds" +msgstr[0] "%i ثانية" +msgstr[1] "ثانية واحدة" +msgstr[2] "ثانيتان" +msgstr[3] "%i ثوان" +msgstr[4] "%i ثانية" +msgstr[5] "%i ثانية" + +#: ../gtk/calllogs.c:337 +#, c-format +msgid "" +"%s\tQuality: %s\n" +"%s\t%s\t" +msgstr "%s\tالجودة : %s\n%s\t%s\t" + +#: ../gtk/calllogs.c:341 +#, c-format +msgid "%s\t%s" +msgstr "%s\t%s" + +#: ../gtk/conference.c:38 ../gtk/main.ui.h:13 +msgid "Conference" +msgstr "اجتماع" + +#: ../gtk/conference.c:46 +msgid "Me" +msgstr "أنا" + +#: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 +#, c-format +msgid "Couldn't find pixmap file: %s" +msgstr "أيقونة غير موجودة : %s" + +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 +msgid "Invalid sip contact !" +msgstr "جهة اتصال sip غير صالحة !" + +#: ../gtk/main.c:107 +msgid "log to stdout some debug information while running." +msgstr "أظهِرْ بعض معلومات التنقيح خلال التشغيل." + +#: ../gtk/main.c:114 +msgid "path to a file to write logs into." +msgstr "الدليل إلى الملف الذي سيُكتَب فيه سجل الوقائع." + +#: ../gtk/main.c:121 +msgid "Start linphone with video disabled." +msgstr "ابدأ لِنْفُونْ لكن دون تفعيل الفيديو." + +#: ../gtk/main.c:128 +msgid "Start only in the system tray, do not show the main interface." +msgstr "شغِّله مُصغَّرا، ولا تُظهِر الواجهة الرئيسية." + +#: ../gtk/main.c:135 +msgid "address to call right now" +msgstr "العنوان المُراد الاتصال به الآن" + +#: ../gtk/main.c:142 +msgid "if set automatically answer incoming calls" +msgstr "إذا تم التفعيل، سيجيب تلقائيا عن المكالمات الواردة" + +#: ../gtk/main.c:149 +msgid "" +"Specifiy a working directory (should be the base of the installation, eg: " +"c:\\Program Files\\Linphone)" +msgstr "حدِّد مجلد العمل (الذي سيكون مجلد التثبيت، مثلا c:\\Program Files\\Linphone)" + +#: ../gtk/main.c:156 +msgid "Configuration file" +msgstr "ملف التهيئة" + +#: ../gtk/main.c:163 +msgid "Run the audio assistant" +msgstr "ابدأ مرشد الصوت" + +#: ../gtk/main.c:1085 +#, c-format +msgid "" +"%s would like to add you to his contact list.\n" +"Would you allow him to see your presence status or add him to your contact list ?\n" +"If you answer no, this person will be temporarily blacklisted." +msgstr "%s يريد إضافتك إلى جهة اتصاله.\nهل تريد السماح له برؤية معلومات حضورك وكذا إضافته إلى جهة اتصالك أيضا ؟ إذا أجبت ب لا، سيُحظَر هذا الشخص مؤقتا." + +#: ../gtk/main.c:1162 +#, c-format +msgid "" +"Please enter your password for username %s\n" +" at realm %s:" +msgstr "ادخل كلمة السر ل %s\n في نطاق %s:" + +#: ../gtk/main.c:1283 +msgid "Call error" +msgstr "خطأ في المكالمة" + +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 +msgid "Call ended" +msgstr "إنتهت المكالمة" + +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 +msgid "Incoming call" +msgstr "مكالمة واردة" + +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 +msgid "Answer" +msgstr "أجِبْ" + +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 +msgid "Decline" +msgstr "ارفضْ" + +#: ../gtk/main.c:1299 +msgid "Call paused" +msgstr "المكالمة متوقفة" + +#: ../gtk/main.c:1299 +#, c-format +msgid "by %s" +msgstr "بواسطة %s" + +#: ../gtk/main.c:1366 +#, c-format +msgid "%s proposed to start video. Do you accept ?" +msgstr "يود %s تشغيل الفيديو. هل تقبل ذلك ؟" + +#: ../gtk/main.c:1528 +msgid "Website link" +msgstr "وصلة إلى الموقع وِبْ" + +#: ../gtk/main.c:1577 +msgid "Linphone - a video internet phone" +msgstr "لِنْفُونْ - الهاتف المرئي عبر الإنترنت" + +#: ../gtk/main.c:1669 +#, c-format +msgid "%s (Default)" +msgstr "%s (افتراضي)" + +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 +#, c-format +msgid "We are transferred to %s" +msgstr "التحويل إلى %s" + +#: ../gtk/main.c:2016 +msgid "" +"No sound cards have been detected on this computer.\n" +"You won't be able to send or receive audio calls." +msgstr "لا وجود للوحة الصوت على هذا الحاسوب.\nلن تتمكن من تلقي أو إجراء أي مكالمة." + +#: ../gtk/main.c:2157 +msgid "A free SIP video-phone" +msgstr "هاتف SIP المرئي الحر" + +#: ../gtk/friendlist.c:505 +msgid "Add to addressbook" +msgstr "أضف إلى دفتر العناوين" + +#: ../gtk/friendlist.c:691 +msgid "Presence status" +msgstr "معلومة الحضور" + +#: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 +msgid "Name" +msgstr "الإسم" + +#: ../gtk/friendlist.c:721 +msgid "Call" +msgstr "اتصل" + +#: ../gtk/friendlist.c:726 +msgid "Chat" +msgstr "محادثة" + +#: ../gtk/friendlist.c:756 +#, c-format +msgid "Search in %s directory" +msgstr "ابحث في دليل %s" + +#: ../gtk/friendlist.c:976 +#, c-format +msgid "Edit contact '%s'" +msgstr "حرر جهة الاتصال '%s'" + +#: ../gtk/friendlist.c:977 +#, c-format +msgid "Delete contact '%s'" +msgstr "احذف جهة الاتصال '%s'" + +#: ../gtk/friendlist.c:978 +#, c-format +msgid "Delete chat history of '%s'" +msgstr "احذف تاريخ دردشات '%s'" + +#: ../gtk/friendlist.c:1029 +#, c-format +msgid "Add new contact from %s directory" +msgstr "اضف جهة اتصال انطلاقا من الدليل %s" + +#: ../gtk/propertybox.c:558 +msgid "Rate (Hz)" +msgstr "التردد (هرتز)" + +#: ../gtk/propertybox.c:564 +msgid "Status" +msgstr "الحالة" + +#: ../gtk/propertybox.c:570 +msgid "IP Bitrate (kbit/s)" +msgstr "صبيب IP (ك.بِتْ/ثانية)" + +#: ../gtk/propertybox.c:577 +msgid "Parameters" +msgstr "الإعدادات" + +#: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 +msgid "Enabled" +msgstr "مفعَّل" + +#: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 +msgid "Disabled" +msgstr "غير مفعَّل" + +#: ../gtk/propertybox.c:809 +msgid "Account" +msgstr "الحساب" + +#: ../gtk/propertybox.c:1072 +msgid "English" +msgstr "الإنجليزية" + +#: ../gtk/propertybox.c:1073 +msgid "French" +msgstr "الفرنسية" + +#: ../gtk/propertybox.c:1074 +msgid "Swedish" +msgstr "السويدية" + +#: ../gtk/propertybox.c:1075 +msgid "Italian" +msgstr "الإيطالية" + +#: ../gtk/propertybox.c:1076 +msgid "Spanish" +msgstr "الإسبانية" + +#: ../gtk/propertybox.c:1077 +msgid "Brazilian Portugese" +msgstr "البرتغالية البرازيلية" + +#: ../gtk/propertybox.c:1078 +msgid "Polish" +msgstr "البولونية" + +#: ../gtk/propertybox.c:1079 +msgid "German" +msgstr "الألمانية" + +#: ../gtk/propertybox.c:1080 +msgid "Russian" +msgstr "الروسية" + +#: ../gtk/propertybox.c:1081 +msgid "Japanese" +msgstr "اليابانية" + +#: ../gtk/propertybox.c:1082 +msgid "Dutch" +msgstr "الهولندية" + +#: ../gtk/propertybox.c:1083 +msgid "Hungarian" +msgstr "الهنغارية" + +#: ../gtk/propertybox.c:1084 +msgid "Czech" +msgstr "التشيكية" + +#: ../gtk/propertybox.c:1085 +msgid "Chinese" +msgstr "الصينية المبسَّطة" + +#: ../gtk/propertybox.c:1086 +msgid "Traditional Chinese" +msgstr "الصينية التقليدية" + +#: ../gtk/propertybox.c:1087 +msgid "Norwegian" +msgstr "النرويجية" + +#: ../gtk/propertybox.c:1088 +msgid "Hebrew" +msgstr "العبرية" + +#: ../gtk/propertybox.c:1089 +msgid "Serbian" +msgstr "الصربية" + +#: ../gtk/propertybox.c:1156 +msgid "" +"You need to restart linphone for the new language selection to take effect." +msgstr "يجب إعادة تشغيل لِنْفُونْ لكي تٌفعَّل اللغة المختارة." + +#: ../gtk/propertybox.c:1234 +msgid "None" +msgstr "بدون" + +#: ../gtk/propertybox.c:1238 +msgid "SRTP" +msgstr "SRTP" + +#: ../gtk/propertybox.c:1244 +msgid "ZRTP" +msgstr "ZRTP" + +#: ../gtk/update.c:80 +#, c-format +msgid "" +"A more recent version is availalble from %s.\n" +"Would you like to open a browser to download it ?" +msgstr "يوجد إصدار حديث من طرف %s.\nهل تريد فتح المتصفح لتنزيله ؟" + +#: ../gtk/update.c:91 +msgid "You are running the lastest version." +msgstr "أنت تستخدم الإصدار الأحدث." + +#: ../gtk/buddylookup.c:85 +msgid "Firstname, Lastname" +msgstr "الإسم، اللقب" + +#: ../gtk/buddylookup.c:160 +msgid "Error communicating with server." +msgstr "خطأ في الاتصال مع الخادم." + +#: ../gtk/buddylookup.c:164 +msgid "Connecting..." +msgstr "يجري الاتصال..." + +#: ../gtk/buddylookup.c:168 +msgid "Connected" +msgstr "متصل" + +#: ../gtk/buddylookup.c:172 +msgid "Receiving data..." +msgstr "يجري تلقي البيانات..." + +#: ../gtk/buddylookup.c:180 +#, c-format +msgid "Found %i contact" +msgid_plural "Found %i contacts" +msgstr[0] "لم يُعثَر على أي جهة اتصال" +msgstr[1] "عُثِر على جهة اتصال واحدة" +msgstr[2] "عُثِر على جهتي اتصال" +msgstr[3] "عُثِر على %i جهات اتصال" +msgstr[4] "عُثِر على %i جهة اتصال" +msgstr[5] "عُثِر على %i جهة اتصال" + +#: ../gtk/setupwizard.c:34 +msgid "" +"Welcome!\n" +"This assistant will help you to use a SIP account for your calls." +msgstr "مرحبا !\nسيمكنك هذا المرشد من إعداد حسابك SIP لإجراء المكالمات." + +#: ../gtk/setupwizard.c:43 +msgid "Create an account on linphone.org" +msgstr "إنشاء حساب في linphone.org" + +#: ../gtk/setupwizard.c:44 +msgid "I have already a linphone.org account and I just want to use it" +msgstr "أتوفر مسبقا على حساب في linphone.org وأريد فقط استخدامه" + +#: ../gtk/setupwizard.c:45 +msgid "I have already a sip account and I just want to use it" +msgstr "أتوفر مسبقا على حساب sip وأريد فقط استخدامه" + +#: ../gtk/setupwizard.c:46 +msgid "I want to specify a remote configuration URI" +msgstr "أريد تحديد عنوان التهيئة عن بعد" + +#: ../gtk/setupwizard.c:89 +msgid "Enter your linphone.org username" +msgstr "أدخِلْ إسم المستخدم في linphone.org" + +#: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4 +msgid "Username:" +msgstr "إسم المستخدم :" + +#: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 +msgid "Password:" +msgstr "كلمة السر :" + +#: ../gtk/setupwizard.c:124 +msgid "Enter your account informations" +msgstr "أدخل معلومات حسابك" + +#: ../gtk/setupwizard.c:140 +msgid "Username*" +msgstr "إسم المستخدم*" + +#: ../gtk/setupwizard.c:141 +msgid "Password*" +msgstr "كلمة السر*" + +#: ../gtk/setupwizard.c:144 +msgid "Domain*" +msgstr "النطاق*" + +#: ../gtk/setupwizard.c:145 +msgid "Proxy" +msgstr "الوكيل" + +#: ../gtk/setupwizard.c:317 +msgid "(*) Required fields" +msgstr "(*) حقول ضرورية" + +#: ../gtk/setupwizard.c:318 +msgid "Username: (*)" +msgstr "إسم المستخدم* : (*)" + +#: ../gtk/setupwizard.c:320 +msgid "Password: (*)" +msgstr "كلمة السر* : (*)" + +#: ../gtk/setupwizard.c:322 +msgid "Email: (*)" +msgstr "البريد الالكتروني : (*)" + +#: ../gtk/setupwizard.c:324 +msgid "Confirm your password: (*)" +msgstr "أكِّد كلمة السر : (*)" + +#: ../gtk/setupwizard.c:338 +msgid "Keep me informed with linphone updates" +msgstr "أحطني علما بتحديثات لِنْفُونْ" + +#: ../gtk/setupwizard.c:394 +msgid "" +"Error, account not validated, username already used or server unreachable.\n" +"Please go back and try again." +msgstr "خطأ، لم يتم تأكيد الحساب، إسم المستخدم سبق استخدامه أو تعذر الوصول للخادم.\nيُرجى إعادة المحاولة لاحقا." + +#: ../gtk/setupwizard.c:405 +msgid "Thank you. Your account is now configured and ready for use." +msgstr "شكرا لك، لقد جرت تهيئة حسابك وهو الآن قابل للاستخدام." + +#: ../gtk/setupwizard.c:413 +msgid "" +"Please validate your account by clicking on the link we just sent you by email.\n" +"Then come back here and press Next button." +msgstr "يُرجى تأكيد حسابك وذلك بالضغط على الوصلة التي أرسلناها لك بالبريد الإلكتروني.\nثم ارجع إلى هنا واضغط على زر التالي." + +#: ../gtk/setupwizard.c:602 +msgid "SIP account configuration assistant" +msgstr "مرشد تهيئة حساب SIP" + +#: ../gtk/setupwizard.c:620 +msgid "Welcome to the account setup assistant" +msgstr "مرحبا بك في مرشد إعداد الحساب" + +#: ../gtk/setupwizard.c:625 +msgid "Account setup assistant" +msgstr "مرشد تهيئة الحساب" + +#: ../gtk/setupwizard.c:631 +msgid "Configure your account (step 1/1)" +msgstr "تهيئة حسابك (المرحلة 1/1)" + +#: ../gtk/setupwizard.c:636 +msgid "Enter your sip username (step 1/1)" +msgstr "أدخل إسم المستخدم SIP لديك (المرحلة 1/1)" + +#: ../gtk/setupwizard.c:640 +msgid "Enter account information (step 1/2)" +msgstr "أدخل معلومات حسابك (المرحلة 1/2)" + +#: ../gtk/setupwizard.c:649 +msgid "Validation (step 2/2)" +msgstr "تأكيد (المرحلة 2/2)" + +#: ../gtk/setupwizard.c:654 +msgid "Error" +msgstr "خطأ" + +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 +msgid "Terminating" +msgstr "في طور الإنهاء" + +#: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 +#, c-format +msgid "Call #%i" +msgstr "مكالمة #%i" + +#: ../gtk/incall_view.c:155 +#, c-format +msgid "Transfer to call #%i with %s" +msgstr "حوِّل إلى المكالمة #%i مع %s" + +#: ../gtk/incall_view.c:211 ../gtk/incall_view.c:214 +msgid "Not used" +msgstr "غير مستخدَم" + +#: ../gtk/incall_view.c:221 +msgid "ICE not activated" +msgstr "ICE غير مفعَّل" + +#: ../gtk/incall_view.c:223 +msgid "ICE failed" +msgstr "فَشِل ICE" + +#: ../gtk/incall_view.c:225 +msgid "ICE in progress" +msgstr "تجري مساومة ICE" + +#: ../gtk/incall_view.c:227 +msgid "Going through one or more NATs" +msgstr "المرور عبد واحد أو عدة NAT" + +#: ../gtk/incall_view.c:229 +msgid "Direct" +msgstr "مباشر" + +#: ../gtk/incall_view.c:231 +msgid "Through a relay server" +msgstr "عبر خادم بديل" + +#: ../gtk/incall_view.c:239 +msgid "uPnP not activated" +msgstr "uPnP غير مفعَّل" + +#: ../gtk/incall_view.c:241 +msgid "uPnP in progress" +msgstr "يجري uPnP" + +#: ../gtk/incall_view.c:243 +msgid "uPnp not available" +msgstr "uPnP غير متوفر" + +#: ../gtk/incall_view.c:245 +msgid "uPnP is running" +msgstr "uPnP مشغَّل" + +#: ../gtk/incall_view.c:247 +msgid "uPnP failed" +msgstr "فَشِل uPnP" + +#: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 +msgid "Direct or through server" +msgstr "مباشرة أو عبر خادم" + +#: ../gtk/incall_view.c:267 ../gtk/incall_view.c:279 +#, c-format +msgid "" +"download: %f\n" +"upload: %f (kbit/s)" +msgstr "التنزيل % f\nالرفع : %f (ك.بِتْ/الثانية)" + +#: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 +#, c-format +msgid "%ix%i @ %f fps" +msgstr "%ix%i @ %f fps" + +#: ../gtk/incall_view.c:304 +#, c-format +msgid "%.3f seconds" +msgstr "%.3f ثانية" + +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 +msgid "Hang up" +msgstr "ضع السماعة" + +#: ../gtk/incall_view.c:511 +msgid "Calling..." +msgstr "يجري الاتصال..." + +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 +msgid "00::00::00" +msgstr "00::00::00" + +#: ../gtk/incall_view.c:525 +msgid "Incoming call" +msgstr "المكالمة الواردة" + +#: ../gtk/incall_view.c:562 +msgid "good" +msgstr "جيدة" + +#: ../gtk/incall_view.c:564 +msgid "average" +msgstr "متوسطة" + +#: ../gtk/incall_view.c:566 +msgid "poor" +msgstr "ضعيفة" + +#: ../gtk/incall_view.c:568 +msgid "very poor" +msgstr "ضعيفة جدا" + +#: ../gtk/incall_view.c:570 +msgid "too bad" +msgstr "سيِّئة جيدا" + +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 +msgid "unavailable" +msgstr "غير متاحة" + +#: ../gtk/incall_view.c:679 +msgid "Secured by SRTP" +msgstr "آمن بواسطة SRTP" + +#: ../gtk/incall_view.c:685 +#, c-format +msgid "Secured by ZRTP - [auth token: %s]" +msgstr "آمن بواسطة ZRTP - [شارة الهوية : %s]" + +#: ../gtk/incall_view.c:691 +msgid "Set unverified" +msgstr "أكِّدْ عدم تحقُّقك" + +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 +msgid "Set verified" +msgstr "أكِّدْ تحقُّقَك" + +#: ../gtk/incall_view.c:722 +msgid "In conference" +msgstr "في اجتماع" + +#: ../gtk/incall_view.c:722 +msgid "In call" +msgstr "المكالمة جارية" + +#: ../gtk/incall_view.c:758 +msgid "Paused call" +msgstr "المكالمة متوقفة مؤقتا" + +#: ../gtk/incall_view.c:794 +msgid "Call ended." +msgstr "إنتهت المكالمة." + +#: ../gtk/incall_view.c:825 +msgid "Transfer in progress" +msgstr "يجري الإرسال" + +#: ../gtk/incall_view.c:828 +msgid "Transfer done." +msgstr "انتهى الإرسال." + +#: ../gtk/incall_view.c:831 +msgid "Transfer failed." +msgstr "فَشِل الإرسال." + +#: ../gtk/incall_view.c:875 +msgid "Resume" +msgstr "استأنِفْ" + +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 +msgid "Pause" +msgstr "إيقاف مؤقت" + +#: ../gtk/incall_view.c:948 +#, c-format +msgid "" +"Recording into\n" +"%s %s" +msgstr "يسجل في\n%s %s" + +#: ../gtk/incall_view.c:948 +msgid "(Paused)" +msgstr "(متوقف)" + +#: ../gtk/loginframe.c:88 +#, c-format +msgid "Please enter login information for %s" +msgstr "يُرجى إدخال معلومات الولوج ل %s" + +#: ../gtk/config-fetching.c:57 +#, c-format +msgid "fetching from %s" +msgstr "يجلب من %s" + +#: ../gtk/config-fetching.c:73 +#, c-format +msgid "Downloading of remote configuration from %s failed." +msgstr "فَشِل تنزيل التهيئة عن بعد من %s ." + +#: ../gtk/audio_assistant.c:98 +msgid "No voice detected" +msgstr "لم يكتشف صوتاً" + +#: ../gtk/audio_assistant.c:99 +msgid "Too low" +msgstr "خافِت" + +#: ../gtk/audio_assistant.c:100 +msgid "Good" +msgstr "جيد" + +#: ../gtk/audio_assistant.c:101 +msgid "Too loud" +msgstr "صاخب" + +#: ../gtk/audio_assistant.c:318 +msgid "" +"Welcome!\n" +"This assistant will help you to configure audio settings for Linphone" +msgstr "مرحبا !\nسيمكنك هذا المرشد من تهيئة إعدادات الصوت للِنْفُونْ" + +#: ../gtk/audio_assistant.c:328 +msgid "Capture device" +msgstr "جهاز الالتقاط" + +#: ../gtk/audio_assistant.c:329 +msgid "Recorded volume" +msgstr "الحجم المسجَّل" + +#: ../gtk/audio_assistant.c:333 +msgid "No voice" +msgstr "صامت" + +#: ../gtk/audio_assistant.c:369 +msgid "Playback device" +msgstr "جهاز السماع" + +#: ../gtk/audio_assistant.c:370 +msgid "Play three beeps" +msgstr "شغِّل ثلاث رنَّات" + +#: ../gtk/audio_assistant.c:403 +msgid "Press the record button and say some words" +msgstr "اضغط على زر التسجيل وانطق ببعض الكلمات" + +#: ../gtk/audio_assistant.c:404 +msgid "Listen to your record voice" +msgstr "استمع لصوتك المسجَّل" + +#: ../gtk/audio_assistant.c:433 +msgid "Let's start Linphone now" +msgstr "لنُشغِّل لِنْفُونْ الآن" + +#: ../gtk/audio_assistant.c:496 +msgid "Audio Assistant" +msgstr "مرشد الصوت" + +#: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 +msgid "Audio assistant" +msgstr "مرشد الصوت" + +#: ../gtk/audio_assistant.c:511 +msgid "Mic Gain calibration" +msgstr "معايرة كسب الميكروفون" + +#: ../gtk/audio_assistant.c:517 +msgid "Speaker volume calibration" +msgstr "معايرة شدة مكبر الصوت" + +#: ../gtk/audio_assistant.c:522 +msgid "Record and Play" +msgstr "سَجِّل واقرأ " + +#: ../gtk/main.ui.h:1 +msgid "Callee name" +msgstr "إسم المنادَى" + +#: ../gtk/main.ui.h:2 +msgid "Send" +msgstr "أرسِلْ" + +#: ../gtk/main.ui.h:3 +msgid "End conference" +msgstr "أنْهِ الاجتماع" + +#: ../gtk/main.ui.h:7 +msgid "Record this call to an audio file" +msgstr "سَجِّل هذه المكالمة في ملف صوتي" + +#: ../gtk/main.ui.h:8 +msgid "Video" +msgstr "مرئي" + +#: ../gtk/main.ui.h:10 +msgid "Mute" +msgstr "اصمُتْ" + +#: ../gtk/main.ui.h:11 +msgid "Transfer" +msgstr "إرسال" + +#: ../gtk/main.ui.h:14 +msgid "In call" +msgstr "المكالمة جارية" + +#: ../gtk/main.ui.h:15 +msgid "Duration" +msgstr "المدة" + +#: ../gtk/main.ui.h:16 +msgid "Call quality rating" +msgstr "تقييم جودة المكالمة" + +#: ../gtk/main.ui.h:17 +msgid "All users" +msgstr "كل المستخدمين" + +#: ../gtk/main.ui.h:18 +msgid "Online users" +msgstr "المستخدمون المتصلون" + +#: ../gtk/main.ui.h:19 +msgid "ADSL" +msgstr "ADSL" + +#: ../gtk/main.ui.h:20 +msgid "Fiber Channel" +msgstr "قناة الألياف الضوئية" + +#: ../gtk/main.ui.h:21 +msgid "Default" +msgstr "افتراضي" + +#: ../gtk/main.ui.h:22 +msgid "_Options" +msgstr "الخ_يارات" + +#: ../gtk/main.ui.h:23 +msgid "Set configuration URI" +msgstr "عنوان URI للتهيئة" + +#: ../gtk/main.ui.h:24 +msgid "Always start video" +msgstr "شغِّل الفيديو دائما" + +#: ../gtk/main.ui.h:25 +msgid "Enable self-view" +msgstr "تفعيل رؤية نفسي" + +#: ../gtk/main.ui.h:26 +msgid "_Help" +msgstr "_مساعدة" + +#: ../gtk/main.ui.h:27 +msgid "Show debug window" +msgstr "أظهِر نافذة التنقيح" + +#: ../gtk/main.ui.h:28 +msgid "_Homepage" +msgstr "موق_ع الوِبْ" + +#: ../gtk/main.ui.h:29 +msgid "Check _Updates" +msgstr "تحقق من التح_ديثات" + +#: ../gtk/main.ui.h:30 +msgid "Account assistant" +msgstr "مرشد الحساب" + +#: ../gtk/main.ui.h:32 +msgid "SIP address or phone number:" +msgstr "عنوان SIP أو رقم الهاتف :" + +#: ../gtk/main.ui.h:33 +msgid "Initiate a new call" +msgstr "ابدأ مكالمة جديدة" + +#: ../gtk/main.ui.h:34 +msgid "Contacts" +msgstr "جهات الاتصال" + +#: ../gtk/main.ui.h:35 +msgid "Search" +msgstr "بحث" + +#: ../gtk/main.ui.h:36 +msgid "Add contacts from directory" +msgstr "إضافة جهات الاتصال من الدليل" + +#: ../gtk/main.ui.h:37 +msgid "Add contact" +msgstr "إضافة جهة الاتصال" + +#: ../gtk/main.ui.h:38 +msgid "Recent calls" +msgstr "المكالمات السابقة" + +#: ../gtk/main.ui.h:39 +msgid "My current identity:" +msgstr "هويتي الحالية :" + +#: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7 +msgid "Username" +msgstr "إسم المستخدم" + +#: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8 +msgid "Password" +msgstr "كلمة السر" + +#: ../gtk/main.ui.h:42 +msgid "Internet connection:" +msgstr "الاتصال بالإنترنت :" + +#: ../gtk/main.ui.h:43 +msgid "Automatically log me in" +msgstr "سَجِّل دخولي تلقائيا" + +#: ../gtk/main.ui.h:44 ../gtk/password.ui.h:3 +msgid "UserID" +msgstr "مُعرِّف المستخدم" + +#: ../gtk/main.ui.h:45 +msgid "Login information" +msgstr "معلومات الولوج" + +#: ../gtk/main.ui.h:46 +msgid "Welcome!" +msgstr "مرحبا !" + +#: ../gtk/main.ui.h:47 +msgid "Delete" +msgstr "احذف" + +#: ../gtk/about.ui.h:1 +msgid "About Linphone" +msgstr "حول لِنْفُونْ" + +#: ../gtk/about.ui.h:2 +msgid "(C) Belledonne Communications, 2010\n" +msgstr "(C) Belledonne Communications, 2010\n" + +#: ../gtk/about.ui.h:4 +msgid "An internet video phone using the standard SIP (rfc3261) protocol." +msgstr "الهاتف المرئي للإنترنت الموافق للبروتوكول المعياري SIP (rfc3261)." + +#: ../gtk/about.ui.h:5 +msgid "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" +msgstr "fr: Simon Morlat\nen: Simon Morlat and Delphine Perreau\nit: Alberto Zanoni \nde: Jean-Jacques Sarton \nsv: Daniel Nylander \nes: Jesus Benitez \nja: YAMAGUCHI YOSHIYA \npt_BR: Rafael Caesar Lenzi \npl: Robert Nasiadek \ncs: Petr Pisar \nhu: anonymous\nhe: Eli Zaretskii \nar: Muhiyeddine Cherik \n" + +#: ../gtk/contact.ui.h:2 +msgid "SIP Address" +msgstr "عنوان SIP" + +#: ../gtk/contact.ui.h:3 +msgid "Show this contact presence status" +msgstr "رؤية حالة حضور جهة الاتصال هذه" + +#: ../gtk/contact.ui.h:4 +msgid "Allow this contact to see my presence status" +msgstr "السماح لجهة الاتصال هذه برؤية حالة حضوري" + +#: ../gtk/contact.ui.h:5 +msgid "Contact information" +msgstr "معلومات جهة الاتصال" + +#: ../gtk/log.ui.h:1 +msgid "Linphone debug window" +msgstr "نافذة تنقيح لِنْفُونْ" + +#: ../gtk/log.ui.h:2 +msgid "Scroll to end" +msgstr "مرِّر إلى الآخر" + +#: ../gtk/password.ui.h:1 +msgid "Linphone - Authentication required" +msgstr "لِنْفُونْ - يجب التحقق من الهوية" + +#: ../gtk/password.ui.h:2 +msgid "Please enter the domain password" +msgstr "أدخل كلمة سر النطاق" + +#: ../gtk/call_logs.ui.h:1 +msgid "Call history" +msgstr "تاريخ المكالمات" + +#: ../gtk/call_logs.ui.h:2 +msgid "Clear all" +msgstr "أفْرِغ الكل" + +#: ../gtk/call_logs.ui.h:3 +msgid "Call back" +msgstr "إعادة الاتصال" + +#: ../gtk/sip_account.ui.h:1 +msgid "Linphone - Configure a SIP account" +msgstr "لِنْفُونْ - تهيئة حساب SIP" + +#: ../gtk/sip_account.ui.h:2 +msgid "Your SIP identity:" +msgstr "هوية SIP لديك :" + +#: ../gtk/sip_account.ui.h:3 +msgid "Looks like sip:@" +msgstr "يشبه sip:@" + +#: ../gtk/sip_account.ui.h:4 +msgid "sip:" +msgstr "sip:" + +#: ../gtk/sip_account.ui.h:5 +msgid "SIP Proxy address:" +msgstr "عنوان وكيل SIP :" + +#: ../gtk/sip_account.ui.h:6 +msgid "Looks like sip:" +msgstr "يشبه sip:" + +#: ../gtk/sip_account.ui.h:7 +msgid "Registration duration (sec):" +msgstr "مدة التسجيل (بالثواني) :" + +#: ../gtk/sip_account.ui.h:8 +msgid "Contact params (optional):" +msgstr "إعدادات جهة الاتصال (اختيارية) :" + +#: ../gtk/sip_account.ui.h:9 +msgid "AVPF regular RTCP interval (sec):" +msgstr "مجال RTCP الاعتيادي ل AVPF (بالثواني) :" + +#: ../gtk/sip_account.ui.h:10 +msgid "Route (optional):" +msgstr "التوجيه (اختياري) :" + +#: ../gtk/sip_account.ui.h:11 +msgid "Transport" +msgstr "النقل" + +#: ../gtk/sip_account.ui.h:12 +msgid "Register" +msgstr "التسجيل" + +#: ../gtk/sip_account.ui.h:13 +msgid "Publish presence information" +msgstr "انشر معلومات الحضور" + +#: ../gtk/sip_account.ui.h:14 +msgid "Enable AVPF" +msgstr "فعِّل AVPF " + +#: ../gtk/sip_account.ui.h:15 +msgid "Configure a SIP account" +msgstr "تهيئة حساب SIP" + +#: ../gtk/parameters.ui.h:1 +msgid "anonymous" +msgstr "مجهول" + +#: ../gtk/parameters.ui.h:2 +msgid "GSSAPI" +msgstr "GSSAPI" + +#: ../gtk/parameters.ui.h:3 +msgid "SASL" +msgstr "SASL" + +#: ../gtk/parameters.ui.h:4 +msgid "default soundcard" +msgstr "لوحة الصوت الافتراضية" + +#: ../gtk/parameters.ui.h:5 +msgid "a sound card" +msgstr "لوحة الصوت" + +#: ../gtk/parameters.ui.h:6 +msgid "default camera" +msgstr "الكاميرا الافتراضية" + +#: ../gtk/parameters.ui.h:7 +msgid "CIF" +msgstr "CIF" + +#: ../gtk/parameters.ui.h:8 +msgid "Audio codecs" +msgstr "مرمازات الصوت" + +#: ../gtk/parameters.ui.h:9 +msgid "Video codecs" +msgstr "مرمازات الفيديو" + +#: ../gtk/parameters.ui.h:10 +msgid "C" +msgstr "C" + +#: ../gtk/parameters.ui.h:11 +msgid "SIP (UDP)" +msgstr "SIP (UDP)" + +#: ../gtk/parameters.ui.h:12 +msgid "SIP (TCP)" +msgstr "SIP (TCP)" + +#: ../gtk/parameters.ui.h:13 +msgid "SIP (TLS)" +msgstr "SIP (TLS)" + +#: ../gtk/parameters.ui.h:14 +msgid "Settings" +msgstr "الإعدادات" + +#: ../gtk/parameters.ui.h:15 +msgid "Set Maximum Transmission Unit:" +msgstr "حدِّد Maximum Transmission Unit :" + +#: ../gtk/parameters.ui.h:16 +msgid "Send DTMFs as SIP info" +msgstr "أرسِل الأرقام الهاتفية على هيئة SIP INFO" + +#: ../gtk/parameters.ui.h:17 +msgid "Use IPv6 instead of IPv4" +msgstr "استخدم IPv6 عوضا عن IPv4" + +#: ../gtk/parameters.ui.h:18 +msgid "Transport" +msgstr "النقل" + +#: ../gtk/parameters.ui.h:19 +msgid "Media encryption type" +msgstr "نوع وسيط التعمية" + +#: ../gtk/parameters.ui.h:20 +msgid "Video RTP/UDP:" +msgstr "فيديو RTP/UDP :" + +#: ../gtk/parameters.ui.h:21 +msgid "Audio RTP/UDP:" +msgstr "صوت RTP/UDP :" + +#: ../gtk/parameters.ui.h:22 +msgid "Fixed" +msgstr "ثابت" + +#: ../gtk/parameters.ui.h:23 +msgid "Media encryption is mandatory" +msgstr "وسيط التعمية إجباري" + +#: ../gtk/parameters.ui.h:24 +msgid "Tunnel" +msgstr "النفق" + +#: ../gtk/parameters.ui.h:25 +msgid "DSCP fields" +msgstr "حقول DSCP" + +#: ../gtk/parameters.ui.h:26 +msgid "SIP/TCP port" +msgstr "منفذ SIP/TCP" + +#: ../gtk/parameters.ui.h:27 +msgid "SIP/UDP port" +msgstr "منفذ SIP/UDP" + +#: ../gtk/parameters.ui.h:28 +msgid "Network protocol and ports" +msgstr "بروتوكول الشبكة والمنافذ" + +#: ../gtk/parameters.ui.h:29 +msgid "Direct connection to the Internet" +msgstr "الاتصال مباشر بالإنترنت" + +#: ../gtk/parameters.ui.h:30 +msgid "Behind NAT / Firewall (specify gateway IP )" +msgstr "وراء جدار ناري (حدِّد عنوان IP البوابة)" + +#: ../gtk/parameters.ui.h:31 +msgid "Behind NAT / Firewall (use STUN to resolve)" +msgstr "وراء جدار ناري (استخدم STUN)" + +#: ../gtk/parameters.ui.h:32 +msgid "Behind NAT / Firewall (use ICE)" +msgstr "وراء جدار ناري (استخدم ICE)" + +#: ../gtk/parameters.ui.h:33 +msgid "Behind NAT / Firewall (use uPnP)" +msgstr "وراء جدار ناري (استخدم uPnP)" + +#: ../gtk/parameters.ui.h:34 +msgid "Public IP address:" +msgstr "عنوان IP العمومي :" + +#: ../gtk/parameters.ui.h:35 +msgid "Stun server:" +msgstr "خادم STUN :" + +#: ../gtk/parameters.ui.h:36 +msgid "NAT and Firewall" +msgstr "إعدادات حول الجدار الناري" + +#: ../gtk/parameters.ui.h:37 +msgid "Network settings" +msgstr "إعدادات الشبكة" + +#: ../gtk/parameters.ui.h:38 +msgid "Ring sound:" +msgstr "صوت الجرس :" + +#: ../gtk/parameters.ui.h:39 +msgid "ALSA special device (optional):" +msgstr "عتاد ALSA الخصوصي (اختياري) :" + +#: ../gtk/parameters.ui.h:40 +msgid "Capture device:" +msgstr "جهاز الالتقاط :" + +#: ../gtk/parameters.ui.h:41 +msgid "Ring device:" +msgstr "جهاز الرنين :" + +#: ../gtk/parameters.ui.h:42 +msgid "Playback device:" +msgstr "جهاز السمع :" + +#: ../gtk/parameters.ui.h:43 +msgid "Enable echo cancellation" +msgstr "فعِّل إزالة الصدى" + +#: ../gtk/parameters.ui.h:44 +msgid "Audio" +msgstr "الصوت" + +#: ../gtk/parameters.ui.h:45 +msgid "Video input device:" +msgstr "جهاز إدخال الفيديو :" + +#: ../gtk/parameters.ui.h:46 +msgid "Prefered video resolution:" +msgstr "المقدار المُراد لدقة الفيديو :" + +#: ../gtk/parameters.ui.h:47 +msgid "Video output method:" +msgstr "طريقة إخراج الفيديو :" + +#: ../gtk/parameters.ui.h:48 +msgid "Video" +msgstr "الفيديو" + +#: ../gtk/parameters.ui.h:49 +msgid "Multimedia settings" +msgstr "إعدادات الوسائط المتعددة" + +#: ../gtk/parameters.ui.h:50 +msgid "This section defines your SIP address when not using a SIP account" +msgstr "هذه الفقرة تحدد عنوانك SIP إن كنت لا تستخدم حساب SIP" + +#: ../gtk/parameters.ui.h:51 +msgid "Your display name (eg: John Doe):" +msgstr "إسمك المعروض (مثلا : زيد عمرو) :" + +#: ../gtk/parameters.ui.h:52 +msgid "Your username:" +msgstr "إسم المستخدم لديك :" + +#: ../gtk/parameters.ui.h:53 +msgid "Your resulting SIP address:" +msgstr "عنوانك SIP :" + +#: ../gtk/parameters.ui.h:54 +msgid "Default identity" +msgstr "الهوية الافتراضية" + +#: ../gtk/parameters.ui.h:55 +msgid "Wizard" +msgstr "المرشد" + +#: ../gtk/parameters.ui.h:56 +msgid "Add" +msgstr "إضافة" + +#: ../gtk/parameters.ui.h:57 +msgid "Edit" +msgstr "حرر" + +#: ../gtk/parameters.ui.h:58 +msgid "Remove" +msgstr "أزل" + +#: ../gtk/parameters.ui.h:59 +msgid "Proxy accounts" +msgstr "حسابات الوكيل" + +#: ../gtk/parameters.ui.h:60 +msgid "Erase all passwords" +msgstr "احذف جميع كلمات السر" + +#: ../gtk/parameters.ui.h:61 +msgid "Privacy" +msgstr "الأمان" + +#: ../gtk/parameters.ui.h:62 +msgid "Manage SIP Accounts" +msgstr "إدارة حسابات SIP" + +#: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4 +msgid "Enable" +msgstr "فعِّل" + +#: ../gtk/parameters.ui.h:64 ../gtk/tunnel_config.ui.h:5 +msgid "Disable" +msgstr "إلغاء التفعيل" + +#: ../gtk/parameters.ui.h:65 +msgid "Codecs" +msgstr "المراميز" + +#: ../gtk/parameters.ui.h:66 +msgid "0 stands for \"unlimited\"" +msgstr "حدِّد 0 لعدم وضع أي حد" + +#: ../gtk/parameters.ui.h:67 +msgid "Upload speed limit in Kbit/sec:" +msgstr "حد سرعة الرفع بالكيلوبِتْ/الثانية :" + +#: ../gtk/parameters.ui.h:68 +msgid "Download speed limit in Kbit/sec:" +msgstr "حد سرعة التنزيل بالكيلوبِتْ/الثانية :" + +#: ../gtk/parameters.ui.h:69 +msgid "Enable adaptive rate control" +msgstr "فعِّل التحكم المتكيف مع الصبيب" + +#: ../gtk/parameters.ui.h:70 +msgid "" +"Adaptive rate control is a technique to dynamically guess the available " +"bandwidth during a call." +msgstr "التحكم المتكيف مع الصبيب هو تقنية لملائمة جودة الصوت والصورة بناءً على سعة قناة الاتصال المتاحة خلال المكالمة." + +#: ../gtk/parameters.ui.h:71 +msgid "Bandwidth control" +msgstr "إدارة سعة القناة" + +#: ../gtk/parameters.ui.h:72 +msgid "Codecs" +msgstr "المراميز" + +#: ../gtk/parameters.ui.h:73 +msgid "Language" +msgstr "اللغة" + +#: ../gtk/parameters.ui.h:74 +msgid "Show advanced settings" +msgstr "أظهر الإعدادات المتقدمة" + +#: ../gtk/parameters.ui.h:75 +msgid "Level" +msgstr "المستوى" + +#: ../gtk/parameters.ui.h:76 +msgid "User interface" +msgstr "واجهة المستخدم" + +#: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 +msgid "Server address:" +msgstr "عنوان الخادم :" + +#: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 +msgid "Authentication method:" +msgstr "طريقة التحقق من الهوية :" + +#: ../gtk/parameters.ui.h:80 +msgid "LDAP Account setup" +msgstr "تهيئة LDAP" + +#: ../gtk/parameters.ui.h:81 +msgid "LDAP" +msgstr "LDAP" + +#: ../gtk/parameters.ui.h:82 +msgid "Done" +msgstr "أغلق" + +#: ../gtk/buddylookup.ui.h:1 +msgid "Search contacts in directory" +msgstr "البحث عن جهات الاتصال في الدليل" + +#: ../gtk/buddylookup.ui.h:2 +msgid "Add to my list" +msgstr "الإضافة إلى قائمتي" + +#: ../gtk/buddylookup.ui.h:3 +msgid "Search somebody" +msgstr "البحث عن شخص" + +#: ../gtk/waiting.ui.h:1 +msgid "Linphone" +msgstr "لِنْفُونْ" + +#: ../gtk/waiting.ui.h:2 +msgid "Please wait" +msgstr "يُرجى الانتظار" + +#: ../gtk/dscp_settings.ui.h:1 +msgid "DSCP settings" +msgstr "إعدادات DSCP" + +#: ../gtk/dscp_settings.ui.h:2 +msgid "SIP" +msgstr "SIP" + +#: ../gtk/dscp_settings.ui.h:3 +msgid "Audio RTP stream" +msgstr "تدفق RTP الصوتي" + +#: ../gtk/dscp_settings.ui.h:4 +msgid "Video RTP stream" +msgstr "تدفق RTP المرئي" + +#: ../gtk/dscp_settings.ui.h:5 +msgid "Set DSCP values (in hexadecimal)" +msgstr "حدد قيم DSCP (بالنظام الست-عشري)" + +#: ../gtk/call_statistics.ui.h:1 +msgid "Call statistics" +msgstr "إحصاء المكالمات" + +#: ../gtk/call_statistics.ui.h:2 +msgid "Audio codec" +msgstr "مرمازات الصوت" + +#: ../gtk/call_statistics.ui.h:3 +msgid "Video codec" +msgstr "مرمازات الفيديو" + +#: ../gtk/call_statistics.ui.h:4 +msgid "Audio IP bandwidth usage" +msgstr "سعة القناة الصوتية" + +#: ../gtk/call_statistics.ui.h:5 +msgid "Audio Media connectivity" +msgstr "اتصالات الصوت" + +#: ../gtk/call_statistics.ui.h:6 +msgid "Video IP bandwidth usage" +msgstr "سعة قناة الفيديو" + +#: ../gtk/call_statistics.ui.h:7 +msgid "Video Media connectivity" +msgstr "اتصالات الفيديو" + +#: ../gtk/call_statistics.ui.h:8 +msgid "Round trip time" +msgstr "مدة الذهاب والإياب" + +#: ../gtk/call_statistics.ui.h:9 +msgid "Video resolution received" +msgstr "حجم الفيديو المستلَم" + +#: ../gtk/call_statistics.ui.h:10 +msgid "Video resolution sent" +msgstr "حجم الفيديو المرسَل" + +#: ../gtk/call_statistics.ui.h:11 +msgid "RTP profile" +msgstr "تشكيلة RTP" + +#: ../gtk/call_statistics.ui.h:12 +msgid "Call statistics and information" +msgstr "إحصاء المكالمات والمعلومات" + +#: ../gtk/tunnel_config.ui.h:1 +msgid "Configure VoIP tunnel" +msgstr "تهيئة نفق VoIP" + +#: ../gtk/tunnel_config.ui.h:2 +msgid "Host" +msgstr "المضيف" + +#: ../gtk/tunnel_config.ui.h:3 +msgid "Port" +msgstr "المنفذ" + +#: ../gtk/tunnel_config.ui.h:6 +msgid "Configure tunnel" +msgstr "تهيئة النفق" + +#: ../gtk/tunnel_config.ui.h:9 +msgid "Configure http proxy (optional)" +msgstr "تهيئة وكيل http (اختياري)" + +#: ../gtk/ldap.ui.h:1 +msgid "LDAP Settings" +msgstr "إعدادات LDAP" + +#: ../gtk/ldap.ui.h:6 +msgid "Use TLS Connection" +msgstr "استخدم TLS" + +#: ../gtk/ldap.ui.h:7 +msgid "Not yet available" +msgstr "غير متاح" + +#: ../gtk/ldap.ui.h:8 +msgid "Connection" +msgstr "الاتصال " + +#: ../gtk/ldap.ui.h:9 +msgid "Bind DN" +msgstr "ربط DN" + +#: ../gtk/ldap.ui.h:10 +msgid "Authname" +msgstr "إسم الهوية" + +#: ../gtk/ldap.ui.h:11 +msgid "Realm" +msgstr "النطاق" + +#: ../gtk/ldap.ui.h:12 +msgid "SASL" +msgstr "SASL" + +#: ../gtk/ldap.ui.h:13 +msgid "Base object:" +msgstr "الكائن الأساسي :" + +#: ../gtk/ldap.ui.h:15 +#, no-c-format +msgid "Filter (%s for name):" +msgstr "رشِّح (%s كإسم) :" + +#: ../gtk/ldap.ui.h:16 +msgid "Name Attribute:" +msgstr "خاصية الإسم :" + +#: ../gtk/ldap.ui.h:17 +msgid "SIP address attribute:" +msgstr "خاصية عنوان SIP :" + +#: ../gtk/ldap.ui.h:18 +msgid "Attributes to query:" +msgstr "الخاصيات المبحوث عنها :" + +#: ../gtk/ldap.ui.h:19 +msgid "Search" +msgstr "البحث" + +#: ../gtk/ldap.ui.h:20 +msgid "Timeout for search:" +msgstr "المهلة القصوى للبحث :" + +#: ../gtk/ldap.ui.h:21 +msgid "Max results:" +msgstr "العدد الأقصى للنتائج :" + +#: ../gtk/ldap.ui.h:22 +msgid "Follow Aliases" +msgstr "متابعة الكنية" + +#: ../gtk/ldap.ui.h:23 +msgid "Miscellaneous" +msgstr "متفرقات" + +#: ../gtk/ldap.ui.h:24 +msgid "ANONYMOUS" +msgstr "مجهول الهوية" + +#: ../gtk/ldap.ui.h:25 +msgid "SIMPLE" +msgstr "بسيط" + +#: ../gtk/ldap.ui.h:26 +msgid "DIGEST-MD5" +msgstr "DIGEST-MD5" + +#: ../gtk/ldap.ui.h:27 +msgid "NTLM" +msgstr "NTLM" + +#: ../gtk/config-uri.ui.h:1 +msgid "Specifying a remote configuration URI" +msgstr "تحديد عنوان URI التهيئة عن بعد" + +#: ../gtk/config-uri.ui.h:2 +msgid "" +"This dialog allows to set an http or https address when configuration is to be fetched at startup.\n" +"Please enter or modify the configuration URI below. After clicking OK, Linphone will restart automatically in order to fetch and take into account the new configuration. " +msgstr "يسمح لك مربع الحوار هذا بإعداد عنوان http أو https الذي من خلاله تود جلب التهيئة عند بدء البرنامج.\nأدخل العنوان أسفله. بعد تأكيد الأمر، ستجري إعادة تشغيل لِنْفُونْ تلقائيا من أجل جلب والأخذ بعين الاعتبار الإعدادات الحديثة." + +#: ../gtk/provisioning-fetch.ui.h:1 +msgid "Configuring..." +msgstr "تجري التهيئة..." + +#: ../gtk/provisioning-fetch.ui.h:2 +msgid "Please wait while fetching configuration from server..." +msgstr "رجاءً انتظر ريثما ينتهي من جلب الإعدادات من الخادم..." + +#: ../coreapi/linphonecore.c:1510 +msgid "Ready" +msgstr "جاهز" + +#: ../coreapi/linphonecore.c:2473 +msgid "Configuring" +msgstr "تجري التهيئة" + +#: ../coreapi/linphonecore.c:2638 +msgid "Looking for telephone number destination..." +msgstr "يجري البحث عن وجهة رقم الهاتف..." + +#: ../coreapi/linphonecore.c:2640 +msgid "Could not resolve this number." +msgstr "لم يتمكن من إيجاد هذا الرقم." + +#. must be known at that time +#: ../coreapi/linphonecore.c:2926 +msgid "Contacting" +msgstr "يتصل ب" + +#: ../coreapi/linphonecore.c:2931 +msgid "Could not call" +msgstr "لم يتمكن من الاتصال" + +#: ../coreapi/linphonecore.c:3081 +msgid "Sorry, we have reached the maximum number of simultaneous calls" +msgstr "آسف، وصل عدد المكالمات الآنية إلى حده الأقصى" + +#: ../coreapi/linphonecore.c:3240 +msgid "is contacting you" +msgstr "يتصل بك" + +#: ../coreapi/linphonecore.c:3241 +msgid " and asked autoanswer." +msgstr "ويطلب ردا تلقائيا." + +#: ../coreapi/linphonecore.c:3359 +msgid "Modifying call parameters..." +msgstr "يجري تعديل إعدادات المكالمة..." + +#: ../coreapi/linphonecore.c:3707 +msgid "Connected." +msgstr "متصل." + +#: ../coreapi/linphonecore.c:3732 +msgid "Call aborted" +msgstr "أُلغيت المكالمة" + +#: ../coreapi/linphonecore.c:3922 +msgid "Could not pause the call" +msgstr "لم يتمكن من توقيف المكالمة مؤقتا" + +#: ../coreapi/linphonecore.c:3926 +msgid "Pausing the current call..." +msgstr "وضع المكالمة قيد الانتظار..." + +#: ../coreapi/misc.c:438 +msgid "Stun lookup in progress..." +msgstr "يجري بحث STUN..." + +#: ../coreapi/misc.c:619 +msgid "ICE local candidates gathering in progress..." +msgstr "يجري جلب مرشَّحي ICE المحلين..." + +#: ../coreapi/friend.c:33 +msgid "Online" +msgstr "على الخط" + +#: ../coreapi/friend.c:36 +msgid "Busy" +msgstr "مشغول" + +#: ../coreapi/friend.c:39 +msgid "Be right back" +msgstr "سأعود" + +#: ../coreapi/friend.c:42 +msgid "Away" +msgstr "غائب" + +#: ../coreapi/friend.c:45 +msgid "On the phone" +msgstr "على الهاتف" + +#: ../coreapi/friend.c:48 +msgid "Out to lunch" +msgstr "أمام مائدة الطعام" + +#: ../coreapi/friend.c:51 +msgid "Do not disturb" +msgstr "لا تزعجني" + +#: ../coreapi/friend.c:54 +msgid "Moved" +msgstr "ذهبتُ" + +#: ../coreapi/friend.c:57 +msgid "Using another messaging service" +msgstr "استخدام خدمة أخرى للتراسل الفوري" + +#: ../coreapi/friend.c:60 +msgid "Offline" +msgstr "غير متصل" + +#: ../coreapi/friend.c:63 +msgid "Pending" +msgstr "قيد الانتظار" + +#: ../coreapi/friend.c:66 +msgid "Vacation" +msgstr "في عطلة" + +#: ../coreapi/friend.c:68 +msgid "Unknown status" +msgstr "حالة مجهولة" + +#: ../coreapi/proxy.c:319 +msgid "" +"The sip proxy address you entered is invalid, it must start with \"sip:\" " +"followed by a hostname." +msgstr "عنوان SIP الذي أدخلت غير صالح، يجب أن يبدأ ب \"sip:\" متبوعا بإسم النطاق." + +#: ../coreapi/proxy.c:325 +msgid "" +"The sip identity you entered is invalid.\n" +"It should look like sip:username@proxydomain, such as sip:alice@example.net" +msgstr "هوية SIP التي أدخلت غير صحيحة.\nيجب أن تشبه هذا النمط sip:username@proxydomain، مثلا sip:alice@example.net" + +#: ../coreapi/proxy.c:1377 +#, c-format +msgid "Could not login as %s" +msgstr "تعذر الولوج بالهوية %s" + +#: ../coreapi/callbacks.c:383 +msgid "Remote ringing." +msgstr "يرن الجرس عن بعد..." + +#: ../coreapi/callbacks.c:404 +msgid "Remote ringing..." +msgstr "يرن الجرس عن بعد..." + +#: ../coreapi/callbacks.c:414 +msgid "Early media." +msgstr "أخذ المكالمة مبكرا." + +#: ../coreapi/callbacks.c:475 +#, c-format +msgid "Call with %s is paused." +msgstr "المكاملة مع %s متوقفة." + +#: ../coreapi/callbacks.c:488 +#, c-format +msgid "Call answered by %s - on hold." +msgstr "يجيب %s عن المكالمة - في وضع الانتظار." + +#: ../coreapi/callbacks.c:498 +msgid "Call resumed." +msgstr "استُعيدت المكالمة." + +#: ../coreapi/callbacks.c:502 +#, c-format +msgid "Call answered by %s." +msgstr "أجاب عن المكالمة %s." + +#: ../coreapi/callbacks.c:525 +msgid "Incompatible, check codecs or security settings..." +msgstr "غير موائم، تحقق من المراميز أو إعدادات الأمان..." + +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "إعدادات الوسائط غير موائمة." + +#: ../coreapi/callbacks.c:560 +msgid "We have been resumed." +msgstr "استُأنِفت المكالمة." + +#. we are being paused +#: ../coreapi/callbacks.c:568 +msgid "We are paused by other party." +msgstr "وُقِّفت المكالمة مؤقتا من طرف آخر." + +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 +msgid "Call is updated by remote." +msgstr "حُدِّث الاتصال من البعيد." + +#: ../coreapi/callbacks.c:705 +msgid "Call terminated." +msgstr "أُنهيت المكالمة." + +#: ../coreapi/callbacks.c:733 +msgid "User is busy." +msgstr "المستخدم مشغول." + +#: ../coreapi/callbacks.c:734 +msgid "User is temporarily unavailable." +msgstr "المستخدم غير متاح مؤقتا." + +#. char *retrymsg=_("%s. Retry after %i minute(s)."); +#: ../coreapi/callbacks.c:736 +msgid "User does not want to be disturbed." +msgstr "لا يريد المستخدم أي إزعاج." + +#: ../coreapi/callbacks.c:737 +msgid "Call declined." +msgstr "تم تجاهل المكالمة." + +#: ../coreapi/callbacks.c:752 +msgid "Request timeout." +msgstr "انتهت مهلة الطلب." + +#: ../coreapi/callbacks.c:780 +msgid "Redirected" +msgstr "مُوجَّه" + +#: ../coreapi/callbacks.c:835 +msgid "Call failed." +msgstr "فشل الاتصال." + +#: ../coreapi/callbacks.c:913 +#, c-format +msgid "Registration on %s successful." +msgstr "تم التسجيل في %s بنجاح." + +#: ../coreapi/callbacks.c:914 +#, c-format +msgid "Unregistration on %s done." +msgstr "أُلغي التسجيل في %s ." + +#: ../coreapi/callbacks.c:932 +msgid "no response timeout" +msgstr "لا إجابة قبل انتهاء المهلة" + +#: ../coreapi/callbacks.c:935 +#, c-format +msgid "Registration on %s failed: %s" +msgstr "فَشِل التسجيل في %s: %s" + +#: ../coreapi/callbacks.c:942 +msgid "Service unavailable, retrying" +msgstr "خدمة غير متاحة، تجري الإعادة" + +#: ../coreapi/linphonecall.c:174 +#, c-format +msgid "Authentication token is %s" +msgstr "شارة التحقق من الهوية هي %s" + +#: ../coreapi/linphonecall.c:3020 +#, c-format +msgid "You have missed %i call." +msgid_plural "You have missed %i calls." +msgstr[0] "لم تفتك أي مكالمة." +msgstr[1] "فاتتك مكالمة واحدة." +msgstr[2] "فاتتك مكالمتان." +msgstr[3] "فاتتك %i مكالمات." +msgstr[4] "فاتتك %i مكالمة." +msgstr[5] "فاتتك %i مكالمة." + +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/cat-id-tbl.c b/po/cat-id-tbl.c deleted file mode 100644 index e69de29bb..000000000 diff --git a/po/cs.po b/po/cs.po index 78c993c32..f7b9c76f2 100644 --- a/po/cs.po +++ b/po/cs.po @@ -1,27 +1,19 @@ -# translation of linphone.po to cs_CZ -# This file is distributed under the same license as the linphone package. -# Copyright (C) 2009 Simon Morlat (msgids) -# Klara Cihlarova , 2005. -# Petr Pisar , 2006, 2007, 2008, 2009, 2010, 2011, 2013. -# -# XXX: Don't translate gtk-* messages. They will be replaced from GTK+ -# catalogue. -# -# On hold → odložen -# chat → diskuze -# Pause call → odložit hovor -# Resume call → obnovit hovor -# token → klíč -# Transfer → přepojit +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # +# Translators: +# Klara Cihlarova , 2005 +# Petr Pisar , 2006-2011,2013 msgid "" msgstr "" -"Project-Id-Version: linphone-3.5.99.0\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2013-05-01 09:55+0200\n" -"Last-Translator: Petr Pisar \n" -"Language-Team: Czech \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Czech (http://www.transifex.com/projects/p/linphone-gtk/" +"language/cs/)\n" "Language: cs\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -75,11 +67,6 @@ msgstr[0] "%i sekunda" msgstr[1] "%i sekundy" msgstr[2] "%i sekund" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "%s\t%s" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -89,14 +76,10 @@ msgstr "" "%s\tKvalita: %s\n" "%s\t%s\t" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" -msgstr "" -"%s\t\n" -"%s" +msgid "%s\t%s" +msgstr "%s\t%s" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" @@ -111,7 +94,7 @@ msgstr "Já" msgid "Couldn't find pixmap file: %s" msgstr "Nelze najít soubor s obrázkem: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "Neplatný sipový kontakt!" @@ -148,21 +131,14 @@ msgstr "" "c:\\Program Files\\Linphone)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Potvrzení" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "Průvodce nastavením účtu" +msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Hovor s %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -175,68 +151,66 @@ msgstr "" "do svého adresáře?\n" "Odpovíte-li ne, tato osobo bude dočasně blokována." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -"Prosím, zadejte heslo pro uživatele %s\n" -"v doméně %s:" -#: ../gtk/main.c:1376 +#: ../gtk/main.c:1283 msgid "Call error" msgstr "Chyba hovoru" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Hovor ukončen" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Příchozí hovor" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Odpovědět" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Odmítnout" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 msgid "Call paused" msgstr "Hovor odložen" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 #, c-format msgid "by %s" msgstr "kým: %s" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s navrhuje začít videohovor. Přijímáte?" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Odkaz na webovou stránku" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Lipnhone – internetový videofon" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (Výchozí)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "Byly jsme přepojeni na %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -244,7 +218,7 @@ msgstr "" "Na tomto počítači nebyla objevena žádná zvuková karta.\n" "Nebudete moci vytáčet a přijímat a zvukové hovory." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "Volný SIP videofon" @@ -302,9 +276,8 @@ msgid "Status" msgstr "Stav" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Min. rychlost (kb/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -322,93 +295,92 @@ msgstr "Zakázáno" msgid "Account" msgstr "Účet" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "angličtina" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "francouzština" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "švédština" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "italština" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "španělština" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "brazilská portugalština" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "polština" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "němčina" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "ruština" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "japonština" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "dánština" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "maďarština" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "čeština" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "čínština" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "tradiční čínština" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "norština" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "hebrejština" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "srbština" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Aby se projevil výběr nového jazyka, je nutné znovu spustit linphone." -# Media encryption type: -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "Žádné" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "ZRTP" @@ -455,11 +427,9 @@ msgstr[2] "Nalezeno %i kontaktů" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Vítejte!\n" -"Tento průvodce vám pomůže používat sipový účet při vašich hovorech." #: ../gtk/setupwizard.c:43 msgid "Create an account on linphone.org" @@ -556,40 +526,39 @@ msgstr "" "zaslali e-mailem.\n" "Pak se sem vraťte a stiskněte tlačítko Další." -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "Průvodce nastavením účtu" +msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "Vítejte v průvodci nastavení účtu" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Průvodce nastavením účtu" -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "Nastavit účet (krok 1/1)" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "Zadejte vaše sipové uživatelské jméno (krok 1/1)" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "Zadejte údaje o účtu (krok 1/2)" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "Ověření (krok 2/2)" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "Chyba" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "Ukončuje se" @@ -674,105 +643,100 @@ msgstr "" msgid "%.3f seconds" msgstr "%.3f sekund" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "Zavěsit" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "Volá se…" -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00:00:00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "Příchozí hovor" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "dobrá" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "průměrná" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "slabá" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "velmi slabá" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "příliš špatná" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "nedostupná" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "Zabezpečeno pomocí SRTP" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Zabezpečeno pomocí ZRTP – [ověřovací klíč: %s]" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "Nastavit na neověřeno" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "Nastavit na ověřeno" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "Probíhá konference" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "Probíhá hovor" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "Odložený hovor" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i:%02i:%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Hovor skončil." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "Probíhá přepojení" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "Přepojení dokončeno." -#: ../gtk/incall_view.c:809 +#: ../gtk/incall_view.c:831 msgid "Transfer failed." msgstr "Přepojení selhalo." -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "Obnovit" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "Odložit" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" @@ -781,7 +745,7 @@ msgstr "" "Nahrává se do\n" "%s %s" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "(Odloženo)" @@ -791,9 +755,9 @@ msgid "Please enter login information for %s" msgstr "Prosím, zadejte své přihlašovací jméno pro %s:" #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "Příchozí hovor od %s" +msgstr "" #: ../gtk/config-fetching.c:73 #, c-format @@ -817,32 +781,26 @@ msgid "Too loud" msgstr "" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"Vítejte!\n" -"Tento průvodce vám pomůže používat sipový účet při vašich hovorech." #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Zařízení pro nahrávání:" +msgstr "" #: ../gtk/audio_assistant.c:329 -#, fuzzy msgid "Recorded volume" -msgstr "Zdroj nahrávání:" +msgstr "" #: ../gtk/audio_assistant.c:333 msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Zařízení pro přehrávání:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -861,14 +819,12 @@ msgid "Let's start Linphone now" msgstr "" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "Průvodce" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "Průvodce účtem" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -947,9 +903,8 @@ msgid "_Options" msgstr "V_olby" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Konfigurace proxy a registrace" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -1036,27 +991,26 @@ msgid "Login information" msgstr "Informace o přihlášení" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "Vítejte!" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "Smazat" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "O Linphonu" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "© Belledonne Communications, 2010\n" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." msgstr "Internetový videofon používající standardní protokol SIP (RFC 3261)." #: ../gtk/about.ui.h:5 -#, fuzzy msgid "" "fr: Simon Morlat\n" "en: Simon Morlat and Delphine Perreau\n" @@ -1071,17 +1025,6 @@ msgid "" "hu: anonymous\n" "he: Eli Zaretskii \n" msgstr "" -"fr: Simon Morlat\n" -"en: Simon Morlat a Delphine Perreau\n" -"it: Alberto Zanoni \n" -"de: Jean-Jacques Sarton \n" -"sv: Daniel Nylander \n" -"es: Jesus Benitez \n" -"ja: YAMAGUCHI YOSHIYA \n" -"pt_BR: Rafael Caesar Lenzi \n" -"pl: Robert Nasiadek \n" -"cs: Petr Písař \n" -"hu: anonym\n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1156,9 +1099,8 @@ msgid "Registration duration (sec):" msgstr "Registrační období (s):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Směrování (volitelné):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1169,9 +1111,8 @@ msgid "Route (optional):" msgstr "Směrování (volitelné):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Přenos" +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1182,9 +1123,8 @@ msgid "Publish presence information" msgstr "Zveřejnit stav přítomnosti" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Povolit" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1226,7 +1166,7 @@ msgstr "Kodeky zvuku" msgid "Video codecs" msgstr "Kodeky obrazu" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "C" @@ -1274,7 +1214,6 @@ msgstr "Obrazový RTP/UDP:" msgid "Audio RTP/UDP:" msgstr "Zvukový RTP/UDP:" -# Port number #: ../gtk/parameters.ui.h:22 msgid "Fixed" msgstr "Stálý" @@ -1292,14 +1231,12 @@ msgid "DSCP fields" msgstr "Položky DSCP" #: ../gtk/parameters.ui.h:26 -#, fuzzy msgid "SIP/TCP port" -msgstr "SIP port" +msgstr "" #: ../gtk/parameters.ui.h:27 -#, fuzzy msgid "SIP/UDP port" -msgstr "SIP port" +msgstr "" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1310,9 +1247,8 @@ msgid "Direct connection to the Internet" msgstr "Přímé připojení do Internetu" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "Za NAT/firewallem (adresu brány zadejte níže)" +msgstr "" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" @@ -1379,9 +1315,8 @@ msgid "Prefered video resolution:" msgstr "Upřednostňované rozlišení obrazu:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Vstupní zařízení obrazu:" +msgstr "" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1504,29 +1439,22 @@ msgid "User interface" msgstr "Uživatelské rozhraní" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Adresa serveru:" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Selhání ověření totožnosti" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" +msgid "LDAP Account setup" msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Proxy účty" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "Hotovo" @@ -1551,9 +1479,8 @@ msgid "Please wait" msgstr "Prosím, čekejte" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Nastavení DSCP" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" @@ -1608,14 +1535,12 @@ msgid "Video resolution received" msgstr "" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "Upřednostňované rozlišení obrazu:" +msgstr "" #: ../gtk/call_statistics.ui.h:11 -#, fuzzy msgid "RTP profile" -msgstr "RTP vlastnosti" +msgstr "" #: ../gtk/call_statistics.ui.h:12 msgid "Call statistics and information" @@ -1641,84 +1566,21 @@ msgstr "Nastavit tunel" msgid "Configure http proxy (optional)" msgstr "Nastavit HTTP proxy (volitelné)" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "D" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "B" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "A" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Nastavení" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" msgstr "" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "UPnP není nedostupné" +msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Kodeky" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1729,14 +1591,12 @@ msgid "Authname" msgstr "" #: ../gtk/ldap.ui.h:11 -#, fuzzy msgid "Realm" -msgstr "doména:" +msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Zvuk" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1752,18 +1612,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "SIP adresa" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Hledat někoho" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1778,9 +1636,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Různé" +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1811,86 +1668,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Připojuje se…" +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Připraven." -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Potvrzení" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Vyhledává se umístění čísla…" -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Toto číslo nelze vyhledat." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Navazuje se spojení" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "Nelze volat" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Je nám líto, ale byl dosažen maximální počet současných hovorů." -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "vás volá" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr " a požaduje automatickou zvednutí." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "." - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "Upravují se parametry hovoru…" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Připojeno." -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "Hovor přerušen" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "Hovor nebylo možné odložit" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "Současný hovor se odkládá…" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "Hledá se adresa pomocí STUN…" -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "Shromažďují se místní kandidáti ICE…" @@ -1939,15 +1786,14 @@ msgid "Pending" msgstr "Čekám" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Délka" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Neznámá chyba" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1955,7 +1801,7 @@ msgstr "" "Adresa SIP proxy, kterou jste zadali, není platná. Musí začínat na „sip:“ a " "pak musí následovat jméno stroje." -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1963,124 +1809,126 @@ msgstr "" "SIP identita, kterou jste zadali, není platná.\n" "Měla by mít tvar sip:uživatel@proxydoména, například sip:alice@example.net" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "Nelze se přihlásit jako %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "Vyzvání na druhé straně." -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "Vyzvání na druhé straně…" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "Časná média." -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "Hovor s %s je odložen." -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "Hovor přijat kým: %s – odložen." -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "Hovor obnoven." -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "Hovor přijat kým: %s." -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "Není slučitelné. Zkontrolujte nastavení kodeků a zabezpečení…" -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "Neslučitelné parametry médií." + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "Byli jsme obnoveni." -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "Byli jsme odloženi protistranou." -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "Hovor byl aktualizován protistranou." -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Hovor ukončen." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Uživatel je zaneprázdněn." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Uživatel je dočasně nedostupný." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "Uživatel si nepřeje být rušen." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Volání odmítnuto." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "Přesměrováno" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "Neslučitelné parametry médií." - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "Volání se nezdařilo." -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Registrace na %s byla úspěšná." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "Odregistrování z %s hotovo." -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "odpověď nedorazila včas" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrace na %s selhala: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 +#: ../coreapi/linphonecall.c:174 #, c-format msgid "Authentication token is %s" msgstr "Klíč k ověření totožnosti je %s" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." @@ -2088,898 +1936,33 @@ msgstr[0] "Máte %i zmeškaný hovor." msgstr[1] "Máte %i zmeškané hovory." msgstr[2] "Máte %i zmeškaných hovorů." -#~ msgid "aborted" -#~ msgstr "přerušen" - -#~ msgid "completed" -#~ msgstr "dokončen" - -#~ msgid "missed" -#~ msgstr "promeškán" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s v %s\n" -#~ "Od: %s\n" -#~ "Pro: %s\n" -#~ "Stav: %s\n" -#~ "Délka: %i min %i s\n" - -#~ msgid "Outgoing call" -#~ msgstr "Odchozí hovor" - -#~ msgid "No response." -#~ msgstr "Žádná odpověď." - -#~ msgid "Protocol error." -#~ msgstr "Chyba protokolu." - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Špatně zadaná SIP adresa. Adresa má mít tento formát " - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Váš počítač používá zvukový ovladač ALSA. Jde o nejlepší\n" -#~ "volbu. Linphone však potřebuje ke své práci modul emulace\n" -#~ "oss, který chybí. Prosím zadejte jako uživatel root příkaz\n" -#~ "'modprobe snd-pcm-oss', kterým modul zavede." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Váš počítač používá zvukový ovladač ALSA. Jde o nejlepší\n" -#~ "volbu. Linphone však potřebuje ke své práci modul mixer emulace\n" -#~ "oss, který chybí. Prosím zadejte jako uživatel root příkaz\n" -#~ "'modprobe snd-mixer-oss', kterým modul zavede." - -#~ msgid "by %s" -#~ msgstr "kým: %s" - -#~ msgid "Keypad" -#~ msgstr "Klávesnice" - -#~ msgid "Chat with %s" -#~ msgstr "Diskuze s %s" - -#~ msgid "Please choose a username:" -#~ msgstr "Prosím, vyberte si uživatelské jméno:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "Zjišťuji, zda-li je „%s“ přípustné…" - -#~ msgid "Please wait..." -#~ msgstr "Prosím, čekejte…" - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "Je nám líto, ale toto jméno již existuje. Prosím, zvolte jiné." - -#~ msgid "Ok !" -#~ msgstr "V pořádku!" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "Chyba při komunikaci. Prosím, zkuste to později." - -#~ msgid "Choosing a username" -#~ msgstr "Výběr uživatelského jména" - -#~ msgid "Verifying" -#~ msgstr "Ověřování" - -#~ msgid "Creating your account" -#~ msgstr "Vytváření účtu" - -#~ msgid "Now ready !" -#~ msgstr "Připraveno!" - -#~ msgid "Enable video" -#~ msgstr "Zapnout video" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "" -#~ "Zadejte uživatelské jméno, telefonní číslo nebo plnou sipovou adresu" - -#~ msgid "Lookup:" -#~ msgstr "Hledat:" - -#~ msgid "in" -#~ msgstr "ve" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "Zaregistrovat se do\n" -#~ "virtuální sítě FONICS!" - -#~ msgid "We are being paused..." -#~ msgstr "Jsme odkládáni…" - -#~ msgid "No common codecs" -#~ msgstr "Žádný společný formát" - -#~ msgid "Register at startup" -#~ msgstr "Zaregistrovat při spuštění" - -#~ msgid "Windows" -#~ msgstr "Okna" - -#~ msgid "" -#~ "Pause all calls\n" -#~ "and answer" -#~ msgstr "" -#~ "Odložit všechny hovory\n" -#~ "a odpovědět" - -#~ msgid "Unmute" -#~ msgstr "Nahlas" - -#~ msgid "Contact list" -#~ msgstr "Seznam kontaktů" - -#~ msgid "Audio & video" -#~ msgstr "Zvuk a obraz" - -#~ msgid "Audio only" -#~ msgstr "Pouze zvuk" - -#~ msgid "Duration:" -#~ msgstr "Délka:" - -#~ msgid "_Call history" -#~ msgstr "_Historie volání" - -#~ msgid "_Linphone" -#~ msgstr "_Linphone" - -#~ msgid "Sorry, you have to pause or stop the current call first !" -#~ msgstr "Je nám líto, ale nejprve musíte hovor odložit nebo ukončit!" - -#~ msgid "There is already a call in process, pause or stop it first." -#~ msgstr "Již probíhá hovor, nejprve jej odložte nebo ukončete." - -#~ msgid "ITU-G.711 alaw encoder" -#~ msgstr "Kodér a-law ITU-G.711" - -#~ msgid "ITU-G.711 alaw decoder" -#~ msgstr "Dekodér a-law ITU-G.711" - -#~ msgid "Alsa sound source" -#~ msgstr "Zdroj zvuku ALSA" - -#~ msgid "Alsa sound output" -#~ msgstr "Zvukový výstup ALSA" - -#~ msgid "Sound capture filter for MacOS X Audio Queue Service" -#~ msgstr "Filtr zachytávání zvuku přes MacOS X službu zvukové fronty" - -#~ msgid "Sound playback filter for MacOS X Audio Queue Service" -#~ msgstr "Filtr přehrávání zvuku přes MacOS X službu zvukové fronty" - -#~ msgid "DTMF generator" -#~ msgstr "Generátor DTMF" - -#~ msgid "The GSM full-rate codec" -#~ msgstr "Kodek plnopásmového GSM" - -#~ msgid "The GSM codec" -#~ msgstr "GSM kodek" - -#~ msgid "Sound capture filter for MacOS X Audio Unit" -#~ msgstr "Filtr zachytávání zvuku přes MacOS X ovladač Audio Unit" - -#~ msgid "Sound playback filter for MacOS X Audio Unit" -#~ msgstr "Filtr přehrávání zvuku přes MacOS X ovladač Core Audio" - -#~ msgid "A filter to make conferencing" -#~ msgstr "Filtr pro vytváření konferencí" - -#~ msgid "Raw files and wav reader" -#~ msgstr "Čtení syrových souborů a souborů WAV" - -#~ msgid "Wav file recorder" -#~ msgstr "Nahrávání do souborů WAV" - -#~ msgid "A filter that send several inputs to one output." -#~ msgstr "Filtr, který směšuje několik vstupů do jednoho výstupu." - -#~ msgid "RTP output filter" -#~ msgstr "Filtr RTP výstupu" - -#~ msgid "RTP input filter" -#~ msgstr "Filtr RTP vstupu" - -#~ msgid "The free and wonderful speex codec" -#~ msgstr "Svobodný a úžasný kodek speex" - -#~ msgid "A filter that controls and measure sound volume" -#~ msgstr "Filtr, který měří a řídí hlasitost zvuku" - -#~ msgid "A video4linux compatible source filter to stream pictures." -#~ msgstr "Zdrojový filtr kompatibilní s Video4Linux proudující obrázky." - -#~ msgid "A filter to grab pictures from Video4Linux2-powered cameras" -#~ msgstr "Filtr zachytávající obrázky z Video4Linux2 kamer" - -#~ msgid "A filter that outputs a static image." -#~ msgstr "Filtr, který vydává nehybný obrázek." - -#~ msgid "A pixel format converter" -#~ msgstr "Převodník formátu pixelů" - -#~ msgid "A video size converter" -#~ msgstr "Převaděč velikosti videa" - -#~ msgid "a small video size converter" -#~ msgstr "Převaděč velikosti malých videí" - -#~ msgid "Echo canceller using speex library" -#~ msgstr "Potlačení ozvěny prostřednictvím knihovny speex" - -#~ msgid "A filter that reads from input and copy to its multiple outputs." -#~ msgstr "Filtr, který čte vstup a kopíruje ho více výstupů." - -#~ msgid "The theora video encoder from xiph.org" -#~ msgstr "Kodér videa do theory od xiph.org" - -#~ msgid "The open-source and royalty-free 'theora' video codec from xiph.org" -#~ msgstr "" -#~ "Kodek pro video „theora“ od xiph.org, který má otevřený zdrojový kód a je " -#~ "prostý licenčních poplatků" - -#~ msgid "The theora video decoder from xiph.org" -#~ msgstr "Dekodér theora videa od xiph.org" - -#~ msgid "ITU-G.711 ulaw encoder" -#~ msgstr "Kodér µ-law ITU-G.711" - -#~ msgid "ITU-G.711 ulaw decoder" -#~ msgstr "Dekodér µ-law ITU-G.711" - -#~ msgid "A H.263 decoder using ffmpeg library" -#~ msgstr "Dekodér H.263 používající knihovnu ffmpeg" - -#~ msgid "A MPEG4 decoder using ffmpeg library" -#~ msgstr "Dekodér MPEG4 používající knihovnu ffmpeg" - -#~ msgid "A RTP/JPEG decoder using ffmpeg library" -#~ msgstr "Dekodér RTP/JPEG používající knihovnu ffmpeg" - -#~ msgid "A MJPEG decoder using ffmpeg library" -#~ msgstr "Dekodér MPEG používající knihovnu ffmpeg" - -#~ msgid "A snow decoder using ffmpeg library" -#~ msgstr "Dekodér snow používající knihovnu ffmpeg" - -#~ msgid "A video H.263 encoder using ffmpeg library." -#~ msgstr "Kodér H.263 používající knihovnu ffmpeg." - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library. It is compliant with old " -#~ "RFC2190 spec." -#~ msgstr "" -#~ "Kodér H.263 videa používající knihovnu ffmpeg. Vyhovuje staré specifikaci " -#~ "RFC 2190." - -#~ msgid "A video MPEG4 encoder using ffmpeg library." -#~ msgstr "Kodér MPEG4 videa používající knihovnu ffmpeg." - -#~ msgid "A video snow encoder using ffmpeg library." -#~ msgstr "Kodér snow videa používající knihovnu ffmpeg." - -#~ msgid "A RTP/MJPEG encoder using ffmpeg library." -#~ msgstr "Kodér RTP/MJPEG používající knihovnu ffmpeg." - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library, compliant with old RFC2190 " -#~ "spec." -#~ msgstr "" -#~ "Kodér H.263 videa používající knihovnu ffmpeg, vyhovuje staré specifikaci " -#~ "RFC 2190." - -#~ msgid "" -#~ "The snow codec is royalty-free and is open-source. \n" -#~ "It uses innovative techniques that makes it one of most promising video " -#~ "codec. It is implemented within the ffmpeg project.\n" -#~ "However it is under development, quite unstable and compatibility with " -#~ "other versions cannot be guaranteed." -#~ msgstr "" -#~ "Kodek snow není zatížen poplatky a má otevřený zdrojový kód.\n" -#~ "Využívá průkopnické techniky, které jej činí jedním z nejslibnějších " -#~ "video kodeků. Je implementován v projektu ffmpeg.\n" -#~ "Avšak stále se vyvíjí, je trochu nestabilní a kompatibilita s ostatními " -#~ "verzemi není zaručena." - -#~ msgid "A MJPEG encoder using ffmpeg library." -#~ msgstr "Kodér MJPEG používající knihovnu ffmpeg." - -#~ msgid "A SDL-based video display" -#~ msgstr "Zobrazování videa přes SDL" - -#~ msgid "A video4windows compatible source filter to stream pictures." -#~ msgstr "Zdrojový filtr kompatibilní s video4windows proudující obrázky." - -#~ msgid "A video for windows (vfw.h) based source filter to grab pictures." -#~ msgstr "" -#~ "Zdrojový filtr založený na videu pro windows (vwf.h) pro zachytávání " -#~ "obrázků." - -#~ msgid "" -#~ "A filter that trashes its input (useful for terminating some graphs)." -#~ msgstr "" -#~ "Filtr, který zahazuje svůj vstup (užitečné na zakončení některých grafů)." - -#~ msgid "Parametric sound equalizer." -#~ msgstr "Parametrický ekvalizér zvuku." - -#~ msgid "A webcam grabber based on directshow." -#~ msgstr "Snímač kamer postavený na directshow." - -#~ msgid "A video display based on windows DrawDib api" -#~ msgstr "Zobrazovaní videa přes API Windows DrawDib" - -#~ msgid "A filter that mixes down 16 bit sample audio streams" -#~ msgstr "Filtr, který smísí 16b vzorkované zvukové proudy" - -#~ msgid "A filter that converts from mono to stereo and vice versa." -#~ msgstr "Filtr, který převádí mono na stereo a obráceně." - -#~ msgid "Inter ticker communication filter." -#~ msgstr "Komunikační filtr mezitiku." - -#~ msgid "A display filter sending the buffers to draw to the upper layer" -#~ msgstr "Zobrazovací filtr odesílající buffery na vykreslení do vyšší vrstvy" - -#~ msgid "Sound capture filter for MacOS X Audio Unit Service" -#~ msgstr "Filtr zachytávání zvuku přes MacOS X službu Audio Unit" - -#~ msgid "Sound playback filter for MacOS X Audio Unit Service" -#~ msgstr "Filtr přehrávání zvuku přes MacOS X službu Audio Unit" - -#~ msgid "A video display using X11+Xv" -#~ msgstr "Zobrazovaní videa pomocí X11+Xv" - -#~ msgid "Sound capture filter for Android" -#~ msgstr "Zvukový zachytávací filtr pro Android" - -#~ msgid "Sound playback filter for Android" -#~ msgstr "Zvukový přehrávací filtr pro Android" - -#~ msgid "A filter that captures Android video." -#~ msgstr "Filtr, který zachytává obraz za Androidu." - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "Zdá se, že váš počítač je připojen do IPv6 sítě. Standardně linphone " -#~ "používá pouze IPv4. Prosím, změňte nastavení programu, pokud chcete " -#~ "používat IPv6." - -#~ msgid "Call answered - connected." -#~ msgstr "Hovoř přijat – spojen." - -#~ msgid "Show debug messages" -#~ msgstr "Zobrazit ladicí zprávy" - -#~ msgid "Start call" -#~ msgstr "Zahájit hovor" - -#~ msgid "_Modes" -#~ msgstr "Reži_my" - -#~ msgid "Created by Simon Morlat\n" -#~ msgstr "Vytvořil Simon Morlat\n" - -#~ msgid "Accept" -#~ msgstr "Přijmout" - -#~ msgid "Incoming call from" -#~ msgstr "Příchozí hovor od" - -#~ msgid "Linphone - Incoming call" -#~ msgstr "Linphone – Příchozí hovor" - -#~ msgid "" -#~ "Audio codecs\n" -#~ "Video codecs" -#~ msgstr "" -#~ "Kodeky zvuku\n" -#~ "Kodeky obrazu" - -#~ msgid "default soundcard\n" -#~ msgstr "implicitní zvuková karta\n" - -#~ msgid "" -#~ "Remote end seems to have disconnected, the call is going to be closed." -#~ msgstr "Vzdálený konec se asi odpojil, hovor bude ukončen." - -#~ msgid "Sorry, having multiple simultaneous calls is not supported yet !" -#~ msgstr "Promiňte, vedení více současných hovorů není podporováno!" - -#~ msgid "Digits" -#~ msgstr "Číslice" - -#~ msgid "Main view" -#~ msgstr "Hlavní zobrazení" - -#~ msgid "No nat/firewall address supplied !" -#~ msgstr "Žádná adresa NATu/firewallu nebyla zadána!" - -#~ msgid "Invalid nat address '%s' : %s" -#~ msgstr "Neplatná adresa NATu '%s': '%s" - -#~ msgid "Could not reach destination." -#~ msgstr "Cíl je nedostupný." - -#~ msgid "Request Cancelled." -#~ msgstr "Dotaz přerušen." - -#~ msgid "Bad request" -#~ msgstr "Chybný dotaz" - -#~ msgid "User cannot be found at given address." -#~ msgstr "Uživatele nelze na dané adrese zastihnout." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "Vzdálený uživatel nemá podporu pro žádný z navržených kodeků." - -#~ msgid "Timeout." -#~ msgstr "Vypršení časového limitu." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Vzdálený počítač byl nalezen, ale odmítl připojení." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "Uživatel je nedostupný, ale navrhuje tyto alternativní\n" -#~ "setkání:" - -#~ msgid "Gone" -#~ msgstr "Pryč" - -#~ msgid "Waiting for Approval" -#~ msgstr "Čekám na schválení" - -#~ msgid "Be Right Back" -#~ msgstr "Na chvíli pryč" - -#~ msgid "On The Phone" -#~ msgstr "Na příjmu" - -#~ msgid "Out To Lunch" -#~ msgstr "Na obědě" - -#~ msgid "Closed" -#~ msgstr "Zavřeno" - -#~ msgid "Unknown" -#~ msgstr "Stav není znám" - -#~ msgid "Bresilian" -#~ msgstr "brazilská portugalština" - -#~ msgid "_View" -#~ msgstr "_Zobrazit" - -#~ msgid "A video for macosx compatible source filter to stream pictures." -#~ msgstr "Zdrojový filtr kompatibilní s MacOS X videem proudující obrázky." - -#~ msgid "" -#~ "Show All\n" -#~ "Show Online" -#~ msgstr "" -#~ "Zobrazovat vše\n" -#~ "Zobrazovat připojené" - -#~ msgid "Display filters" -#~ msgstr "Filtry pro zobrazení" - -#~ msgid "I'm not behing a firewall" -#~ msgstr "Nejsem za firewallem" - -#~ msgid "I'm behind a firewall, use supplied public IP address" -#~ msgstr "Jsem za firewallem, použij zadanou veřejnou IP adresu" - -#~ msgid "Use the supplied stun server above and do as best as possible" -#~ msgstr "Použij výše zadaný STUN server a snaž se, jak nejlépe umíš" - -#~ msgid "Go" -#~ msgstr "Soubor" - -#~ msgid "Shows calls" -#~ msgstr "Zobrazit volání" - -#~ msgid "Exit" -#~ msgstr "Ukončit" - -#~ msgid "..." -#~ msgstr "…" - -#~ msgid "Proxy to use:" -#~ msgstr "Proxy:" - -#~ msgid "" -#~ "Call or\n" -#~ "answer" -#~ msgstr "" -#~ "Volat nebo\n" -#~ "přijmout" - -#~ msgid "" -#~ "Hangup\n" -#~ "or refuse" -#~ msgstr "" -#~ "Zavěsit nebo\n" -#~ "odmítnout" - -#~ msgid "Or chat !" -#~ msgstr "Nebo poslat zprávu!" - -#~ msgid "Show more..." -#~ msgstr "Zobrazit více…" - -#~ msgid "Playback level:" -#~ msgstr "Úroveň přehrávání:" - -#~ msgid "Recording level:" -#~ msgstr "Úroveň nahrávání:" - -#~ msgid "Ring level:" -#~ msgstr "Úroveň vyzvánění:" - -#~ msgid "Controls" -#~ msgstr "Ovládání" - -#~ msgid "Reachable" -#~ msgstr "Dosažitelný" - -#~ msgid "Busy, I'll be back in " -#~ msgstr "Mám práci, jsem zpět za " - -#~ msgid "The other party will be informed that you'll be back in X minutes" -#~ msgstr "Druhá strana bude informována, že se vrátíte za X minut" - -#~ msgid "mn" -#~ msgstr "min" - -#~ msgid "Moved temporarily" -#~ msgstr "Dočasně mimo" - -#~ msgid "Alternative service" -#~ msgstr "Alternativní služba" - -#~ msgid "URL:" -#~ msgstr "URL:" - -#~ msgid "Presence" -#~ msgstr "Přítomnost" - -#~ msgid "Press digits to send DTMFs." -#~ msgstr "Zadejte čísla pro zaslání DTMF." - -#~ msgid "" -#~ " 3\n" -#~ "def" -#~ msgstr "" -#~ " 3\n" -#~ "def" - -#~ msgid "" -#~ " 2\n" -#~ "abc" -#~ msgstr "" -#~ " 2\n" -#~ "abc" - -#~ msgid "" -#~ " 4\n" -#~ "ghi" -#~ msgstr "" -#~ " 4\n" -#~ "ghi" - -#~ msgid "" -#~ " 5\n" -#~ "jkl" -#~ msgstr "" -#~ " 5\n" -#~ "jkl" - -#~ msgid "" -#~ " 6\n" -#~ "mno" -#~ msgstr "" -#~ " 6\n" -#~ "mno" - -#~ msgid "" -#~ " 7\n" -#~ "pqrs" -#~ msgstr "" -#~ " 7\n" -#~ "pqrs" - -#~ msgid "" -#~ " 8\n" -#~ "tuv" -#~ msgstr "" -#~ " 8\n" -#~ "tuv" - -#~ msgid "" -#~ " 9\n" -#~ "wxyz" -#~ msgstr "" -#~ " 9\n" -#~ "wxyz" - -#~ msgid "DTMF" -#~ msgstr "DTMF" - -#~ msgid "My online friends" -#~ msgstr "Přátelé online" - -#~ msgid "" -#~ "C: 2001\n" -#~ "Made in Old Europe" -#~ msgstr "" -#~ "© 2001\n" -#~ "Vyrobeno ve Staré Dobré Evropě" - -#~ msgid "" -#~ "Linphone is a web-phone.\n" -#~ "It is compatible with SIP and RTP protocols." -#~ msgstr "" -#~ "Linphone je program pro IP telefonii.\n" -#~ "Je kompatibilní s protokoly SIP a RTP." - -#~ msgid "http://www.linphone.org" -#~ msgstr "http://www.linphone.org/" - -#~ msgid "Use IPv6 network (if available)" -#~ msgstr "Použít IPv6 síť (je-li dostupná)" - -#~ msgid "" -#~ "Toggle this if you are on an ipv6 network and you wish linphone to use it." -#~ msgstr "" -#~ "Jestliže jste v síti podporující IPv6 protokol a chcete-li, aby jej " -#~ "linphone používal, zapněte tuto volbu." - -#~ msgid "Global" -#~ msgstr "Obecné" - -#~ msgid "" -#~ "These options is only for users in a private network, behind a gateway. " -#~ "If you are not in this situation, then leave this empty." -#~ msgstr "" -#~ "Tato volba je určena pouze pro uživatele v intranetu za firewallem. Pokud " -#~ "to není váš případ, nevyplňujte." - -#~ msgid "No firewall" -#~ msgstr "Bez firewallu" - -#~ msgid "Use this STUN server to guess firewall address :" -#~ msgstr "Pro odhad veřejné adresy použít tento STUN server:" - -#~ msgid "Specify firewall address manually:" -#~ msgstr "Veřejná adresa firewallu:" - -#~ msgid "NAT traversal options (experimental)" -#~ msgstr "Volby průchodu NATem (experimentální)" - -#~ msgid "Number of buffered miliseconds (jitter compensation):" -#~ msgstr "Velikosti vyrovnávací fronty v milisekundách (potlačení rozptylu):" - -#~ msgid "RTP port used for audio:" -#~ msgstr "RTP port pro zvuk:" - -#~ msgid "Use SIP INFO message instead of RTP rfc2833 for DTMF transmitting" -#~ msgstr "Místo RTP rfc2833 použít pro DTMF přenos SIP INFO zprávu" - -#~ msgid "RTP-RFC2833 is the recommended way." -#~ msgstr "Doporučeno je RTP-RFC2833." - -#~ msgid "Other" -#~ msgstr "Ostatní" - -#~ msgid "micro" -#~ msgstr "mikrofon" - -#~ msgid "Enable echo-canceler (cancels the echo heard by the remote party)" -#~ msgstr "Potlačit ozvěnu (projeví se na druhém konci)" - -#~ msgid "Choose file" -#~ msgstr "Vyberte soubor" - -#~ msgid "Listen" -#~ msgstr "Test" - -#~ msgid "Run sip user agent on port:" -#~ msgstr "Spustit uživatelského agenta SIP na portu:" - -#~ msgid "It is strongly recommended to use port 5060." -#~ msgstr "Je doporučeno používat port 5060." - -#~ msgid "@" -#~ msgstr "@" - -#~ msgid "Identity" -#~ msgstr "Identita" - -#~ msgid "Add proxy/registrar" -#~ msgstr "Přidat proxy/registraci" - -#~ msgid "Clear all stored authentication information (username,password...)" -#~ msgstr "Vyprázdnit všechny ověřovací informace (uživatelské jméno, heslo…)" - -#~ msgid "List of audio codecs, in order of preference:" -#~ msgstr "Seznam audio kodeků podle preference:" - -#~ msgid "" -#~ "Note: Codecs in red are not usable regarding to your connection type to " -#~ "the internet." -#~ msgstr "" -#~ "Poznámka: Kodeky označené červeně nelze u vašeho typu připojení použít." - -#~ msgid "No information availlable" -#~ msgstr "Nejsou dostupné žádné informace" - -#~ msgid "Codec information" -#~ msgstr "Informace o kodeku" - -#~ msgid "Address Book" -#~ msgstr "Adresář" - -#~ msgid "Select" -#~ msgstr "Vybrat" - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you to contact him " -#~ "using the following alternate ressource:" -#~ msgstr "" -#~ "Uživatel je momentálně nedostupný, ale navrhuje tyto alternativní formy " -#~ "kontaktu:" - -#~ msgid "None." -#~ msgstr "Žádné." - -#~ msgid "Send registration:" -#~ msgstr "Odeslat registraci:" - -#~ msgid "Name:" -#~ msgstr "Jméno:" - -#~ msgid "Subscribe policy:" -#~ msgstr "Pravidlo přihlášení:" - -#~ msgid "Send subscription (see person's online status)" -#~ msgstr "Odeslat přihlášení (podle online stavu osoby)" - -#~ msgid "New incoming subscription" -#~ msgstr "Nové příchozí přihlášení" - -#~ msgid "You have received a new subscription..." -#~ msgstr "Obdrželi jste nové přihlášení…" - -#~ msgid "Refuse" -#~ msgstr "Odmítnout" - -#~ msgid "Authentication required for realm" -#~ msgstr "pro doménu je vyžadováno ověření" - -#~ msgid "userid:" -#~ msgstr "ID uživatele:" - -#~ msgid "Text:" -#~ msgstr "Text:" - -#~ msgid "The caller asks for resource reservation. Do you agree ?" -#~ msgstr "Volající žádá o rezervaci zdrojů. Souhlasíte?" - -#~ msgid "" -#~ "The caller doesn't use resource reservation. \t\t\t\t\tDo you wish to " -#~ "continue anyway ?" -#~ msgstr "" -#~ "Volající nepoužívá rezervaci zdrojů. \t\t\t\t\tChcete přesto pokračovat?" - -#~ msgid "linphone - receiving call from %s" -#~ msgstr "linphone – příchozí hovor z %s" - -#~ msgid "" -#~ "You have received a subscription from %s.This means that this person " -#~ "wishes to be notified of your presence information (online, busy, " -#~ "away...).\n" -#~ "Do you agree ?" -#~ msgstr "" -#~ "Obdrželi jste přihlášení od %s. Znamená to, že si tato osoba přeje být " -#~ "informována o vašem stavu přítomnosti (online, zaneprázdněn, pryč…).\n" -#~ "Souhlasíte?" - -#~ msgid "Authentication required for realm %s" -#~ msgstr "Pro doménu %s je vyžadováno ověření" - -#~ msgid "Wait" -#~ msgstr "Zdržet" - -#~ msgid "Deny" -#~ msgstr "Odmítnout" - -#~ msgid "Bad sip address: a sip address looks like sip:user@domain" -#~ msgstr "Špatně zadaná SIP adresa: SIP adresa má tvar sip:uživatel@doména" - -#~ msgid "Stun lookup done..." -#~ msgstr "STUN vyhledávání dokončeno…" - -#~ msgid "enter sip uri here" -#~ msgstr "Sem zadejte SIP URI" - -#~ msgid "User manual" -#~ msgstr "Uživatelská příručka" - -#~ msgid "Ring sound selection" -#~ msgstr "Výběr zvonění" - -#~ msgid "Communication ended." -#~ msgstr "Komunikace ukončena." - -#~ msgid "Firewall 's external ip address (in dot notations):" -#~ msgstr "Vnější IP adresa firewallu (v tečkové notaci):" - -#~ msgid "Index" -#~ msgstr "Rejstřík" - -#~ msgid "28k modem" -#~ msgstr "28k modem" - -#~ msgid "56k modem" -#~ msgstr "56k modem" - -#~ msgid "64k modem (numeris)" -#~ msgstr "64k modem" - -#~ msgid "ADSL or Cable modem" -#~ msgstr "ADSL nebo kabelový modem" - -#~ msgid "Ethernet or equivalent" -#~ msgstr "Ethernet nebo podobný" - -#~ msgid "Connection type:" -#~ msgstr "Typ připojení:" - -#~ msgid "" -#~ "Linphone could not open audio device %s. Check if your sound card is " -#~ "fully configured and working." -#~ msgstr "" -#~ "Linphone nemůže otevřít zvukové zařízení %s. Překontrolujte nastavení a " -#~ "funkčnost zvukové karty." - -#~ msgid "Type here the sip address of the person you want to call." -#~ msgstr "Zde zadejte SIP adresu osoby, které si přejete volat." - -#~ msgid "" -#~ "Release or\n" -#~ "Refuse" -#~ msgstr "" -#~ "Přijmout nebo\n" -#~ "odmítnout" - -#~ msgid "%s. Retry after %i minute(s)." -#~ msgstr "%s. Zkusit znovu po %i min." +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/de.po b/po/de.po index 81e18df10..a97e08884 100644 --- a/po/de.po +++ b/po/de.po @@ -1,21 +1,26 @@ -# SIP Telephony Application. -# Copyright (C) 2001, 2002 Free Software Foundation, Inc. -# Simon Morlat , 2001. -# Gerhard Stengel , 2011, 2012. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# andreas, 2014 +# andreas, 2014 +# Gerhard Stengel , 2011-2012 +# Simon Morlat , 2001 msgid "" msgstr "" -"Project-Id-Version: linphone 0.7.1\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2012-11-07 19:27+0100\n" -"Last-Translator: Gerhard Stengel \n" -"Language-Team: German \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: German (http://www.transifex.com/projects/p/linphone-gtk/" +"language/de/)\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8-bit\n" -"X-Generator: Lokalize 1.5\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -28,9 +33,9 @@ msgid "Send text to %s" msgstr "Text zu „%s“ schicken" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "Im Gespräch" +msgstr "letzte Anrufe (%i)" #: ../gtk/calllogs.c:314 msgid "n/a" @@ -62,26 +67,19 @@ msgid_plural "%i seconds" msgstr[0] "%i Sekunde" msgstr[1] "%i Sekunden" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 -#, fuzzy, c-format +#, c-format msgid "" "%s\tQuality: %s\n" "%s\t%s\t" msgstr "" -"%s\t%s\tQualität: %s\n" -"%s\t%s %s\t" +"%s\tQualität: %s\n" +"%s\t%s\t" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" -msgstr "" +msgid "%s\t%s" +msgstr "%s\t%s" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" @@ -96,7 +94,7 @@ msgstr "Eigenes Telefon" msgid "Couldn't find pixmap file: %s" msgstr "Pixmapdatei %s kann nicht gefunden werden." -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "Ungültiger SIP-Kontakt!" @@ -135,21 +133,14 @@ msgstr "" "C:\\Programme\\Linphone)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Bestätigung" +msgstr "Konfigurationsdatei" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "Konto-Einrichtungsassistent" +msgstr "Starte den Audio-Assistent" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Im Gespräch mit %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -162,68 +153,68 @@ msgstr "" "Ihrer Kontaktliste hinzufügen?\n" "Wenn Sie mit Nein antworten, wird diese Person vorläufig blockiert." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -"Geben Sie bitte Ihr Passwort für den Benutzernamen %s\n" -" auf der Domäne %s ein:" +"Bitte geben Sie Ihr Passwort für den Benutzernamen %s\n" +" für Bereich %s ein:" -#: ../gtk/main.c:1376 +#: ../gtk/main.c:1283 msgid "Call error" msgstr "Anruf fehlgeschlagen" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Anruf beendet" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Eingehender Anruf" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Annehmen" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Abweisen" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 msgid "Call paused" msgstr "Anruf wird gehalten" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 #, c-format msgid "by %s" msgstr "von %s" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s schlägt vor, eine Videoübertragung zu starten. Nehmen Sie an?" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Website-Verknüpfung" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - ein Internet-Video-Telefon" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (Vorgabe)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "Vermittlung nach %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -231,7 +222,7 @@ msgstr "" "Auf diesem Rechner können keine Soundkarten gefunden werden.\n" "Sie können keine Audio-Anrufe tätigen oder entgegennehmen." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "Ein freies SIP-Video-Telefon" @@ -252,9 +243,8 @@ msgid "Call" msgstr "Anrufen" #: ../gtk/friendlist.c:726 -#, fuzzy msgid "Chat" -msgstr "Chat Raum" +msgstr "Chat" #: ../gtk/friendlist.c:756 #, c-format @@ -272,9 +262,9 @@ msgid "Delete contact '%s'" msgstr "Kontakt „%s“ löschen" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "Kontakt „%s“ löschen" +msgstr "Lösche Gesprächshistorie von '%s'" #: ../gtk/friendlist.c:1029 #, c-format @@ -290,9 +280,8 @@ msgid "Status" msgstr "Status" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Min. Bitrate (kbit/s)" +msgstr "IP Bit-Rate (kbit/s)" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -310,96 +299,96 @@ msgstr "Gesperrt" msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "Englisch" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Französisch" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Schwedisch" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Italienisch" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Spanisch" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "Brasilianisches Portugiesisch" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Polnisch" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Russisch" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "Japanisch" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Niederländisch" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Ungarisch" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Tschechisch" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "Chinesisch" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "Traditionelles Chinesisch" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "Norwegisch" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" -msgstr "" +msgstr "Hebräisch" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" -msgstr "" +msgstr "Serbisch" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" "Linphone muss neu gestartet werden, damit die neue Spracheinstellung wirksam " "wird." -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "Keinen" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" -msgstr "" +msgstr "SRTP" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" -msgstr "" +msgstr "ZRTP" #: ../gtk/update.c:80 #, c-format @@ -443,12 +432,11 @@ msgstr[1] "%i Kontakte gefunden" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" "Willkommen!\n" -"Dieser Assistent wird Ihnen dabei helfen, ein SIP-Konto für Ihre Anrufe zu " -"verwenden." +"Dieser Assistent hilft Ihnen dabei ein SIP-Konto einzurichten." #: ../gtk/setupwizard.c:43 msgid "Create an account on linphone.org" @@ -465,7 +453,7 @@ msgstr "Ich habe bereits ein SIP-Konto und möchte es jetzt benutzen." #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" -msgstr "" +msgstr "Ich möchte eine URI zur Fernkonfiguration angeben" #: ../gtk/setupwizard.c:89 msgid "Enter your linphone.org username" @@ -521,7 +509,7 @@ msgstr "Bestätigen Sie Ihr Passwort: (*)" #: ../gtk/setupwizard.c:338 msgid "Keep me informed with linphone updates" -msgstr "" +msgstr "Halte mich über linphone Aktualisierungen auf dem laufenden" #: ../gtk/setupwizard.c:394 msgid "" @@ -547,40 +535,39 @@ msgstr "" "wir Ihnen soeben per E-Mail geschickt haben.\n" "Danach gehen Sie hierher zurück und drücken auf „Vor“." -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "Konto-Einrichtungsassistent" +msgstr "SIP-Konto-Einrichtungsassistent" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "Willkommen zum Konto-Einrichtungsassistenten" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Konto-Einrichtungsassistent" -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "Konto einrichten (Schritt 1/1)" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "Geben Sie Ihren SIP-Benutzernamen ein (Schritt 1/1)" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "Geben Sie Ihre Zugangsdaten ein (Schritt 1/2)" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "Bestätigung (Schritt 2/2)" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "Fehler" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "Fertigstellen" @@ -623,32 +610,28 @@ msgid "Through a relay server" msgstr "Über einen Relay-Server" #: ../gtk/incall_view.c:239 -#, fuzzy msgid "uPnP not activated" -msgstr "ICE nicht aktiviert" +msgstr "uPnP nicht aktiviert" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "ICE läuft" +msgstr "uPnP läuft" #: ../gtk/incall_view.c:243 -#, fuzzy msgid "uPnp not available" -msgstr "nicht verfügbar" +msgstr "uPnp nicht verfügbar" #: ../gtk/incall_view.c:245 msgid "uPnP is running" -msgstr "" +msgstr "uPnP läuft" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "ICE fehlgeschlagen" +msgstr "uPnP fehlgeschlagen" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" -msgstr "" +msgstr "Direkt oder über Server" #: ../gtk/incall_view.c:267 ../gtk/incall_view.c:279 #, c-format @@ -662,122 +645,118 @@ msgstr "" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format msgid "%ix%i @ %f fps" -msgstr "" +msgstr "%ix%i @ %f bps" #: ../gtk/incall_view.c:304 -#, fuzzy, c-format +#, c-format msgid "%.3f seconds" -msgstr "%i Sekunde" +msgstr "%.3f Sekunden" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" -msgstr "" +msgstr "Auflegen" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "Verbindungsaufbau..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" -msgstr "" +msgstr "00::00::00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "Eingehender Anruf" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "gut" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "durchschnittlich" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "schlecht" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "sehr schlecht" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "zu schlecht" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "nicht verfügbar" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "Gesichert durch SRTP" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Gesichert durch ZRTP - [Auth.-Token: %s]" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "Auf „Ungeprüft“ setzen" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "Auf „Geprüft“ setzen" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "In Konferenz" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "Im Gespräch" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "Gehaltener Anruf" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Anruf beendet." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "Vermittlung läuft" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "Vermittlung abgeschlossen." -#: ../gtk/incall_view.c:809 +#: ../gtk/incall_view.c:831 msgid "Transfer failed." msgstr "Vermittlung fehlgeschlagen." -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "Fortsetzen" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "Halten" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" +"Recording into\n" +"%s %s" -#: ../gtk/incall_view.c:926 -#, fuzzy +#: ../gtk/incall_view.c:948 msgid "(Paused)" -msgstr "Halten" +msgstr "(pausiert)" #: ../gtk/loginframe.c:88 #, c-format @@ -785,97 +764,91 @@ msgid "Please enter login information for %s" msgstr "Bitte geben Sie die Anmeldeinformationen für %s ein." #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "Eingehendes Gespr�h" +msgstr "abrufen von %s" #: ../gtk/config-fetching.c:73 #, c-format msgid "Downloading of remote configuration from %s failed." -msgstr "" +msgstr "Herunterladen der Fernkonfiguration von %s fehlgeschlagen" #: ../gtk/audio_assistant.c:98 msgid "No voice detected" -msgstr "" +msgstr "Keine Stimme ermittelt" #: ../gtk/audio_assistant.c:99 msgid "Too low" -msgstr "" +msgstr "zu gering" #: ../gtk/audio_assistant.c:100 msgid "Good" -msgstr "" +msgstr "gut" #: ../gtk/audio_assistant.c:101 msgid "Too loud" -msgstr "" +msgstr "zu laut" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" "Willkommen!\n" -"Dieser Assistent wird Ihnen dabei helfen, ein SIP-Konto für Ihre Anrufe zu " -"verwenden." +"Dieser Assistent hilft Ihnen die Audioeinstellungen für Linphone " +"einzurichten." #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Aufnahmegerät:" +msgstr "Aufnahmegerät" #: ../gtk/audio_assistant.c:329 -#, fuzzy msgid "Recorded volume" -msgstr "Aufnahmequelle:" +msgstr "aufgenommene Lautstärke" #: ../gtk/audio_assistant.c:333 msgid "No voice" -msgstr "" +msgstr "Keine Stimme" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Wiedergabegerät:" +msgstr "Wiedergabegerät" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" -msgstr "" +msgstr "spiele drei Pieptöne ab" #: ../gtk/audio_assistant.c:403 msgid "Press the record button and say some words" -msgstr "" +msgstr "Drücken Sie den Aufnahmeknopf und sagen Sie etwas" #: ../gtk/audio_assistant.c:404 msgid "Listen to your record voice" -msgstr "" +msgstr "Hören Sie das Aufgenommene" #: ../gtk/audio_assistant.c:433 msgid "Let's start Linphone now" -msgstr "" +msgstr "Linphone jetzt starten" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "Konto-Einrichtungsassistent" +msgstr "Audio-Assistant" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "Konto-Einrichtungsassistent" +msgstr "Audio-Assistant" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" -msgstr "" +msgstr "Einrichtung MIkrofonverstärker" #: ../gtk/audio_assistant.c:517 msgid "Speaker volume calibration" -msgstr "" +msgstr "Einrichtung Lautstärke" #: ../gtk/audio_assistant.c:522 msgid "Record and Play" -msgstr "" +msgstr "aufnehmen und abspielen" #: ../gtk/main.ui.h:1 msgid "Callee name" @@ -886,21 +859,20 @@ msgid "Send" msgstr "Senden" #: ../gtk/main.ui.h:3 -#, fuzzy msgid "End conference" -msgstr "In Konferenz" +msgstr "Konferenz beenden" #: ../gtk/main.ui.h:7 msgid "Record this call to an audio file" -msgstr "" +msgstr "Speichere den Anruf in eine Audio-Datei" #: ../gtk/main.ui.h:8 msgid "Video" -msgstr "" +msgstr "Video" #: ../gtk/main.ui.h:10 msgid "Mute" -msgstr "" +msgstr "Stumm" #: ../gtk/main.ui.h:11 msgid "Transfer" @@ -928,7 +900,7 @@ msgstr "Angemeldete Teilnehmer" #: ../gtk/main.ui.h:19 msgid "ADSL" -msgstr "" +msgstr "ADSL" #: ../gtk/main.ui.h:20 msgid "Fiber Channel" @@ -943,9 +915,8 @@ msgid "_Options" msgstr "_Optionen" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Proxy/Registrator Konfigurationsbox" +msgstr "Konfigurations URI angeben" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -965,7 +936,7 @@ msgstr "Debug-Fenster anzeigen" #: ../gtk/main.ui.h:28 msgid "_Homepage" -msgstr "" +msgstr "_Homepage" #: ../gtk/main.ui.h:29 msgid "Check _Updates" @@ -1032,20 +1003,20 @@ msgid "Login information" msgstr "Anmeldeinformationen" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "Willkommen !" +msgid "Welcome!" +msgstr "Willkommen!" #: ../gtk/main.ui.h:47 msgid "Delete" -msgstr "" +msgstr "Löschen" #: ../gtk/about.ui.h:1 -msgid "About linphone" +msgid "About Linphone" msgstr "Über Linphone" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "(C) Belledonne Communications, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." @@ -1054,7 +1025,6 @@ msgstr "" "verwendet." #: ../gtk/about.ui.h:5 -#, fuzzy msgid "" "fr: Simon Morlat\n" "en: Simon Morlat and Delphine Perreau\n" @@ -1073,7 +1043,6 @@ msgstr "" "en: Simon Morlat and Delphine Perreau\n" "it: Alberto Zanoni \n" "de: Jean-Jacques Sarton \n" -"\t Gerhard Stengel \n" "sv: Daniel Nylander \n" "es: Jesus Benitez \n" "ja: YAMAGUCHI YOSHIYA \n" @@ -1081,6 +1050,7 @@ msgstr "" "pl: Robert Nasiadek \n" "cs: Petr Pisar \n" "hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1155,22 +1125,20 @@ msgid "Registration duration (sec):" msgstr "Registrierungsdauer (sec):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Route (optional):" +msgstr "Kontaktdetails (optional)" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" -msgstr "" +msgstr "AVPF Standard RTCP Interval (sek):" #: ../gtk/sip_account.ui.h:10 msgid "Route (optional):" msgstr "Route (optional):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Übertragung" +msgstr "Übertragung" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1181,9 +1149,8 @@ msgid "Publish presence information" msgstr "Anwesenheitsstatus veröffentlichen" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Freigeben" +msgstr "Aktiviere AVPF" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1191,15 +1158,15 @@ msgstr "SIP-Konto einrichten" #: ../gtk/parameters.ui.h:1 msgid "anonymous" -msgstr "" +msgstr "Anonym" #: ../gtk/parameters.ui.h:2 msgid "GSSAPI" -msgstr "" +msgstr "GSSAPI" #: ../gtk/parameters.ui.h:3 msgid "SASL" -msgstr "" +msgstr "SASL" #: ../gtk/parameters.ui.h:4 msgid "default soundcard" @@ -1215,7 +1182,7 @@ msgstr "Standard-Kamera" #: ../gtk/parameters.ui.h:7 msgid "CIF" -msgstr "" +msgstr "CIF" #: ../gtk/parameters.ui.h:8 msgid "Audio codecs" @@ -1225,21 +1192,21 @@ msgstr "Audio-Codecs" msgid "Video codecs" msgstr "Video-Codecs" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" -msgstr "" +msgstr "C" #: ../gtk/parameters.ui.h:11 msgid "SIP (UDP)" -msgstr "" +msgstr "SIP (UDP)" #: ../gtk/parameters.ui.h:12 msgid "SIP (TCP)" -msgstr "" +msgstr "SIP (TCP)" #: ../gtk/parameters.ui.h:13 msgid "SIP (TLS)" -msgstr "" +msgstr "SIP (TLS)" #: ../gtk/parameters.ui.h:14 msgid "Settings" @@ -1267,20 +1234,19 @@ msgstr "Verschlüsselungstyp der Medien" #: ../gtk/parameters.ui.h:20 msgid "Video RTP/UDP:" -msgstr "" +msgstr "Video RTP/UDP:" #: ../gtk/parameters.ui.h:21 msgid "Audio RTP/UDP:" -msgstr "" +msgstr "Audio RTP/UDP:" #: ../gtk/parameters.ui.h:22 msgid "Fixed" msgstr "Fest" #: ../gtk/parameters.ui.h:23 -#, fuzzy msgid "Media encryption is mandatory" -msgstr "Verschlüsselungstyp der Medien" +msgstr "Medienverschlüsselung erzwingen" #: ../gtk/parameters.ui.h:24 msgid "Tunnel" @@ -1291,14 +1257,12 @@ msgid "DSCP fields" msgstr "DSCP-Felder" #: ../gtk/parameters.ui.h:26 -#, fuzzy msgid "SIP/TCP port" -msgstr "SIP-Port" +msgstr "SIP/TCP Port" #: ../gtk/parameters.ui.h:27 -#, fuzzy msgid "SIP/UDP port" -msgstr "SIP-Port" +msgstr "SIP/UDP Port" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1309,9 +1273,8 @@ msgid "Direct connection to the Internet" msgstr "Direkte Verbindung ins Internet" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "Hinter NAT / Firewall (IP-Gateway darunter angeben)" +msgstr "Hinter NAT / Firewall (Gateway IP angeben)" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" @@ -1322,9 +1285,8 @@ msgid "Behind NAT / Firewall (use ICE)" msgstr "Hinter NAT / Firewall (ICE verwenden)" #: ../gtk/parameters.ui.h:33 -#, fuzzy msgid "Behind NAT / Firewall (use uPnP)" -msgstr "Hinter NAT / Firewall (ICE verwenden)" +msgstr "Hinter NAT / Firewall (uPnP verwenden)" #: ../gtk/parameters.ui.h:34 msgid "Public IP address:" @@ -1379,9 +1341,8 @@ msgid "Prefered video resolution:" msgstr "Bevorzugte Video-Auflösung:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Video-Aufnahmegerät:" +msgstr "Methode zur Videoausgabe" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1506,29 +1467,22 @@ msgid "User interface" msgstr "Benutzeroberfläche" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Server-Adresse:" +msgstr "Server-Adresse" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Authentifikation fehlgeschlagen" +msgstr "Authentifizierungsmethode" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "" +msgid "LDAP Account setup" +msgstr "LDAP-Kontoeinrichtung" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Proxy-Konten" +msgid "LDAP" +msgstr "LDAP" #: ../gtk/parameters.ui.h:82 -msgid "LDAP" -msgstr "" - -#: ../gtk/parameters.ui.h:83 msgid "Done" msgstr "Fertig" @@ -1553,7 +1507,6 @@ msgid "Please wait" msgstr "Bitte warten" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" msgstr "DSCP-Einstellungen" @@ -1590,37 +1543,32 @@ msgid "Audio IP bandwidth usage" msgstr "Genutzte IP-Bandbreite Audio" #: ../gtk/call_statistics.ui.h:5 -#, fuzzy msgid "Audio Media connectivity" -msgstr "Medienanbindung" +msgstr "Audio-Konnektivität" #: ../gtk/call_statistics.ui.h:6 msgid "Video IP bandwidth usage" msgstr "Genutzte IP-Bandbreite Video" #: ../gtk/call_statistics.ui.h:7 -#, fuzzy msgid "Video Media connectivity" -msgstr "Medienanbindung" +msgstr "Video-Konnektivität" #: ../gtk/call_statistics.ui.h:8 -#, fuzzy msgid "Round trip time" -msgstr "Audio Eigenschaften" +msgstr "Umlaufzeit" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" -msgstr "" +msgstr "Videoauflösung empfangen" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "Bevorzugte Video-Auflösung:" +msgstr "Videoauflösung gesendet" #: ../gtk/call_statistics.ui.h:11 -#, fuzzy msgid "RTP profile" -msgstr "RTP-Eingabefilter" +msgstr "RTP-Profil" #: ../gtk/call_statistics.ui.h:12 msgid "Call statistics and information" @@ -1644,168 +1592,100 @@ msgstr "Tunnel einrichten" #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" -msgstr "HTTP-Proxy einrichten (optional)" - -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "" +msgstr "Configure http proxy (optional)" #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Einstellungen" +msgstr "LDAP-Einstellungen" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" -msgstr "" +msgstr "TLS-Verbindung verwenden" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "nicht verfügbar" +msgstr "Aktuell nicht verfügbar" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Codecs" +msgstr "Verbindung" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" -msgstr "" +msgstr "Bind-DN" #: ../gtk/ldap.ui.h:10 msgid "Authname" -msgstr "" +msgstr "Authentifizierungsname" #: ../gtk/ldap.ui.h:11 -#, fuzzy msgid "Realm" -msgstr "Bereich:" +msgstr "Bereich" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Audio" +msgstr "SASL" #: ../gtk/ldap.ui.h:13 msgid "Base object:" -msgstr "" +msgstr "Basis-Objekt:" #: ../gtk/ldap.ui.h:15 #, no-c-format msgid "Filter (%s for name):" -msgstr "" +msgstr "Filter (%s nach Name):" #: ../gtk/ldap.ui.h:16 msgid "Name Attribute:" -msgstr "" +msgstr "Name:" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "Adresse" +msgstr "SIP-Adresse:" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" -msgstr "" +msgstr "Sucheigenschaft:" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Kontaktsuche" +msgstr "Suche" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" -msgstr "" +msgstr "Zeitüberschreitung bei der Suche:" #: ../gtk/ldap.ui.h:21 msgid "Max results:" -msgstr "" +msgstr "Max Ergebnisse:" #: ../gtk/ldap.ui.h:22 msgid "Follow Aliases" -msgstr "" +msgstr "folge Pseudonymen" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Video" +msgstr "Sonstiges" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" -msgstr "" +msgstr "ANONYMOUS" #: ../gtk/ldap.ui.h:25 msgid "SIMPLE" -msgstr "" +msgstr "SIMPLE" #: ../gtk/ldap.ui.h:26 msgid "DIGEST-MD5" -msgstr "" +msgstr "DIGEST-MD5" #: ../gtk/ldap.ui.h:27 msgid "NTLM" -msgstr "" +msgstr "NTLM" #: ../gtk/config-uri.ui.h:1 msgid "Specifying a remote configuration URI" -msgstr "" +msgstr "Eine URI zur FErnkonfiguration angeben" #: ../gtk/config-uri.ui.h:2 msgid "" @@ -1815,87 +1695,83 @@ msgid "" "Linphone will restart automatically in order to fetch and take into account " "the new configuration. " msgstr "" - -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" +"Diese Maske erlaubt Ihnen für das Laden der Konfiguration beim Programmstart " +"eine http- oder https-Adresse anzugeben.\n" +"Bitte geben Sie unten die Konfigurations-URI ein oder ändern diese. Nach dem " +"Bestätigen mit OK wird Linphone automatisch neustarten, um die neuen " +"Einstellungen zu übernehmen." #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Verbinden..." +msgstr "Einstellen..." #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" +"Bitte warten Sie während die Einstellungen vom Server abgerufen werden..." -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Bereit" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Bestätigung" +msgstr "Einstellen" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Telefonnummernziel wird gesucht..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Diese Nummer kann nicht aufgelöst werden." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Verbindungsaufbau" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "Anruf kann nicht getätigt werden." -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Die maximale Anzahl der gleichzeitigen Anrufe ist erreicht." -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "ruft Sie an" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr " und fragt nach automatischer Antwort." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "Die Anrufparameter werden verändert..." -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Verbunden." -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "Anruf abgebrochen" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "Anruf kann nicht gehalten werden" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "Aktueller Anruf wird gehalten..." -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "STUN-Ermittlung läuft..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "Lokale Kandidaten für ICE werden zusammengestellt..." @@ -1944,15 +1820,14 @@ msgid "Pending" msgstr "Ausstehend" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Dauer" +msgstr "Urlaub" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Unbekannter Fehler" +msgid "Unknown status" +msgstr "Unbekannter Status" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1960,7 +1835,7 @@ msgstr "" "Die von Ihnen eingegebene SIP-Proxy-Adresse ist ungültig, sie muss mit " "„sip:“ gefolgt vom Hostnamen beginnen." -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1969,1113 +1844,159 @@ msgstr "" "Sie sollte wie sip:benutzername@proxydomain aussehen, also z.B. sip:" "alice@beispiel.net" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "Anmeldung als %s fehlgeschlagen" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "Klingeln bei der Gegenseite." -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "Klingeln bei der Gegenseite..." -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." -msgstr "" +msgstr "nicht kompatibel, prüfe Codecs oder Sicherheitseinstellungen..." -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "Anruf mit %s wird gehalten." -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "Der von %s entgegengenommene Anruf wird gehalten." -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "Anruf fortgesetzt." -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "Anruf wird von %s entgegengenommen." -#: ../coreapi/callbacks.c:483 -#, fuzzy +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." -msgstr "Inkompatibel, überprüfen Sie die Codecs..." +msgstr "Inkompatibel, prüfe Codecs oder Sicherheitseinstellungen..." -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "Inkompatible Medienparameter." + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "Anruf wird fortgesetzt." -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "Anruf wird von der Gegenseite gehalten." -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "Anruf ist von der Gegenseite aktualisiert worden." -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Anruf beendet." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Teilnehmer ist besetzt." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Teilnehmer zur Zeit nicht verfügbar." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "Teilnehmer möchte nicht gestört werden." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Anruf abgewiesen" -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." -msgstr "" +msgstr "Zeitüberschreitung bei der Anfrage" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "Umgeleitet" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "Inkompatible Medienparameter." - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "Anruf fehlgeschlagen." -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Registrierung auf %s erfolgreich." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "Abmeldung von %s ist erfolgt." -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "Zeitüberschreitung bei der Antwort" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrierung auf %s fehlgeschlagen: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" -msgstr "" +msgstr "Service nicht verfügbar, versuche erneut" -#: ../coreapi/linphonecall.c:177 +#: ../coreapi/linphonecall.c:174 #, c-format msgid "Authentication token is %s" msgstr "Authentifizierungs-Token ist %s" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "Sie haben %i Anruf in Abwesenheit." msgstr[1] "Sie haben %i Anrufe in Abwesenheit." -#~ msgid "aborted" -#~ msgstr "abgebrochen" - -#~ msgid "completed" -#~ msgstr "beendet" - -#~ msgid "missed" -#~ msgstr "entgangen" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s am %s\n" -#~ "Von: %s\n" -#~ "An: %s\n" -#~ "Status: %s\n" -#~ "Dauer: %i min %i sec\n" - -#~ msgid "Outgoing call" -#~ msgstr "Abgehender Anruf" - -#~ msgid "No response." -#~ msgstr "Keine Antwort." - -#~ msgid "Protocol error." -#~ msgstr "Protokollfehler" - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "SIP-Adresse kann nicht eingelesen werden. Eine SIP-Adresse hat folgenden " -#~ "Aufbau " - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Ihre Rechner verwendet anscheinend einen ALSA-Soundtreiber.\n" -#~ "Dies ist die beste Lösung; allerdings ist das von Linphone benötigte " -#~ "Modul\n" -#~ "zur PCM-OSS-Emulation nicht vorhanden. Bitte führen Sie als\n" -#~ "Systemverwalter den Befehl „modprobe snd-pcm-oss“ aus, um es zu laden." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Ihre Rechner verwendet anscheinend einen ALSA-Soundtreiber.\n" -#~ "Dies ist die beste Lösung; allerdings ist das von Linphone benötigte " -#~ "Modul\n" -#~ "zur Mixer-OSS-Emulation nicht vorhanden. Bitte führen Sie als\n" -#~ "Systemverwalter den Befehl „modprobe snd-mixer-oss“ aus, um es zu laden." - -#~ msgid "Keypad" -#~ msgstr "Wähltastatur" - -#~ msgid "Chat with %s" -#~ msgstr "Chat mit %s" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "Teilnehmer, Telefonnummer oder vollständige SIP-Adresse eingeben" - -#~ msgid "Lookup:" -#~ msgstr "Suchen:" - -#~ msgid "in" -#~ msgstr "in" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "Am virtuellen FONICS\n" -#~ "Netzwerk anmelden!" - -#~ msgid "Enable video" -#~ msgstr "Video ein" - -#~ msgid "edit" -#~ msgstr "Bearbeiten" - -#~ msgid "No common codecs" -#~ msgstr "Keine gemeinsamen Codecs" - -#~ msgid "We are being paused..." -#~ msgstr "Anruf wird gehalten..." - -#~ msgid "Please choose a username:" -#~ msgstr "Bitte einen Benutzernamen auswählen:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "Die Verfügbarkeit von „%s“ wird überprüft..." - -#~ msgid "Please wait..." -#~ msgstr "Bitte warten..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "" -#~ "Leider existiert dieser Benutzername bereits. Bitte versuchen sie es mit " -#~ "einem anderen." - -#~ msgid "Ok !" -#~ msgstr "OK!" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "Kommunikationsproblem, bitte versuchen Sie es später noch einmal." - -#~ msgid "Choosing a username" -#~ msgstr "Benutzername wird ausgewählt" - -#~ msgid "Verifying" -#~ msgstr "Überprüfen" - -#~ msgid "Creating your account" -#~ msgstr "Erstellen Ihres Kontos" - -#~ msgid "Now ready !" -#~ msgstr "Fertig!" - -#~ msgid "Register at startup" -#~ msgstr "Beim Starten registrieren" - -#~ msgid "" -#~ "Pause all calls\n" -#~ "and answer" -#~ msgstr "" -#~ "Alle Anrufe halten\n" -#~ "und annehmen" - -#~ msgid "Unmute" -#~ msgstr "Stumm aus" - -#~ msgid "Contact list" -#~ msgstr "Kontaktliste" - -#~ msgid "Audio & video" -#~ msgstr "Audio & Video" - -#~ msgid "Audio only" -#~ msgstr "Nur Audio" - -#~ msgid "Duration:" -#~ msgstr "Dauer:" - -#~ msgid "_Call history" -#~ msgstr "Anrufchronik" - -#~ msgid "Ports" -#~ msgstr "Ports" - -#~ msgid "Sorry, you have to pause or stop the current call first !" -#~ msgstr "Sie müssen zuerst den aktuellen Anruf halten oder beenden!" - -#~ msgid "There is already a call in process, pause or stop it first." -#~ msgstr "" -#~ "Es wird bereits ein Anruf verarbeitet. Halten oder beenden Sie ihn zuerst." - -#~ msgid "ITU-G.711 alaw encoder" -#~ msgstr "ITU-G.711 alaw Encoder" - -#~ msgid "ITU-G.711 alaw decoder" -#~ msgstr "ITU-G.711 alaw Dekoder" - -#~ msgid "Alsa sound source" -#~ msgstr "ALSA-Sound-Quelle" - -#~ msgid "Alsa sound output" -#~ msgstr "ALSA-Sound-Ausgabe" - -#~ msgid "Sound capture filter for MacOS X Audio Queue Service" -#~ msgstr "Sound-Aufnahmefilter für den Audio-Warteschlangendienst auf MacOS X" - -#~ msgid "Sound playback filter for MacOS X Audio Queue Service" -#~ msgstr "" -#~ "Sound-Wiedergabefilter für den Audio-Warteschlangendienst auf MacOS X" - -#~ msgid "DTMF generator" -#~ msgstr "DTMF-Generator" - -#~ msgid "The GSM full-rate codec" -#~ msgstr "Der Full-Rate-GSM-Codec" - -#~ msgid "The GSM codec" -#~ msgstr "Der GSM-Codec" - -#~ msgid "Sound capture filter for MacOS X Audio Unit" -#~ msgstr "Sound-Aufnahmefilter für den Audio-Warteschlangendienst auf MacOS X" - -#~ msgid "Sound playback filter for MacOS X Audio Unit" -#~ msgstr "" -#~ "Sound-Wiedergabefilter für den Audio-Warteschlangendienst auf MacOS X" - -#~ msgid "A filter to make conferencing" -#~ msgstr "Ein Filter zur Durchführung von Konferenzen" - -#~ msgid "Raw files and wav reader" -#~ msgstr "Lesen von Roh- und WAV-Dateien" - -#~ msgid "Wav file recorder" -#~ msgstr "Aufnahme von WAV-Dateien" - -#~ msgid "A filter that send several inputs to one output." -#~ msgstr "Ein Filter, der mehrere Eingaben an eine Ausgabe sendet." - -#~ msgid "RTP output filter" -#~ msgstr "RTP-Ausgabefilter" - -#~ msgid "The free and wonderful speex codec" -#~ msgstr "Der freie und herrliche Speex-Codec" - -#~ msgid "A filter that controls and measure sound volume" -#~ msgstr "Ein Filter zur Steuerung und Messung der Lautstärke" - -#~ msgid "A video4linux compatible source filter to stream pictures." -#~ msgstr "Ein mit Video4Linux kompatibler Quellfilter, um Bilder zu streamen." - -#~ msgid "A filter to grab pictures from Video4Linux2-powered cameras" -#~ msgstr "" -#~ "Ein Filter zur Aufzeichnung von durch Video4Linux2 unterstützten Kameras." - -#~ msgid "A filter that outputs a static image." -#~ msgstr "Ein Filter zur Ausgabe eines Standbilds" - -#~ msgid "A pixel format converter" -#~ msgstr "Ein Konverter für Pixelformate" - -#~ msgid "A video size converter" -#~ msgstr "Ein Konverter für die Größe von Videos" - -#~ msgid "a small video size converter" -#~ msgstr "Ein Konverter für die Größe von kleinen Videos" - -#~ msgid "Echo canceller using speex library" -#~ msgstr "Echo-Unterdrückung unter Verwendung der Speex-Bibliothek" - -#~ msgid "A filter that reads from input and copy to its multiple outputs." -#~ msgstr "" -#~ "Ein Filter, der aus einer Eingabe liest und auf viele Ausgaben kopiert." - -#~ msgid "The theora video encoder from xiph.org" -#~ msgstr "Der Theora-Video-Encoder von xiph.org" - -#~ msgid "The open-source and royalty-free 'theora' video codec from xiph.org" -#~ msgstr "" -#~ "Der quelloffene und lizenzkostenfreie „Theora“-Video-Codec von xiph.org" - -#~ msgid "The theora video decoder from xiph.org" -#~ msgstr "Der Theora-Video-Dekoder von xiph.org" - -#~ msgid "ITU-G.711 ulaw encoder" -#~ msgstr "ITU-G.711 ulaw Encoder" - -#~ msgid "ITU-G.711 ulaw decoder" -#~ msgstr "ITU-G.711 ulaw Dekoder" - -#~ msgid "A H.263 decoder using ffmpeg library" -#~ msgstr "Ein H263-Dekoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "A MPEG4 decoder using ffmpeg library" -#~ msgstr "Ein MPEG4-Dekoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "A RTP/JPEG decoder using ffmpeg library" -#~ msgstr "Ein RTP/JPEG-Dekoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "A MJPEG decoder using ffmpeg library" -#~ msgstr "Ein MJPEG-Dekoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "A snow decoder using ffmpeg library" -#~ msgstr "Ein Snow-Dekoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "A video H.263 encoder using ffmpeg library." -#~ msgstr "Ein H263-Video-Dekoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library. It is compliant with old " -#~ "RFC2190 spec." -#~ msgstr "" -#~ "Ein H263-Video-Dekoder, der die ffmpeg-Bibliothek verwendet. Er erfüllt " -#~ "die alte RFC2190-Spezifikation." - -#~ msgid "A video MPEG4 encoder using ffmpeg library." -#~ msgstr "Ein MPEG4-Video-Encoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "A video snow encoder using ffmpeg library." -#~ msgstr "Ein Snow-Video-Encoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "A RTP/MJPEG encoder using ffmpeg library." -#~ msgstr "Ein RTP/MJPEG-Encoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library, compliant with old RFC2190 " -#~ "spec." -#~ msgstr "" -#~ "Ein H263-Video-Encoder, der die ffmpeg-Bibliothek verwendet, der die " -#~ "alter RFC2190-Spezifikation erfüllt." - -#~ msgid "" -#~ "The snow codec is royalty-free and is open-source. \n" -#~ "It uses innovative techniques that makes it one of most promising video " -#~ "codec. It is implemented within the ffmpeg project.\n" -#~ "However it is under development, quite unstable and compatibility with " -#~ "other versions cannot be guaranteed." -#~ msgstr "" -#~ "Der Snow-Codec ist lizenzkostenfrei und quelloffen.\n" -#~ "Er nutzt innovative Techniken, die ihn zu einem der vielversprechendsten " -#~ "Video-Codecs machen. Er ist im Rahmen des ffmpeg-Projekts implementiert.\n" -#~ "Jedoch ist er noch in der Entwicklung, ziemlich instabil und die " -#~ "Kompatibilität mit anderen Versionen ist nicht gewährleistet." - -#~ msgid "A MJPEG encoder using ffmpeg library." -#~ msgstr "Ein MJPEG-Encoder, der die ffmpeg-Bibliothek verwendet" - -#~ msgid "A SDL-based video display" -#~ msgstr "Eine SDL-basierte Video-Anzeige" - -#~ msgid "A video4windows compatible source filter to stream pictures." -#~ msgstr "" -#~ "Ein zu video4windows kompatibler Quellfilter, um Bilder zu streamen." - -#~ msgid "A video for windows (vfw.h) based source filter to grab pictures." -#~ msgstr "" -#~ "Ein auf Video für Windows (vfw.h) basierender Quellfilter, um Bilder " -#~ "aufzuzeichnen." - -#~ msgid "" -#~ "A filter that trashes its input (useful for terminating some graphs)." -#~ msgstr "Ein Filter, der seine Eingabe vernichtet" - -#~ msgid "Parametric sound equalizer." -#~ msgstr "Parametrischer Sound-Equalizer" - -#~ msgid "A webcam grabber based on directshow." -#~ msgstr "Ein auf Directshow basierender Webcam-Grabber" - -#~ msgid "A video display based on windows DrawDib api" -#~ msgstr "Eine Video-Anzeige basierend auf der Windows DrawDib-API" - -#~ msgid "A filter that mixes down 16 bit sample audio streams" -#~ msgstr "Ein Filter, der 16-Bit-Sample Audio-Streams abmischt." - -#~ msgid "A filter that converts from mono to stereo and vice versa." -#~ msgstr "Ein Filter, der von Mono nach Stereo und umgekehrt konvertiert." - -#~ msgid "Inter ticker communication filter." -#~ msgstr "Filter für die Inter-Ticker-Kommunikation" - -#~ msgid "A display filter sending the buffers to draw to the upper layer" -#~ msgstr "" -#~ "Ein Anzeigefilter, der die Puffer sendet, um die oberste Schicht zu " -#~ "zeichnen" - -#~ msgid "Sound capture filter for MacOS X Audio Unit Service" -#~ msgstr "Sound-Aufnahmefilter für den Audio-Unit-Dienst auf MacOS X" - -#~ msgid "Sound playback filter for MacOS X Audio Unit Service" -#~ msgstr "Sound-Wiedergabefilter für den Audio-Unit-Dienst auf MacOS X" - -#~ msgid "A video display using X11+Xv" -#~ msgstr "Eine Video-Anzeige, die X11 und Xv verwendet" - -#~ msgid "Sound capture filter for Android" -#~ msgstr "Sound-Aufnahmefilter für Android" - -#~ msgid "Sound playback filter for Android" -#~ msgstr "Sound-Wiedergabefilter für Android" - -#~ msgid "A filter that captures Android video." -#~ msgstr "Ein Filter, der Android-Video aufzeichnet." - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "Ihr Rechner scheint an einen IPv6 Netz angeschlossen zu sein. " -#~ "Linphoneverwendet normalerweise IPv4. Bitte Konfiguration anpassen wenn " -#~ "sie IPv6 verwenden wollen" - -#, fuzzy -#~ msgid "_Modes" -#~ msgstr "Codecs" - -#~ msgid "Accept" -#~ msgstr "Annehmen" - -#, fuzzy -#~ msgid "Incoming call from" -#~ msgstr "Eingehendes Gespr�h" - -#, fuzzy -#~ msgid "Linphone - Incoming call" -#~ msgstr "Eingehendes Gespr�h" - -#, fuzzy -#~ msgid "" -#~ "Audio codecs\n" -#~ "Video codecs" -#~ msgstr "Audio und Video Codecs" - -#~ msgid "Sorry, having multiple simultaneous calls is not supported yet !" -#~ msgstr "Mehrfachen gleichzeitigen Anrufen nicht unterstützt !" - -#~ msgid "Could not reach destination." -#~ msgstr "Konnte Ziel nicht erreichen" - -#~ msgid "Request Cancelled." -#~ msgstr "Anruf annulliert." - -#~ msgid "Bad request" -#~ msgstr "Fehlerhafte Anfrage" - -#~ msgid "User cannot be found at given address." -#~ msgstr "Teilnehmer ist unter der angegebene Adresse nicht erreichbar." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "Die Gegenstelle untersttzt die angebotenen Codecs nicht." - -#~ msgid "Timeout." -#~ msgstr "Zeitberschreitung." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Die Gegenstelle hat die Verbindung abgewiesen." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "Teilnehmer nicht erreichbar. Bitte versuchen Sie es unter nachstehender " -#~ "Ressource:" - -#~ msgid "No nat/firewall address supplied !" -#~ msgstr "Keine Nat/Firewall Adresse vorgegeben !" - -#~ msgid "Invalid nat address '%s' : %s" -#~ msgstr "Ungültige NAT Adresse '%s' : '%s'" - -#~ msgid "Gone" -#~ msgstr "Gegangen" - -#~ msgid "Waiting for Approval" -#~ msgstr "Warte aud Bestätigung" - -#~ msgid "Be Right Back" -#~ msgstr "Bald wieder da" - -#~ msgid "On The Phone" -#~ msgstr "Am Höhrer" - -#~ msgid "Out To Lunch" -#~ msgstr "Beim Essen" - -#, fuzzy -#~ msgid "_View" -#~ msgstr "Video" - -#, fuzzy -#~ msgid "Display filters" -#~ msgstr "Angezeigter Name:" - -#, fuzzy -#~ msgid "_Properties" -#~ msgstr "RTP-Eigenschaften" - -#, fuzzy -#~ msgid "Show logs" -#~ msgstr "Zeigt Gespräche" - -#, fuzzy -#~ msgid "_About" -#~ msgstr "Konto" - -#, fuzzy -#~ msgid "Proxy in use" -#~ msgstr "Benutze Proxy-Server:" - -#~ msgid "Sound" -#~ msgstr "Ton" - -#, fuzzy -#~ msgid "Proxy accounts" -#~ msgstr "Benutze Proxy-Server:" - -#~ msgid "Go" -#~ msgstr "Start" - -#~ msgid "Address book" -#~ msgstr "Adressbuch" - -#~ msgid "Exit" -#~ msgstr "Beenden" - -#~ msgid "Shows the address book" -#~ msgstr "Adressbuch" - -#~ msgid "..." -#~ msgstr "..." - -#~ msgid "" -#~ "Hangup\n" -#~ "or refuse" -#~ msgstr "" -#~ "Auflegen\n" -#~ "oder Abweisen" - -#~ msgid "Or chat !" -#~ msgstr "Oder Chat" - -#~ msgid "Show more..." -#~ msgstr "Mehr anzeigen" - -#~ msgid "Playback level:" -#~ msgstr "Abhörpegel" - -#~ msgid "Recording level:" -#~ msgstr "Aufnamepegel" - -#~ msgid "Ring level:" -#~ msgstr "Klingelpegel" - -#~ msgid "Controls" -#~ msgstr "Kontrolle" - -#~ msgid "Reachable" -#~ msgstr "Erreichbar" - -#~ msgid "Busy, I'll be back in " -#~ msgstr "Beschäftigt, wieder erreichbar in " - -#~ msgid "The other party will be informed that you'll be back in X minutes" -#~ msgstr "" -#~ "Der Teilnehmer wird informiert, dass Sie in X Minuten wieder anwesend " -#~ "sind." - -#~ msgid "mn" -#~ msgstr "mn" - -#~ msgid "Moved temporarily" -#~ msgstr "Unterwegs" - -#~ msgid "Alternative service" -#~ msgstr "Andere Dienste" - -#~ msgid "URL:" -#~ msgstr "URL:" - -#~ msgid "Presence" -#~ msgstr "Anwesenheit" - -#~ msgid "Press digits to send DTMFs." -#~ msgstr "Zifferntasten drücken, um DTMF zu senden" - -#~ msgid "DTMF" -#~ msgstr "DTMF" - -#~ msgid "My online friends" -#~ msgstr "Meine online Freunde" - -#~ msgid "" -#~ "C: 2001\n" -#~ "Made in Old Europe" -#~ msgstr "" -#~ "C: 2001\n" -#~ "In Alt Europa erzeugt" - -#~ msgid "" -#~ "Linphone is a web-phone.\n" -#~ "It is compatible with SIP and RTP protocols." -#~ msgstr "" -#~ "Linphone ist ein web-phone.\n" -#~ "Es ist mit den SIP- und RTP-Protokollen kompatibel." - -#~ msgid "Use IPv6 network (if available)" -#~ msgstr "IPv6 Netzwerk (falls vorhanden) verwenden" - -# msgstr "Teilnehmer zur Zeit nicht ansprechbar." -#~ msgid "" -#~ "Toggle this if you are on an ipv6 network and you wish linphone to use it." -#~ msgstr "" -#~ "Ankreuzen wenn Sie ein ipv6 Netz haben und wenn Sie es wünschen dass " -#~ "linphone es verwendet" - -#~ msgid "" -#~ "These options is only for users in a private network, behind a gateway. " -#~ "If you are not in this situation, then leave this empty." -#~ msgstr "" -#~ "Diese Option gilt nur für Anwender in einem privaten Netzwerk oder wenn " -#~ "der Rechner durch einen Firewall geschützt ist. Andernfalls wird das Feld " -#~ "nicht ausgefüllt" - -#~ msgid "No firewall" -#~ msgstr "Kein Firewall" - -#~ msgid "Use this STUN server to guess firewall address :" -#~ msgstr "Dieses STUN Server verwenden um die Firewalladresse zu Ermitteln" - -#~ msgid "Specify firewall address manually:" -#~ msgstr "Firewall Adresse von Hand angeben" - -#~ msgid "NAT traversal options (experimental)" -#~ msgstr "NAT-Transversaloptionen (experimentell)" - -#~ msgid "Number of buffered miliseconds (jitter compensation):" -#~ msgstr "Anzahl der gepufferten Pakete (Jitterausgleich):" - -#~ msgid "RTP port used for audio:" -#~ msgstr "Sound RTP Port:" - -#~ msgid "Use SIP INFO message instead of RTP rfc2833 for DTMF transmitting" -#~ msgstr "Benutze SIP INFO Nachricht statt RTP rfc2833 für DTMF Übertragung" - -#~ msgid "RTP-RFC2833 is the recommended way." -#~ msgstr "RTP-RFC2833 wird empfohlen" - -#~ msgid "Other" -#~ msgstr "Andere" - -#~ msgid "micro" -#~ msgstr "Mikrofon" - -#~ msgid "Enable echo-canceler (cancels the echo heard by the remote party)" -#~ msgstr "" -#~ "Echounterdrückung einschalten (eliminiert das von Gesprächspartnet " -#~ "gehörter Echo)" - -#~ msgid "Listen" -#~ msgstr "Anhören" - -#~ msgid "Run sip user agent on port:" -#~ msgstr "Sip \"user agent\" an Port:" - -#~ msgid "It is strongly recommended to use port 5060." -#~ msgstr "Wir empfehlen, Port 5060 zu verwenden" - -#~ msgid "@" -#~ msgstr "@" - -#~ msgid "Identity" -#~ msgstr "Identität" - -#~ msgid "Add proxy/registrar" -#~ msgstr "Proxy/Registrator hinzufügen" - -#~ msgid "Remote services" -#~ msgstr "Dienste auf entferntem Server" - -#~ msgid "Clear all stored authentication information (username,password...)" -#~ msgstr "" -#~ "Alle gespeicherten Authentifikationsinformationen löschen (Benutzername, " -#~ "Passwort,...)" - -#~ msgid "List of audio codecs, in order of preference:" -#~ msgstr "Liste von Audio-CoDecs in der Reihenfolge ihrer Präferenz" - -#~ msgid "" -#~ "Note: Codecs in red are not usable regarding to your connection type to " -#~ "the internet." -#~ msgstr "" -#~ "Notiz: Rot markierten Codecs können bei Ihrer Internetverbindungsart " -#~ "nicht verwendet werden." - -#~ msgid "No information availlable" -#~ msgstr "Informationen nicht verfügbar" - -#~ msgid "Codec information" -#~ msgstr "Codec Information" - -#~ msgid "Address Book" -#~ msgstr "Adressbuch" - -#~ msgid "Select" -#~ msgstr "Auswählen" - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you to contact him " -#~ "using the following alternate ressource:" -#~ msgstr "" -#~ "Teilnehmer nicht erreichbar. Bitte stattdessen nachstehende Ressource " -#~ "verwenden:" - -#~ msgid "None." -#~ msgstr "Nichts." - -#~ msgid "Send registration:" -#~ msgstr "Sende Registrierung:" - -#~ msgid "Name:" -#~ msgstr "Name:" - -#~ msgid "Subscribe policy:" -#~ msgstr "Subskription Police" - -#~ msgid "Send subscription (see person's online status)" -#~ msgstr "Sende Subskription (zeige Onlinestatus der Person an)" - -#~ msgid "New incoming subscription" -#~ msgstr "Neu ankommende Subskription" - -#~ msgid "You have received a new subscription..." -#~ msgstr "Sie haben eine neue Subskription empfangen" - -#~ msgid "Refuse" -#~ msgstr "Ablehnen" - -#~ msgid "Authentication required for realm" -#~ msgstr "Authentifikation erforderlich für Bereich" - -#~ msgid "userid:" -#~ msgstr "Benutzer ID:" - -#~ msgid "Text:" -#~ msgstr "Text" - -#~ msgid "The caller asks for resource reservation. Do you agree ?" -#~ msgstr "Der Anrufer erbittet Resourcenreservierung. Sind Sie einverstanden?" - -#~ msgid "" -#~ "The caller doesn't use resource reservation. \t\t\t\t\tDo you wish to " -#~ "continue anyway ?" -#~ msgstr "" -#~ "Der Anrufer benutzt keine Resourcenreservierung. \t\t\t\t\tWollen Sie " -#~ "dennoch fortfahren?" - -#~ msgid "linphone - receiving call from %s" -#~ msgstr "Linphone- empfängt ein Anruf von %s" - -#~ msgid "" -#~ "You have received a subscription from %s.This means that this person " -#~ "wishes to be notified of your presence information (online, busy, " -#~ "away...).\n" -#~ "Do you agree ?" -#~ msgstr "" -#~ "Sie haben eine Subskription von %s empfangen. Das heißt, dass diese " -#~ "Person ber Ihre Anwesenheitsinformation benachrichtigt werden will " -#~ "(erreichbar, beschäftig, abwesend...).\n" -#~ "Sind Sie einverstanden ?" - -#~ msgid "Authentication required for realm %s" -#~ msgstr "Authentifikation erforderlich für Bereich %s" - -#~ msgid "Wait" -#~ msgstr "Warten" - -#~ msgid "Deny" -#~ msgstr "Abweisen" - -#~ msgid "Bad sip address: a sip address looks like sip:user@domain" -#~ msgstr "" -#~ "Fehlerhafte Sip-Adresse. Eine Sip-Adresse hat folgenden Aufbau " - -#~ msgid "Stun lookup done..." -#~ msgstr "Stun Ermittlung beendet..." - -#~ msgid "enter sip uri here" -#~ msgstr "Sip URI eingeben" - -#~ msgid "User manual" -#~ msgstr "Anwender-Handbuch" - -#~ msgid "Ring sound selection" -#~ msgstr "Klingelton ausw�len" - -#~ msgid "Communication ended." -#~ msgstr "Kommunikation beendet." - -#, fuzzy -#~ msgid "Firewall 's external ip address (in dot notations):" -#~ msgstr "IP-Adresse des Firewall (in Punktnotation)" - -#~ msgid "28k modem" -#~ msgstr "28K Modem" - -#~ msgid "56k modem" -#~ msgstr "56K Modem" - -#~ msgid "64k modem (numeris)" -#~ msgstr "64K Modem (ISDN)" - -#~ msgid "ADSL or Cable modem" -#~ msgstr "ADSL oder Kabel-Modem" - -#~ msgid "Ethernet or equivalent" -#~ msgstr "Ethernet oder äquivalent" - -#~ msgid "Connection type:" -#~ msgstr "Verbindungstyp:" - -#, fuzzy -#~ msgid "" -#~ "Linphone could not open audio device %s. Check if your sound card is " -#~ "fully configured and working." -#~ msgstr "" -#~ "Linphone kann das Soundgerät nicht öffnen. Prfen Sie nach, ob die " -#~ "Soundkarte vollst�dig konfiguriert und funktionsfähig ist." - -#~ msgid "Type here the sip address of the person you want to call." -#~ msgstr "" -#~ "Geben Sie die Sip-Adresse des Anwenders, den Sie anrufen möchten, hier " -#~ "ein." - -#~ msgid "" -#~ "Release or\n" -#~ "Refuse" -#~ msgstr "" -#~ "Auflegen oder\n" -#~ "Abweisen" - -#~ msgid "%s. Retry after %i minute(s)." -#~ msgstr "%s. In %i Minuten wieder versuchen." - -#~ msgid "Timeout..." -#~ msgstr "Zeitüberschreitung..." - -#~ msgid "Toggle this if you want to be registered on a remote server." -#~ msgstr "" -#~ "Bitte ankreuzen, wenn Sie auf einem Sip-Server registriert werden wollen." - -#~ msgid "Address of record:" -#~ msgstr "Adresse des Eintrags:" - -#~ msgid "" -#~ "The password used for registration. On some servers it is not necessary" -#~ msgstr "" -#~ "Passwort für die Registrierung. Bei manchen Servern nicht erforderlich." - -#~ msgid "Use this registrar server as outbound proxy." -#~ msgstr "Verwenden Sie diesen Registrarserver als externen proxy." - -#~ msgid "sip address:" -#~ msgstr "SIP-Adresse:" - -#~ msgid "Modify" -#~ msgstr "Ändern" - -#~ msgid "" -#~ "You are currently using the i810_audio driver.\n" -#~ "This driver is buggy and so does not work with Linphone.\n" -#~ "We suggest that you replace it by its equivalent ALSA driver,\n" -#~ "either with packages from your distribution, or by downloading\n" -#~ "ALSA drivers at http://www.alsa-project.org." -#~ msgstr "" -#~ "Sie verwenden zur Zeit den i810_audio Treiber.\n" -#~ "Diese Treiber ist fehlerhaft und funktioniert nicht mit Linphone\n" -#~ "Wir empfehlen, den Treiber entweder durch das ALSA-Treiber-Paket von " -#~ "ihrer Distribution\n" -#~ "zu ersetzen oder die gewnschten ALSA-Treiber von http://www.alsa-project." -#~ "org\n" -#~ "zu beziehen und zu installieren" - -#~ msgid "Unregistration successfull." -#~ msgstr "Abmeldung erfolgreich." - -#~ msgid "Select network interface to use:" -#~ msgstr "Netzwerkschnittstelle wählen:" - -#~ msgid "Network interface properties" -#~ msgstr "Eigenschaften der Netzwerkschnittstelle" - -#~ msgid "RTP" -#~ msgstr "RTP" - -#~ msgid "C: 2001" -#~ msgstr "April 2001" - -#~ msgid "Threads not supported by glib. Upgrade your glib.\n" -#~ msgstr "" -#~ "Threads werden von glib nicht unterstützt. Bitte aktualisieren Sie Ihre " -#~ "glib.\n" - -#~ msgid "Run linphone as a gnome-applet." -#~ msgstr "Linphone als gnome-Applet ausfhren." - -#~ msgid "Run linphone as a daemon (for use without gnome)." -#~ msgstr "Linphone als daemon ausführen (Verwendung ohne Gnome)." - -#~ msgid "" -#~ "Cannot find network previously used interface %s.\n" -#~ "If your computer is temporary connected to the internet, please connect " -#~ "and then run linphone.\n" -#~ "If you want to change your default network interface, go to the " -#~ "parameters 'box." -#~ msgstr "" -#~ "Linphone konnte die zuvor verwendete Netzwerkschnittstelle %s nicht " -#~ "finden.\n" -#~ "Wenn linphone nur temporär am Internet angeschlossen ist, stellen Sie " -#~ "eine Verbindung her und rufen Sie linphone erneut auf.\n" -#~ "Wenn Sie die vorgegebene Netzwerkschnittstelle ändern wollen, wählen Sie " -#~ "bitte \"Einstellungen\"." - -#~ msgid "" -#~ "Linphone cannot open the audio device.\n" -#~ "It may be caused by other programs using it.\n" -#~ "Do you want linphone to kill these programs (esd or artsd) ?" -#~ msgstr "" -#~ "Linphone kann die Soundschnittstelle nicht öffnen.\n" -#~ "Dies kann durch andere Applikationen verursacht sein.\n" -#~ "Möchten sie diese Programme (esd oder artsd) beenden?" - -#~ msgid "Use it as a:" -#~ msgstr "Verwenden als:" - -#~ msgid "Outbound proxy" -#~ msgstr "Ausgehender Proxy-Server" - -#~ msgid "" -#~ "Toggle this button if the registrar must be used to proxy calls through a " -#~ "firewall." -#~ msgstr "" -#~ "Verwenden Sie diesen Knopf, falls der Registrar zum Tunneln durch einen " -#~ "Firewall verwendet werden muß" - -#~ msgid "kbit/s" -#~ msgstr "Kbits/s" - -#~ msgid "OSS" -#~ msgstr "OSS" - -#~ msgid "ALSA" -#~ msgstr "ALSA" - -#~ msgid "Automatically kill applications using soundcard when needed" -#~ msgstr "Applikationen die die Soundkarte verwenden, automatisch beenden." - -#~ msgid "" -#~ "Your computer is connected to several networks. Check in the global " -#~ "parameters if Linphone uses the one that you want." -#~ msgstr "" -#~ "Ihr Rechner ist an mehere Netze angeschlossen. Stellen Sie sicher, daß in " -#~ "den Globalen Parametern die richtige Schnittstelle selektiert ist." - -#~ msgid "" -#~ "Linphone failed to open the sound device. See the README file included in " -#~ "the distribution for details." -#~ msgstr "" -#~ "Linphone konnte die Soundschnittstelle nicht öffnen. Weitere " -#~ "Informationen finden Sie in der README-Datei (enthalten in der " -#~ "Distribution)." - -#~ msgid "Interface not found." -#~ msgstr "Schnittstelle nicht gefunden." - -#~ msgid "Warning" -#~ msgstr "Warnung" - -#~ msgid "" -#~ "Linphone cannot open the sound device. It may be caused by other programs " -#~ "using it. Do you want linphone to kill these programs (esd or artsd) ?" -#~ msgstr "" -#~ "Linphone kann die Soundschnittstelle nicht öffnen. Dies kann durch andere " -#~ "Applikationen verursacht sein. Möchten sie diese Programme (esd oder " -#~ "artsd) beenden?" - -#~ msgid "Linphone shutdowns..." -#~ msgstr "Linphone Ende..." - -#~ msgid "" -#~ "Please, wait a few seconds untils linphone unregisters your sip addess " -#~ "from registrar server..." -#~ msgstr "Bitte einige Sekunden warten, bis Sip-Adresse ausgetragen ist." - -#~ msgid "Bad formuled sip address." -#~ msgstr "SIP-Adresse fehlerhaft." - -#~ msgid "Couldn't create pixmap from file: %s" -#~ msgstr "Konnte Pixmap nicht aus Datei %s erzeugen." - -#~ msgid "" -#~ "Linphone did not detect any valid network interface. If you use a " -#~ "temporary internet connection, please connect and then run linphone again." -#~ msgstr "" -#~ "Linphone konnte keine Netzwerkschnittstelle finden. Wenn Sie nur eine " -#~ "temporäre Internetverbindung haben, bitte erneut eine Internetverbindung " -#~ "herstellen und linphone nochmals starten." - -#~ msgid "List of network interfaces on your system." -#~ msgstr "Vorhandene Netzwerkschnittstellen ihres Systems" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/es.po b/po/es.po index f58dac100..f8a5bfba5 100644 --- a/po/es.po +++ b/po/es.po @@ -1,19 +1,22 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. -# FIRST AUTHOR , YEAR. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # +# Translators: msgid "" msgstr "" -"Project-Id-Version: Linphone 0.9.1\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2012-12-06 15:54+0100\n" -"Last-Translator: BERAUDO Guillaume \n" -"Language-Team: es \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Spanish (http://www.transifex.com/projects/p/linphone-gtk/" +"language/es/)\n" +"Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -26,28 +29,25 @@ msgid "Send text to %s" msgstr "Enviar mensaje a %s" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "En llamada " +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "n/a" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "abortada" +msgstr "" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "perdida" +msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "Rechazar" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -63,30 +63,17 @@ msgid_plural "%i seconds" msgstr[0] "%i segundo" msgstr[1] "%i segundos" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, fuzzy, c-format -msgid "%s\t%s" -msgstr "" -"%s\t%s\tCalidad: %s\n" -"%s\t%s %s\t" - #: ../gtk/calllogs.c:337 -#, fuzzy, c-format +#, c-format msgid "" "%s\tQuality: %s\n" "%s\t%s\t" msgstr "" -"%s\t%s\tCalidad: %s\n" -"%s\t%s %s\t" -#: ../gtk/calllogs.c:343 -#, fuzzy, c-format -msgid "" -"%s\t\n" -"%s" +#: ../gtk/calllogs.c:341 +#, c-format +msgid "%s\t%s" msgstr "" -"%s\t%s\tCalidad: %s\n" -"%s\t%s %s\t" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" @@ -101,7 +88,7 @@ msgstr "Yo" msgid "Couldn't find pixmap file: %s" msgstr "No se pudo encontrar el archivo pixmap: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "¡Contacto SIP no válido!" @@ -139,21 +126,14 @@ msgstr "" "ej: c:\\Archivos de Programa\\Linphone)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Confirmación" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "Asistente de configuración de cuenta" +msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Llamar con %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -166,72 +146,66 @@ msgstr "" "contactos?\n" "Si responde no, esta persona será bloqueada temporalmente." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -"Por favor, introduzca la contraseña para el usuario %s\n" -" en el dominio %s:" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "Error en la llamada." +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 -#, fuzzy +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" -msgstr "Llamada terminada" +msgstr "" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Llamada entrante" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Contestar" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 -#, fuzzy +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" -msgstr "Rechazar" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "Llamada en pausa" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "Puertos" +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Enlace a la Web" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - un video-teléfono a través de Internet" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (Opción predeterminada)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "Somos transferidos a %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -239,28 +213,25 @@ msgstr "" "No se ha encontrado una tarjeta de sonido en este equipo.\n" "No será posible realizar o recibir llamadas de audio." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "Un video-teléfono SIP gratuito" #: ../gtk/friendlist.c:505 -#, fuzzy msgid "Add to addressbook" -msgstr "Añadir a la agenda" +msgstr "" #: ../gtk/friendlist.c:691 -#, fuzzy msgid "Presence status" -msgstr "Estado de Presencia" +msgstr "" #: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Nombre" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "Llamada" +msgstr "" #: ../gtk/friendlist.c:726 msgid "Chat" @@ -272,9 +243,9 @@ msgid "Search in %s directory" msgstr "Buscar en el directorio %s" #: ../gtk/friendlist.c:976 -#, fuzzy, c-format +#, c-format msgid "Edit contact '%s'" -msgstr "Editar contacto '%s'" +msgstr "" #: ../gtk/friendlist.c:977 #, c-format @@ -282,9 +253,9 @@ msgid "Delete contact '%s'" msgstr "Eliminar contacto '%s'" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "Eliminar contacto '%s'" +msgstr "" #: ../gtk/friendlist.c:1029 #, c-format @@ -300,9 +271,8 @@ msgid "Status" msgstr "Estado" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Bitrate mínimo (kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -320,109 +290,105 @@ msgstr "Desactivado" msgid "Account" msgstr "Cuenta" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "Inglés" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Francés" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Sueco" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Español" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "Portugués de Brasil" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Polaco" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Alemán" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Ruso" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "Japonés" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Holandés" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Húngaro" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Checo" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "Chino" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "Chino Tradicional" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "Noruego" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Deberá reiniciar linphone para aplicar la nueva selección de lenguaje" -#: ../gtk/propertybox.c:1225 -#, fuzzy +#: ../gtk/propertybox.c:1234 msgid "None" -msgstr "Ninguno." +msgstr "" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "ZRTP" #: ../gtk/update.c:80 -#, fuzzy, c-format +#, c-format msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" msgstr "" -"Una nueva versión está disponible en %s.\n" -"¿Desea abrir el navegador para descargarla?" #: ../gtk/update.c:91 -#, fuzzy msgid "You are running the lastest version." -msgstr "La versión instalada es la última." +msgstr "" #: ../gtk/buddylookup.c:85 msgid "Firstname, Lastname" @@ -433,14 +399,12 @@ msgid "Error communicating with server." msgstr "Error al comunicar con el servidor." #: ../gtk/buddylookup.c:164 -#, fuzzy msgid "Connecting..." -msgstr "Conectando..." +msgstr "" #: ../gtk/buddylookup.c:168 -#, fuzzy msgid "Connected" -msgstr "Conectado" +msgstr "" #: ../gtk/buddylookup.c:172 msgid "Receiving data..." @@ -455,26 +419,21 @@ msgstr[1] "Se encontraron %i contactos" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"¡Bienvenido/a !\n" -"Este asistente le ayudará a utilizar una cuenta SIP para sus llamadas." #: ../gtk/setupwizard.c:43 -#, fuzzy msgid "Create an account on linphone.org" -msgstr "Crear una cuenta eligiendo un nombre de usuario" +msgstr "" #: ../gtk/setupwizard.c:44 -#, fuzzy msgid "I have already a linphone.org account and I just want to use it" -msgstr "Ya tengo una cuenta y quiero utilizarla" +msgstr "" #: ../gtk/setupwizard.c:45 -#, fuzzy msgid "I have already a sip account and I just want to use it" -msgstr "Ya tengo una cuenta y quiero utilizarla" +msgstr "" #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" @@ -485,28 +444,24 @@ msgid "Enter your linphone.org username" msgstr "" #: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4 -#, fuzzy msgid "Username:" -msgstr "Nombre de usuario:" +msgstr "" #: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 -#, fuzzy msgid "Password:" -msgstr "Contraseña:" +msgstr "" #: ../gtk/setupwizard.c:124 msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "Nombre de usuario" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "Contraseña:" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -521,14 +476,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "Nombre de usuario:" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "Contraseña:" +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -559,48 +512,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "Asistente de configuración de cuenta" +msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "Bienvenido al asistente de configuración de cuenta" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Asistente de configuración de cuenta" -#: ../gtk/setupwizard.c:629 -#, fuzzy +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" -msgstr "Configurar una cuenta SIP" +msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "Llamar a #%i" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -608,18 +559,16 @@ msgid "Transfer to call #%i with %s" msgstr "Transferir a llamada #%i con %s" #: ../gtk/incall_view.c:211 ../gtk/incall_view.c:214 -#, fuzzy msgid "Not used" -msgstr "No encontrado" +msgstr "" #: ../gtk/incall_view.c:221 msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "La llamada ha fallado." +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -630,9 +579,8 @@ msgid "Going through one or more NATs" msgstr "" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "Redigirida" +msgstr "" #: ../gtk/incall_view.c:231 msgid "Through a relay server" @@ -643,23 +591,20 @@ msgid "uPnP not activated" msgstr "" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "Búsqueda STUN en proceso…" +msgstr "" #: ../gtk/incall_view.c:243 -#, fuzzy msgid "uPnp not available" -msgstr "no disponible" +msgstr "" #: ../gtk/incall_view.c:245 msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "La llamada ha fallado." +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -678,126 +623,113 @@ msgid "%ix%i @ %f fps" msgstr "" #: ../gtk/incall_view.c:304 -#, fuzzy, c-format +#, c-format msgid "%.3f seconds" -msgstr "%i segundo" +msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 -#, fuzzy +#: ../gtk/incall_view.c:511 msgid "Calling..." -msgstr " Llamando..." +msgstr "" -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00::00::00" -#: ../gtk/incall_view.c:515 -#, fuzzy +#: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "Llamada entrante" +msgstr "" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "buena" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "media" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "mala" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "muy mala" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "demasiado mala" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "no disponible" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "Cifrada con SRTP" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Cifrada con ZRTP - [token de autenticación: %s]" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "Set sin verificar" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "Set verificado" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "En conferencia" -#: ../gtk/incall_view.c:702 -#, fuzzy +#: ../gtk/incall_view.c:722 msgid "In call" -msgstr "En llamada " +msgstr "" -#: ../gtk/incall_view.c:738 -#, fuzzy +#: ../gtk/incall_view.c:758 msgid "Paused call" -msgstr "Llamada en pausa" +msgstr "" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i::%02i::%02i" - -#: ../gtk/incall_view.c:772 -#, fuzzy +#: ../gtk/incall_view.c:794 msgid "Call ended." -msgstr "Llamada finalizada." +msgstr "" -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 -#, fuzzy +#: ../gtk/incall_view.c:828 msgid "Transfer done." -msgstr "Transferir" +msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "Transferir" +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "Reanudar" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "Pausar" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 -#, fuzzy +#: ../gtk/incall_view.c:948 msgid "(Paused)" -msgstr "Pausar" +msgstr "" #: ../gtk/loginframe.c:88 #, c-format @@ -831,32 +763,26 @@ msgid "Too loud" msgstr "" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"¡Bienvenido/a !\n" -"Este asistente le ayudará a utilizar una cuenta SIP para sus llamadas." #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Dispositivo de captura:" +msgstr "" #: ../gtk/audio_assistant.c:329 -#, fuzzy msgid "Recorded volume" -msgstr "Fuente de grabación:" +msgstr "" #: ../gtk/audio_assistant.c:333 msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Dispositivo de reproducción:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -875,14 +801,12 @@ msgid "Let's start Linphone now" msgstr "" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "Asistente de configuración de cuenta" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "Asistente de configuración de cuenta" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -897,19 +821,16 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "Nombre del destinatario" +msgstr "" #: ../gtk/main.ui.h:2 -#, fuzzy msgid "Send" -msgstr "Enviar" +msgstr "" #: ../gtk/main.ui.h:3 -#, fuzzy msgid "End conference" -msgstr "En conferencia" +msgstr "" #: ../gtk/main.ui.h:7 msgid "Record this call to an audio file" @@ -928,14 +849,12 @@ msgid "Transfer" msgstr "Transferir" #: ../gtk/main.ui.h:14 -#, fuzzy msgid "In call" -msgstr "En llamada " +msgstr "" #: ../gtk/main.ui.h:15 -#, fuzzy msgid "Duration" -msgstr "Duración" +msgstr "" #: ../gtk/main.ui.h:16 msgid "Call quality rating" @@ -946,9 +865,8 @@ msgid "All users" msgstr "Todos los usuarios" #: ../gtk/main.ui.h:18 -#, fuzzy msgid "Online users" -msgstr "Usuarios conectados" +msgstr "" #: ../gtk/main.ui.h:19 msgid "ADSL" @@ -959,36 +877,32 @@ msgid "Fiber Channel" msgstr "Canal de Fibra" #: ../gtk/main.ui.h:21 -#, fuzzy msgid "Default" -msgstr "Predeterminado" +msgstr "" #: ../gtk/main.ui.h:22 msgid "_Options" msgstr "_Opciones" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Confirmación" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" msgstr "" #: ../gtk/main.ui.h:25 -#, fuzzy msgid "Enable self-view" -msgstr "Activar vista propia" +msgstr "" #: ../gtk/main.ui.h:26 msgid "_Help" msgstr "_Ayuda" #: ../gtk/main.ui.h:27 -#, fuzzy msgid "Show debug window" -msgstr "Mostrar ventana de depuración" +msgstr "" #: ../gtk/main.ui.h:28 msgid "_Homepage" @@ -999,57 +913,48 @@ msgid "Check _Updates" msgstr "Buscar_Actualizaciones" #: ../gtk/main.ui.h:30 -#, fuzzy msgid "Account assistant" -msgstr "Asistente de configuración de cuenta" +msgstr "" #: ../gtk/main.ui.h:32 -#, fuzzy msgid "SIP address or phone number:" -msgstr "Dirección SIP o número de teléfono" +msgstr "" #: ../gtk/main.ui.h:33 msgid "Initiate a new call" msgstr "Iniciar nueva llamada" #: ../gtk/main.ui.h:34 -#, fuzzy msgid "Contacts" -msgstr "Contactos" +msgstr "" #: ../gtk/main.ui.h:35 msgid "Search" msgstr "Buscar" #: ../gtk/main.ui.h:36 -#, fuzzy msgid "Add contacts from directory" -msgstr "Añadir contactos desde un directorio" +msgstr "" #: ../gtk/main.ui.h:37 -#, fuzzy msgid "Add contact" -msgstr "Añadir contacto" +msgstr "" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "Llamadas recientes " +msgstr "" #: ../gtk/main.ui.h:39 -#, fuzzy msgid "My current identity:" -msgstr "Mi identidad actual:" +msgstr "" #: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7 -#, fuzzy msgid "Username" -msgstr "Nombre de usuario" +msgstr "" #: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8 -#, fuzzy msgid "Password" -msgstr "Contraseña:" +msgstr "" #: ../gtk/main.ui.h:42 msgid "Internet connection:" @@ -1064,28 +969,24 @@ msgid "UserID" msgstr "UserID" #: ../gtk/main.ui.h:45 -#, fuzzy msgid "Login information" -msgstr "Datos de inicio de sesión" +msgstr "" #: ../gtk/main.ui.h:46 -#, fuzzy -msgid "Welcome !" -msgstr "¡Bienvenido/a!" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -#, fuzzy -msgid "About linphone" -msgstr "Acerca de linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -#, fuzzy -msgid "(C) Belledonne Communications,2010\n" -msgstr "(C) Belledonne Communications, 2010\n" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." @@ -1094,7 +995,6 @@ msgstr "" "(rfc3261)" #: ../gtk/about.ui.h:5 -#, fuzzy msgid "" "fr: Simon Morlat\n" "en: Simon Morlat and Delphine Perreau\n" @@ -1109,22 +1009,10 @@ msgid "" "hu: anonymous\n" "he: Eli Zaretskii \n" msgstr "" -"fr: Simon Morlat\n" -"en: Simon Morlat and Delphine Perreau\n" -"it: Alberto Zanoni \n" -"de: Jean-Jacques Sarton \n" -"sv: Daniel Nylander \n" -"es: Jesus Benitez \n" -"ja: YAMAGUCHI YOSHIYA \n" -"pt_BR: Rafael Caesar Lenzi \n" -"pl: Robert Nasiadek \n" -"cs: Petr Pisar \n" -"hu: anonymous\n" #: ../gtk/contact.ui.h:2 -#, fuzzy msgid "SIP Address" -msgstr "Dirección SIP" +msgstr "" #: ../gtk/contact.ui.h:3 msgid "Show this contact presence status" @@ -1135,23 +1023,20 @@ msgid "Allow this contact to see my presence status" msgstr "Permitir que este contacto vea mi estado de presencia" #: ../gtk/contact.ui.h:5 -#, fuzzy msgid "Contact information" -msgstr "Información de contacto" +msgstr "" #: ../gtk/log.ui.h:1 -#, fuzzy msgid "Linphone debug window" -msgstr "Ventana de depuración de linphone" +msgstr "" #: ../gtk/log.ui.h:2 msgid "Scroll to end" msgstr "" #: ../gtk/password.ui.h:1 -#, fuzzy msgid "Linphone - Authentication required" -msgstr "Linphone - Autenticación necesaria" +msgstr "" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" @@ -1174,9 +1059,8 @@ msgid "Linphone - Configure a SIP account" msgstr "Linphone - Configurar una cuenta SIP" #: ../gtk/sip_account.ui.h:2 -#, fuzzy msgid "Your SIP identity:" -msgstr "Su identidad SIP" +msgstr "" #: ../gtk/sip_account.ui.h:3 msgid "Looks like sip:@" @@ -1187,23 +1071,20 @@ msgid "sip:" msgstr "sip:" #: ../gtk/sip_account.ui.h:5 -#, fuzzy msgid "SIP Proxy address:" -msgstr "Dirección del SIP Proxy" +msgstr "" #: ../gtk/sip_account.ui.h:6 msgid "Looks like sip:" msgstr "Del tipo sip:" #: ../gtk/sip_account.ui.h:7 -#, fuzzy msgid "Registration duration (sec):" -msgstr "Duración del registro (seg):" +msgstr "" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Ruta (opcional):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1214,23 +1095,20 @@ msgid "Route (optional):" msgstr "Ruta (opcional):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Transporte " +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" msgstr "Registrarse" #: ../gtk/sip_account.ui.h:13 -#, fuzzy msgid "Publish presence information" -msgstr "Publicar información de presencia" +msgstr "" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Activar" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1265,16 +1143,14 @@ msgid "CIF" msgstr "CIF" #: ../gtk/parameters.ui.h:8 -#, fuzzy msgid "Audio codecs" -msgstr "Códecs de Audio" +msgstr "" #: ../gtk/parameters.ui.h:9 -#, fuzzy msgid "Video codecs" -msgstr "Códecs de Vídeo" +msgstr "" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "C" @@ -1307,9 +1183,8 @@ msgid "Use IPv6 instead of IPv4" msgstr "Utilizar IPv6 en lugar de IPv4" #: ../gtk/parameters.ui.h:18 -#, fuzzy msgid "Transport" -msgstr "Transporte " +msgstr "" #: ../gtk/parameters.ui.h:19 msgid "Media encryption type" @@ -1328,9 +1203,8 @@ msgid "Fixed" msgstr "" #: ../gtk/parameters.ui.h:23 -#, fuzzy msgid "Media encryption is mandatory" -msgstr "Tipo de cifrado de medios" +msgstr "" #: ../gtk/parameters.ui.h:24 msgid "Tunnel" @@ -1341,14 +1215,12 @@ msgid "DSCP fields" msgstr "" #: ../gtk/parameters.ui.h:26 -#, fuzzy msgid "SIP/TCP port" -msgstr "Puerto SIP" +msgstr "" #: ../gtk/parameters.ui.h:27 -#, fuzzy msgid "SIP/UDP port" -msgstr "Puerto SIP" +msgstr "" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1359,95 +1231,80 @@ msgid "Direct connection to the Internet" msgstr "Conexión directa a Internet" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "Tras un NAT/Firewall (especificar la IP de la puerta de enlace debajo)" +msgstr "" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Tras un NAT/Firewall (utilizar STUN para resolver)" #: ../gtk/parameters.ui.h:32 -#, fuzzy msgid "Behind NAT / Firewall (use ICE)" -msgstr "Tras un NAT/Firewall (utilizar STUN para resolver)" +msgstr "" #: ../gtk/parameters.ui.h:33 -#, fuzzy msgid "Behind NAT / Firewall (use uPnP)" -msgstr "Tras un NAT/Firewall (utilizar STUN para resolver)" +msgstr "" #: ../gtk/parameters.ui.h:34 -#, fuzzy msgid "Public IP address:" -msgstr "Dirección IP pública:" +msgstr "" #: ../gtk/parameters.ui.h:35 -#, fuzzy msgid "Stun server:" -msgstr "Servidor STUN" +msgstr "" #: ../gtk/parameters.ui.h:36 -#, fuzzy msgid "NAT and Firewall" -msgstr "NAT y Firewall" +msgstr "" #: ../gtk/parameters.ui.h:37 -#, fuzzy msgid "Network settings" -msgstr "Configuración de red" +msgstr "" #: ../gtk/parameters.ui.h:38 -#, fuzzy msgid "Ring sound:" -msgstr "Tono de llamada:" +msgstr "" #: ../gtk/parameters.ui.h:39 msgid "ALSA special device (optional):" msgstr "Dispositivo especial ALSA (opcional):" #: ../gtk/parameters.ui.h:40 -#, fuzzy msgid "Capture device:" -msgstr "Dispositivo de captura:" +msgstr "" #: ../gtk/parameters.ui.h:41 -#, fuzzy msgid "Ring device:" -msgstr "Dispositivo de sonido:" +msgstr "" #: ../gtk/parameters.ui.h:42 -#, fuzzy msgid "Playback device:" -msgstr "Dispositivo de reproducción:" +msgstr "" #: ../gtk/parameters.ui.h:43 msgid "Enable echo cancellation" msgstr "Activar cancelación de eco" #: ../gtk/parameters.ui.h:44 -#, fuzzy msgid "Audio" -msgstr "Audio" +msgstr "" #: ../gtk/parameters.ui.h:45 -#, fuzzy msgid "Video input device:" -msgstr "Dispositivo de entrada de vídeo:" +msgstr "" #: ../gtk/parameters.ui.h:46 msgid "Prefered video resolution:" msgstr "Resolución de vídeo preferida:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Dispositivo de entrada de vídeo:" +msgstr "" #: ../gtk/parameters.ui.h:48 -#, fuzzy msgid "Video" -msgstr "Vídeo " +msgstr "" #: ../gtk/parameters.ui.h:49 msgid "Multimedia settings" @@ -1462,19 +1319,16 @@ msgid "Your display name (eg: John Doe):" msgstr "Su nombre a mostrar (x ej: Pepito Pérez):" #: ../gtk/parameters.ui.h:52 -#, fuzzy msgid "Your username:" -msgstr "Su nombre de usuario:" +msgstr "" #: ../gtk/parameters.ui.h:53 -#, fuzzy msgid "Your resulting SIP address:" -msgstr "Su dirección SIP resultante:" +msgstr "" #: ../gtk/parameters.ui.h:54 -#, fuzzy msgid "Default identity" -msgstr "Identidad predeterminada" +msgstr "" #: ../gtk/parameters.ui.h:55 msgid "Wizard" @@ -1493,18 +1347,16 @@ msgid "Remove" msgstr "Eliminar" #: ../gtk/parameters.ui.h:59 -#, fuzzy msgid "Proxy accounts" -msgstr "Cuentas Proxy" +msgstr "" #: ../gtk/parameters.ui.h:60 msgid "Erase all passwords" msgstr "Borrar todas las contraseñas" #: ../gtk/parameters.ui.h:61 -#, fuzzy msgid "Privacy" -msgstr "Privacidad" +msgstr "" #: ../gtk/parameters.ui.h:62 msgid "Manage SIP Accounts" @@ -1519,9 +1371,8 @@ msgid "Disable" msgstr "Desactivar" #: ../gtk/parameters.ui.h:65 -#, fuzzy msgid "Codecs" -msgstr "Códecs" +msgstr "" #: ../gtk/parameters.ui.h:66 msgid "0 stands for \"unlimited\"" @@ -1552,98 +1403,80 @@ msgid "Bandwidth control" msgstr "Control de ancho de banda" #: ../gtk/parameters.ui.h:72 -#, fuzzy msgid "Codecs" -msgstr "Códecs" +msgstr "" #: ../gtk/parameters.ui.h:73 -#, fuzzy msgid "Language" -msgstr "Idioma" +msgstr "" #: ../gtk/parameters.ui.h:74 msgid "Show advanced settings" msgstr "Mostrar opciones avanzadas" #: ../gtk/parameters.ui.h:75 -#, fuzzy msgid "Level" -msgstr "Nivel" +msgstr "" #: ../gtk/parameters.ui.h:76 -#, fuzzy msgid "User interface" -msgstr "Interfaz de Usuario" +msgstr "" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Dirección del Servidor:" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Error de autenticación" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "etiqueta" +msgid "LDAP Account setup" +msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Cuentas Proxy" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 -#, fuzzy +#: ../gtk/parameters.ui.h:82 msgid "Done" -msgstr "Hecho" +msgstr "" #: ../gtk/buddylookup.ui.h:1 -#, fuzzy msgid "Search contacts in directory" -msgstr "Buscar contactos en directorio" +msgstr "" #: ../gtk/buddylookup.ui.h:2 msgid "Add to my list" msgstr "Añadir a mi lista" #: ../gtk/buddylookup.ui.h:3 -#, fuzzy msgid "Search somebody" -msgstr "Buscar a alguien" +msgstr "" #: ../gtk/waiting.ui.h:1 -#, fuzzy msgid "Linphone" -msgstr "Linphone" +msgstr "" #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "Espere por favor" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Configuración" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" msgstr "SIP" #: ../gtk/dscp_settings.ui.h:3 -#, fuzzy msgid "Audio RTP stream" -msgstr "Audio RTP/UDP:" +msgstr "" #: ../gtk/dscp_settings.ui.h:4 -#, fuzzy msgid "Video RTP stream" -msgstr "Vídeo RTP/UDP" +msgstr "" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" @@ -1654,14 +1487,12 @@ msgid "Call statistics" msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" -msgstr "Códecs de Audio" +msgstr "" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" -msgstr "Códecs de Vídeo" +msgstr "" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1680,32 +1511,28 @@ msgid "Video Media connectivity" msgstr "" #: ../gtk/call_statistics.ui.h:8 -#, fuzzy msgid "Round trip time" -msgstr "Propiedades de sonido" +msgstr "" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" msgstr "" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "Resolución de vídeo preferida:" +msgstr "" #: ../gtk/call_statistics.ui.h:11 msgid "RTP profile" msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "Información de contacto" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 -#, fuzzy msgid "Configure VoIP tunnel" -msgstr "Configurar una cuenta SIP" +msgstr "" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" @@ -1723,84 +1550,21 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "D" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "B" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "A" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Configuración" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" msgstr "" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "no disponible" +msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Códecs" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1815,9 +1579,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Audio" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1833,18 +1596,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "Dirección SIP" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Buscar a alguien" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1859,9 +1620,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Vídeo " +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1892,98 +1652,82 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Conectando..." +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 -#, fuzzy +#: ../coreapi/linphonecore.c:1510 msgid "Ready" -msgstr "Preparado" +msgstr "" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Confirmación" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Buscando el número de teléfono del destinatario…" -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "No se ha podido resolver este número." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 -#, fuzzy +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" -msgstr "Contactando" +msgstr "" -#: ../coreapi/linphonecore.c:2425 -#, fuzzy +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" -msgstr "No se pudo llamar" +msgstr "" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Disculpe, se ha alcanzado el máximo número de llamadas simultáneas" -#: ../coreapi/linphonecore.c:2745 -#, fuzzy +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" -msgstr "le está llamando" +msgstr "" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "y ha solicitado auto respuesta." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "." - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "Modificando parámetros de llamada…" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Conectado." -#: ../coreapi/linphonecore.c:3220 -#, fuzzy +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" -msgstr "Llamada abortada" +msgstr "" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "No se pudo pausar la llamada" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "Pausando la llamada actual..." -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "Búsqueda STUN en proceso…" -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" #: ../coreapi/friend.c:33 -#, fuzzy msgid "Online" -msgstr "Conectado" +msgstr "" #: ../coreapi/friend.c:36 msgid "Busy" @@ -1998,9 +1742,8 @@ msgid "Away" msgstr "Ausente" #: ../coreapi/friend.c:45 -#, fuzzy msgid "On the phone" -msgstr "Al teléfono" +msgstr "" #: ../coreapi/friend.c:48 msgid "Out to lunch" @@ -2011,33 +1754,30 @@ msgid "Do not disturb" msgstr "No molestar" #: ../coreapi/friend.c:54 -#, fuzzy msgid "Moved" -msgstr "Fuera" +msgstr "" #: ../coreapi/friend.c:57 msgid "Using another messaging service" msgstr "Utilizando otro servicio de mensajería" #: ../coreapi/friend.c:60 -#, fuzzy msgid "Offline" -msgstr "Desconectado" +msgstr "" #: ../coreapi/friend.c:63 msgid "Pending" msgstr "Pendiente" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Duración" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Bug-desconocido" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -2045,7 +1785,7 @@ msgstr "" "La dirección del Proxy SIP que ha introducido no es válida, debe empezar con " "\"sip:\" seguido del hostname." -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -2054,733 +1794,159 @@ msgstr "" "Debe ser del tipo sip:username@proxydomain, como por ejemplo sip:" "alice@example.net" -#: ../coreapi/proxy.c:1369 -#, fuzzy, c-format +#: ../coreapi/proxy.c:1377 +#, c-format msgid "Could not login as %s" -msgstr "No se pudo iniciar sesión como %s" +msgstr "" -#: ../coreapi/callbacks.c:355 -#, fuzzy +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." -msgstr "El destinatario está sonando..." +msgstr "" -#: ../coreapi/callbacks.c:373 -#, fuzzy +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." -msgstr "El destinatario está sonando..." +msgstr "" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "Medios iniciales." -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "La llamada con %s está puesta en pausa." -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "Llamada respondida por %s - en espera." -#: ../coreapi/callbacks.c:459 -#, fuzzy +#: ../coreapi/callbacks.c:498 msgid "Call resumed." -msgstr "Llamada reanudada." +msgstr "" -#: ../coreapi/callbacks.c:464 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:502 +#, c-format msgid "Call answered by %s." -msgstr "Llamada respondida por %s." +msgstr "" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 -#, fuzzy -msgid "We have been resumed." -msgstr "Nos han reanudado..." +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" -#: ../coreapi/callbacks.c:521 +#: ../coreapi/callbacks.c:560 +msgid "We have been resumed." +msgstr "" + +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 -#, fuzzy +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." -msgstr "La llamada ha sido actualizada por el destinatario..." +msgstr "" -#: ../coreapi/callbacks.c:658 -#, fuzzy +#: ../coreapi/callbacks.c:705 msgid "Call terminated." -msgstr "Llamada finalizada." +msgstr "" -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "El usuario está ocupado." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "El usuario no está disponible temporalmente." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "El usuario no quiere que le molesten." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Llamada rechazada." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "Redigirida" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." +#: ../coreapi/callbacks.c:835 +msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:798 -#, fuzzy -msgid "Call failed." -msgstr "La llamada ha fallado." - -#: ../coreapi/callbacks.c:878 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:913 +#, c-format msgid "Registration on %s successful." -msgstr "Se ha registrado con éxito en %s." +msgstr "" -#: ../coreapi/callbacks.c:879 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:914 +#, c-format msgid "Unregistration on %s done." -msgstr "Cancelación de registro en %s completada." +msgstr "" -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "timeout sin respuesta" -#: ../coreapi/callbacks.c:900 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:935 +#, c-format msgid "Registration on %s failed: %s" -msgstr "El registro en %s ha fallado." +msgstr "" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "El tóken de autenticación es%s" +msgstr "" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "Tiene %i llamada perdida." msgstr[1] "Tiene %i llamadas perdidas." -#~ msgid "aborted" -#~ msgstr "abortada" - -#~ msgid "completed" -#~ msgstr "completada" - -#~ msgid "missed" -#~ msgstr "perdida" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s en %s\n" -#~ "De: %s\n" -#~ "Para: %s\n" -#~ "Estado: %s\n" -#~ "Duración: %i min %i seg\n" - -#~ msgid "Outgoing call" -#~ msgstr "Llamada saliente" - -#~ msgid "No response." -#~ msgstr "No hay respuesta." - -#~ msgid "Protocol error." -#~ msgstr "Error de protocolo." - -#, fuzzy -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Dirección SIP mal escrita. Una dirección SIP es del tipo " - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Tu ordenador parece estar usando los controladores de sonido de ALSA.\n" -#~ "Ésta es la mejor elección. Sin embargo, el módulo de emulación pcm de " -#~ "OSS\n" -#~ "no se encuentra y linphone lo necesita. Por favor ejecute\n" -#~ "'modprobe snd-pcm-oss' como root para cargarlo." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Tu ordenador parece estar usando los controladores de sonido de ALSA.\n" -#~ "Ésta es la mejor elección. Sin embargo, el módulo de emulación mixer de " -#~ "OSS\n" -#~ "no se encuentra y linphone lo necesita. Por favor ejecute\n" -#~ " 'modprobe snd-mixer-oss' como root para cargarlo." - -#~ msgid "Chat with %s" -#~ msgstr "Conversación con %s" - -#~ msgid "by %s" -#~ msgstr "por %s" - -#~ msgid "Please choose a username:" -#~ msgstr "Por favor, elija un nombre de usuario" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "Comprobando si '%s' está disponible..." - -#~ msgid "Please wait..." -#~ msgstr "Espere por favor..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "" -#~ "El nombre de usuario elegido ya existe. Por favor, intente con uno nuevo." - -#~ msgid "Ok !" -#~ msgstr "¡Ok!" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "" -#~ "Error en la comunicación, por favor inténtelo de nuevo más adelante." - -#~ msgid "Choosing a username" -#~ msgstr "Eligiendo un nombre de usuario" - -#~ msgid "Verifying" -#~ msgstr "Verificando" - -#~ msgid "Creating your account" -#~ msgstr "Creando su cuenta" - -#~ msgid "Now ready !" -#~ msgstr "¡Ya está listo!" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "Activar vídeo" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "Introducir nombre de usuario, teléfono o dirección SIP" - -#~ msgid "Keypad" -#~ msgstr "Teclado Numérico" - -#~ msgid "Lookup:" -#~ msgstr "Búsqueda:" - -#~ msgid "in" -#~ msgstr "en" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "¡Registrar en la red\n" -#~ "virtual FONICS!" - -#~ msgid "We are being paused..." -#~ msgstr "Nos están poniendo en pausa..." - -#~ msgid "No common codecs" -#~ msgstr "No hay códecs comunes" - -#, fuzzy -#~ msgid "Contact list" -#~ msgstr "Lista de contactos " - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "Audio & Vídeo" - -#, fuzzy -#~ msgid "Audio only" -#~ msgstr "Sólo audio" - -#, fuzzy -#~ msgid "Duration:" -#~ msgstr "Duración:" - -#, fuzzy -#~ msgid "_Linphone" -#~ msgstr "_Linphone" - -#, fuzzy -#~ msgid "gtk-cancel" -#~ msgstr "gtk-cancelar" - -#, fuzzy -#~ msgid "gtk-ok" -#~ msgstr "gtk-ok" - -#, fuzzy -#~ msgid "gtk-close" -#~ msgstr "gtk-cerrar." - -#, fuzzy -#~ msgid "_Modes" -#~ msgstr "_Modos" - -#, fuzzy -#~ msgid "" -#~ "Audio codecs\n" -#~ "Video codecs" -#~ msgstr "" -#~ "Códecs de audio\n" -#~ "Códecs de vídeo" - -#, fuzzy -#~ msgid "Request Cancelled." -#~ msgstr "Petición cancelada." - -#~ msgid "User cannot be found at given address." -#~ msgstr "No se encontró ningún usuario en la dirección indicada." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "El usuario remoto no soporta ninguno de los códecs propuestos." - -#~ msgid "Timeout." -#~ msgstr "Tiempo agotado." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Se encontró el host remoto pero rechazó la conexión." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "El usuario no está disponible en este momento pero le invita\n" -#~ "a contactarle usando el siguiente recurso alternativo:" - -#, fuzzy -#~ msgid "Gone" -#~ msgstr "Ausente" - -#, fuzzy -#~ msgid "Display filters" -#~ msgstr "Filtros a mostrar" - -#, fuzzy -#~ msgid "_Properties" -#~ msgstr "_Propiedades" - -#, fuzzy -#~ msgid "Proxy in use" -#~ msgstr "Proxy en uso" - -#~ msgid "Sound" -#~ msgstr "Sonido" - -#, fuzzy -#~ msgid "Proxy accounts" -#~ msgstr "Cuentas Proxy" - -#~ msgid "Address book" -#~ msgstr "Agenda" - -#, fuzzy -#~ msgid "Shows the address book" -#~ msgstr "Muestra la agenda" - -#~ msgid "Show more..." -#~ msgstr "Mostrar más..." - -#~ msgid "Playback level:" -#~ msgstr "Nivel de reproducción:" - -#~ msgid "Recording level:" -#~ msgstr "Nivel de Grabación:" - -#, fuzzy -#~ msgid "Ring level:" -#~ msgstr "Nivel de tono de llamada:" - -#~ msgid "Reachable" -#~ msgstr "Disponible" - -#~ msgid "Busy, I'll be back in " -#~ msgstr "Ocupado, estaré de vuelta en " - -#~ msgid "The other party will be informed that you'll be back in X minutes" -#~ msgstr "" -#~ "Se le comunicará a la otra persona que estará de vuelta en X minutos" - -#~ msgid "mn" -#~ msgstr "min" - -#~ msgid "Moved temporarily" -#~ msgstr "Vengo enseguida" - -#~ msgid "Alternative service" -#~ msgstr "Servicio alternativo" - -#~ msgid "URL:" -#~ msgstr "URL:" - -#~ msgid "Presence" -#~ msgstr "Presencia" - -#~ msgid "Press digits to send DTMFs." -#~ msgstr "Pulsa los dígitos para mandar DTMFs." - -#~ msgid "DTMF" -#~ msgstr "DTMF" - -#~ msgid "" -#~ "Linphone is a web-phone.\n" -#~ "It is compatible with SIP and RTP protocols." -#~ msgstr "" -#~ "Linphone es un teléfono web.\n" -#~ "Es compatible con los protocolos SIP y RTP." - -#, fuzzy -#~ msgid "Use IPv6 network (if available)" -#~ msgstr "Utilizar red IPv6 (si está disponible)" - -#, fuzzy -#~ msgid "" -#~ "These options is only for users in a private network, behind a gateway. " -#~ "If you are not in this situation, then leave this empty." -#~ msgstr "" -#~ "Esta opción es sólo para usuarios de una red privada, tras una puerta de " -#~ "enlace.Si no es su caso, deje esto vacío." - -#, fuzzy -#~ msgid "NAT traversal options (experimental)" -#~ msgstr "Opciones para NAT transversal (experimental)" - -#, fuzzy -#~ msgid "Number of buffered miliseconds (jitter compensation):" -#~ msgstr "Número de milisegundos en el buffer (compensación jitter):" - -#~ msgid "RTP port used for audio:" -#~ msgstr "Puerto RTP usado para audio:" - -#~ msgid "micro" -#~ msgstr "micrófono" - -#~ msgid "Run sip user agent on port:" -#~ msgstr "Ejecutar el agente de usuario SIP en el puerto:" - -#~ msgid "It is strongly recommended to use port 5060." -#~ msgstr "Se recomienda encarecidamente usar el puerto 5060." - -#~ msgid "@" -#~ msgstr "@" - -#~ msgid "Identity" -#~ msgstr "Identidad" - -#, fuzzy -#~ msgid "Add proxy/registrar" -#~ msgstr "Añadir proxy/registrador" - -#~ msgid "Remote services" -#~ msgstr "Servicios remotos" - -#~ msgid "List of audio codecs, in order of preference:" -#~ msgstr "Lista de códecs de audio, en orden de preferencia:" - -#~ msgid "" -#~ "Note: Codecs in red are not usable according to your connection type to " -#~ "the internet." -#~ msgstr "" -#~ "Nota: Los códecs en ROJO no son adecuados para su conexión a Internet." - -#, fuzzy -#~ msgid "No information available" -#~ msgstr "Información no disponible" - -#, fuzzy -#~ msgid "Codec information" -#~ msgstr "Información de códec" - -#~ msgid "Address Book" -#~ msgstr "Agenda" - -#~ msgid "Select" -#~ msgstr "Seleccionar" - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you to contact him " -#~ "using the following alternate resource:" -#~ msgstr "" -#~ "El usuario no está disponible en este momento pero le invita a " -#~ "contactarle usando el siguiente recurso alternativo:" - -#~ msgid "None." -#~ msgstr "Ninguno." - -#, fuzzy -#~ msgid "Name:" -#~ msgstr "Nombre:" - -#, fuzzy -#~ msgid "Bad sip address: a sip address looks like sip:user@domain" -#~ msgstr "" -#~ "Dirección SIP mal escrita. Una dirección SIP es del tipo " - -#~ msgid "Communication ended." -#~ msgstr "Comunicación finalizada." - -#, fuzzy -#~ msgid "Firewall 's external ip address (in dot notations):" -#~ msgstr "Dirección IP del cortafuegos (en notación con puntos):" - -#~ msgid "Index" -#~ msgstr "Índice" - -#~ msgid "28k modem" -#~ msgstr "módem 28k" - -#~ msgid "56k modem" -#~ msgstr "módem 56k" - -#~ msgid "64k modem (numeris)" -#~ msgstr "módem 64k (numeris)" - -#~ msgid "ADSL or Cable modem" -#~ msgstr "ADSL o Cable" - -#~ msgid "Ethernet or equivalent" -#~ msgstr "Ethernet o equivalente" - -#~ msgid "Connection type:" -#~ msgstr "Tipo de conexión:" - -#, fuzzy -#~ msgid "" -#~ "Linphone could not open audio device %s. Check if your sound card is " -#~ "fully configured and working." -#~ msgstr "" -#~ "Linphone no pudo abrir el dispositivo de audio %s. Compruebe que su " -#~ "tarjeta de sonido está completamente configurada y operativa." - -#~ msgid "Type here the sip address of the person you want to call." -#~ msgstr "Escriba aquí la dirección SIP del destinatario." - -#~ msgid "" -#~ "Release or\n" -#~ "Refuse" -#~ msgstr "" -#~ "Descolgar o\n" -#~ "Rechazar" - -#~ msgid "%s. Retry after %i minute(s)." -#~ msgstr "%s. Reintentar tras %i minutos." - -#, fuzzy -#~ msgid "Timeout..." -#~ msgstr "Tiempo agotado..." - -#~ msgid "Toggle this if you want to be registered on a remote server." -#~ msgstr "Marque esta opción si desea registrarse en un servidor remoto." - -#~ msgid "Address of record:" -#~ msgstr "Dirección de registro:" - -#~ msgid "" -#~ "The password used for registration. On some servers it is not necessary" -#~ msgstr "" -#~ "La contraseña usada para registrarse. En algunos servidores no es " -#~ "necesaria" - -#~ msgid "Use this registrar server as outbound proxy." -#~ msgstr "Usar este servidor de registro como proxy de salida." - -#~ msgid "sip address:" -#~ msgstr "Dirección SIP:" - -#~ msgid "Modify" -#~ msgstr "Modificar" - -#~ msgid "" -#~ "You are currently using the i810_audio driver.\n" -#~ "This driver is buggy and so does not work with Linphone.\n" -#~ "We suggest that you replace it by its equivalent ALSA driver,\n" -#~ "either with packages from your distribution, or by downloading\n" -#~ "ALSA drivers at http://www.alsa-project.org." -#~ msgstr "" -#~ "Está usando actualmente el controlador i810_audio.\n" -#~ "Este controlador tiene errores y por tanto no funciona con Linphone.\n" -#~ "Le recomendamos que lo sustituya por el controlador equivalente de ALSA,\n" -#~ "ya sea mediante paquetes de su distribución, o descargando\n" -#~ "controladores ALSA de http://www.alsa-project.org." - -#~ msgid "Unregistration successful." -#~ msgstr "Cancelación del registro completada." - -#~ msgid "C: 2001" -#~ msgstr "Abril 2001" - -#~ msgid "Select network interface to use:" -#~ msgstr "Seleccione la interfaz de red para usar:" - -#~ msgid "Network interface properties" -#~ msgstr "Propiedades de Interfaz de Red:" - -#~ msgid "RTP" -#~ msgstr "RTP" - -#~ msgid "Threads not supported by glib. Upgrade your glib.\n" -#~ msgstr "Threads no soportados por glib. Actualize su glib.\n" - -#~ msgid "Run linphone as a gnome-applet." -#~ msgstr "Ejecutar linphone como un gnome-applet." - -#~ msgid "Run linphone as a daemon (for use without gnome)." -#~ msgstr "Ejecutar linphone como demonio (para uso sin gnome)." - -#~ msgid "" -#~ "Cannot find network previously used interface %s.\n" -#~ "If your computer is temporary connected to the internet, please connect " -#~ "and then run linphone.\n" -#~ "If you want to change your default network interface, go to the " -#~ "parameters 'box." -#~ msgstr "" -#~ "No se puede encontrar la interfaz de red usada previamente %s.\n" -#~ "Si su ordenador está conectado temporalmente a Internet, por favor " -#~ "conéctese y entonces ejecute linphone.\n" -#~ "Si quiere cambiar su interfaz de red predeterminada, vaya a la casilla " -#~ "Parámetros." - -#, fuzzy -#~ msgid "" -#~ "Linphone cannot open the audio device.\n" -#~ "It may be caused by other programs using it.\n" -#~ "Do you want linphone to kill these programs (esd or artsd) ?" -#~ msgstr "" -#~ "Linphone no puede abrir el dispositivo de audio.\n" -#~ "Puede deberse a que otros programas lo estén usando.\n" -#~ "¿Quiere que Linphone cierre esos programas (esd o artsd)?" - -#~ msgid "Use it as a:" -#~ msgstr "Usarlo como un:" - -#~ msgid "Outbound proxy" -#~ msgstr "Proxy de salida" - -#~ msgid "" -#~ "Togle this button if the registrar must be used to proxy calls through a " -#~ "firewall." -#~ msgstr "" -#~ "Marcar esta opción si el servidor de registro debe usarse en llamadas a " -#~ "proxy a través de un firewall." - -#~ msgid "OSS" -#~ msgstr "OSS" - -#~ msgid "ALSA" -#~ msgstr "ALSA" - -#~ msgid "Automatically kill applications using soundcard when needed" -#~ msgstr "" -#~ "Cerrar automáticamente aplicaciones que usen la tarjeta de sonido cuando " -#~ "se necesite." - -#~ msgid "" -#~ "Your computer is connected to several networks. Check in the global " -#~ "parameters if Linphone uses the one that you want." -#~ msgstr "" -#~ "Su equipo está conectado a varias redes. Revise en los parámetros " -#~ "globales si Linphone usa la que necesita." - -#~ msgid "" -#~ "Linphone failed to open the sound device. See the README file included in " -#~ "the distribution for details." -#~ msgstr "" -#~ "Linphone no pudo abrir el dispositivo de sonido. Vea el archivo README " -#~ "incluido en la distribución para más detalles." - -#~ msgid "Interface not found." -#~ msgstr "Interfaz no encontrada." - -#~ msgid "Warning" -#~ msgstr "Advertencia" - -#~ msgid "" -#~ "Linphone cannot open the sound device. It may be caused by other programs " -#~ "using it. Do you want linphone to kill these programs (esd or artsd) ?" -#~ msgstr "" -#~ "Linphone no puede abrir el dispositivo de sonido. Puede deberse a que " -#~ "otros programas lo estén usando. ¿Quiere que Linphone cierre esos " -#~ "programas (esd o artsd)?" - -#~ msgid "Linphone shutdowns..." -#~ msgstr "Linphone se está cerrando…" - -#~ msgid "" -#~ "Please, wait a few seconds until linphone unregisters your sip addess " -#~ "from registrar server..." -#~ msgstr "" -#~ "Por favor, espere unos segundos hasta que Linphone cancele el registro de " -#~ "su dirección SIP en el servidor de registros..." - -#~ msgid "Bad formulated sip address." -#~ msgstr "Dirección SIP mal escrita." - -#~ msgid "Couldn't create pixmap from file: %s" -#~ msgstr "No se pudo crear pixmap desde el archivo: %s" - -#~ msgid "" -#~ "Linphone did not detect any valid network interface. If you use a " -#~ "temporary internet connection, please connect and then run linphone again." -#~ msgstr "" -#~ "Linphone no detectó ninguna interfaz de red válida. Si usa una conexión " -#~ "temporal a Internet, por favor conéctese y vuelva a ejecutar Linphone." - -#~ msgid "List of network interfaces on your system." -#~ msgstr "Lista de interfaces de red en su sistema." - -#~ msgid "" -#~ "RTP est le mode de transport de la voix. Modifier ces paramËtres pour " -#~ "tenter d'amÈliorer la qualitÈ de la communication si celle-ci est " -#~ "dÈgradÈe." -#~ msgstr "" -#~ "RTP es el modelo de transporte de la voz. Modifique estos parámetros para " -#~ "intentar mejorar la calidad de la comunicación en caso de que sea mala." - -#~ msgid "Use rtp port:" -#~ msgstr "Usar puerto RTP:" - -#~ msgid "" -#~ "Les codecs ou vocodeurs sont les algorithmes utilisÈs pour compresser la " -#~ "voix." -#~ msgstr "" -#~ "Los códecs o codificadores/decodificadores son los algoritmos usados para " -#~ "comprimir la voz." - -#~ msgid "" -#~ "Vous pouvez ajuster avec cet onglet des paramËtre liÈs ‡ votre carte son." -#~ msgstr "Puede modificar estos parámetros a su gusto." +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/fr.po b/po/fr.po index a7aac8717..c83a84985 100644 --- a/po/fr.po +++ b/po/fr.po @@ -1,19 +1,26 @@ # SOME DESCRIPTIVE TITLE. -# Copyright (C) 2001 Free Software Foundation, Inc. -# Simon Morlat , 2001. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # +# Translators: +# Gautier Pelloux-Prayer , 2014 +# Gautier Pelloux-Prayer , 2014 +# Gautier Pelloux-Prayer , 2014 +# Simon Morlat , 2001 msgid "" msgstr "" -"Project-Id-Version: Linphone 0.9.1\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2013-04-09 13:57+0100\n" -"Last-Translator: Simon Morlat \n" -"Language-Team: french \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:30+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: French (http://www.transifex.com/projects/p/linphone-gtk/" +"language/fr/)\n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -50,8 +57,8 @@ msgstr "Refusé" #, c-format msgid "%i minute" msgid_plural "%i minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i minute" +msgstr[1] "%i minutes" #: ../gtk/calllogs.c:332 #, c-format @@ -60,11 +67,6 @@ msgid_plural "%i seconds" msgstr[0] "%i seconde" msgstr[1] "%i secondes" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -74,12 +76,10 @@ msgstr "" "%s\tQualité: %s\n" "%s\t%s\t" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" -msgstr "" +msgid "%s\t%s" +msgstr "%s\t%s" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" @@ -94,7 +94,7 @@ msgstr "Moi" msgid "Couldn't find pixmap file: %s" msgstr "Icone non trouvée: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "Contact sip invalide !" @@ -138,12 +138,7 @@ msgstr "Ficher de configuration" msgid "Run the audio assistant" msgstr "Démarre l'assistant audio" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Appel avec %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -157,7 +152,7 @@ msgstr "" "Si vous répondez non, cette personne sera mise temporairement sur liste " "noire." -#: ../gtk/main.c:1260 +#: ../gtk/main.c:1162 #, c-format msgid "" "Please enter your password for username %s\n" @@ -166,59 +161,59 @@ msgstr "" "Entrez le mot de passe pour %s\n" " sur le domaine %s:" -#: ../gtk/main.c:1376 +#: ../gtk/main.c:1283 msgid "Call error" msgstr "Erreur lors de l'appel" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Appel terminé." -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Appel entrant" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Répondre" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Refuser" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 msgid "Call paused" msgstr "Appel en pause" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 #, c-format msgid "by %s" msgstr "b>par %s" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s propose de démarrer la vidéo. Acceptez-vous ?" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Lien site web" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - un téléphone video pour l'internet" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (par défaut)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "Transfert vers %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -226,7 +221,7 @@ msgstr "" "Aucune carte son n'a été détectée sur cet ordinateur.\n" "Vous ne pourrez pas effectuer d'appels audio." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "Un visiophone libre" @@ -248,7 +243,7 @@ msgstr "Appeler" #: ../gtk/friendlist.c:726 msgid "Chat" -msgstr "" +msgstr "Chat" #: ../gtk/friendlist.c:756 #, c-format @@ -303,96 +298,96 @@ msgstr "Désactivé" msgid "Account" msgstr "Compte" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "Anglais" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Suédois" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Italien" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Espagnol" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "Portugais brésilien" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Polonais" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Allemand" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Russe" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Néérlandais" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Hongrois" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Tchèque" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "简体中文" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "Chinois traditionnel" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "Norvégien" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "Hébreu" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "Serbe" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" "La nouvelle selection de langue prendra effet au prochain démarrage de " "linphone." -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "Aucun" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" -msgstr "" +msgstr "SRTP" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" -msgstr "" +msgstr "ZRTP" #: ../gtk/update.c:80 #, c-format @@ -437,10 +432,10 @@ msgstr[1] "%i contacts trouvés." #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Bienvenue!\n" +"Bienvenue !\n" "Cet assistant va vous aider à utiliser un compte SIP pour vos appels." #: ../gtk/setupwizard.c:43 @@ -489,7 +484,7 @@ msgstr "Domaine*" #: ../gtk/setupwizard.c:145 msgid "Proxy" -msgstr "" +msgstr "Proxy" #: ../gtk/setupwizard.c:317 msgid "(*) Required fields" @@ -505,7 +500,7 @@ msgstr "Mot de passe: (*)" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" -msgstr "" +msgstr "Email : (*)" #: ../gtk/setupwizard.c:324 msgid "Confirm your password: (*)" @@ -513,7 +508,7 @@ msgstr "Confirmez votre mot de passe: (*)" #: ../gtk/setupwizard.c:338 msgid "Keep me informed with linphone updates" -msgstr "" +msgstr "Me tenir informer des mises à jour de Linphone " #: ../gtk/setupwizard.c:394 msgid "" @@ -538,39 +533,39 @@ msgstr "" "par email.\n" "Puis appuyez sur suivant." -#: ../gtk/setupwizard.c:600 +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" msgstr "Assistant de configuration de compte." -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "Bienvenue dans l'assistant de configuration de compte." -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Assistant de configuration de compte." -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "Configurez votre compte (étape 1/1)" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "Entrez votre identifiant sip (étape 1/1)" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "Entrez les informations concernant votre compte (étape 1/2)" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "Validation (étape 2/2)" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "Erreur" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "En cours d’arrêt." @@ -642,123 +637,122 @@ msgid "" "download: %f\n" "upload: %f (kbit/s)" msgstr "" +"débit descendant : %f\n" +"débit ascendant : %f (kbits/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format msgid "%ix%i @ %f fps" -msgstr "" +msgstr "%ix%i @ %f fps" #: ../gtk/incall_view.c:304 #, c-format msgid "%.3f seconds" -msgstr "" +msgstr "%.3f secondes" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "Raccrocher" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "Tentative d'appel..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" -msgstr "" +msgstr "00::00::00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "Appel entrant" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "bon" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "moyen" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "faible" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "très faible" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "nulle" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "indisponible" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "Sécurisé par SRTP" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Sécurisé par ZRTP- [jeton: %s]" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "Marquer comme non vérifié" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "Marquer comme vérifié" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "En conférence" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "Appel en cours" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "Appel en attente" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Appel terminé." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "Transfert en cours" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "Transfert terminé" -#: ../gtk/incall_view.c:809 +#: ../gtk/incall_view.c:831 msgid "Transfer failed." msgstr "Transfert échoué" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "Reprendre" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "Pause" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" +"Enregistrement dans\n" +"%s %s" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "(en attente)" @@ -779,26 +773,26 @@ msgstr "Le chargement de la configuration depuis %s a échoué." #: ../gtk/audio_assistant.c:98 msgid "No voice detected" -msgstr "" +msgstr "Voix non détectée" #: ../gtk/audio_assistant.c:99 msgid "Too low" -msgstr "" +msgstr "Trop bas" #: ../gtk/audio_assistant.c:100 msgid "Good" -msgstr "" +msgstr "Bien" #: ../gtk/audio_assistant.c:101 msgid "Too loud" -msgstr "" +msgstr "Trop bruyant" #: ../gtk/audio_assistant.c:318 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"Bienvenue!\n" +"Bienvenue !\n" "Cet assistant va vous aider à régler les paramètres audio de votre " "ordinateur pour une utilisation optimale avec Linphone." @@ -904,11 +898,11 @@ msgstr "En ligne" #: ../gtk/main.ui.h:19 msgid "ADSL" -msgstr "" +msgstr "ADSL" #: ../gtk/main.ui.h:20 msgid "Fiber Channel" -msgstr "" +msgstr "Fibre optique" #: ../gtk/main.ui.h:21 msgid "Default" @@ -916,7 +910,7 @@ msgstr "Par défaut" #: ../gtk/main.ui.h:22 msgid "_Options" -msgstr "" +msgstr "_Options" #: ../gtk/main.ui.h:23 msgid "Set configuration URI" @@ -944,7 +938,7 @@ msgstr "_Site web" #: ../gtk/main.ui.h:29 msgid "Check _Updates" -msgstr "" +msgstr "_Mises à jour" #: ../gtk/main.ui.h:30 msgid "Account assistant" @@ -1000,14 +994,14 @@ msgstr "Me connecter automatiquement" #: ../gtk/main.ui.h:44 ../gtk/password.ui.h:3 msgid "UserID" -msgstr "" +msgstr "ID utilisateur" #: ../gtk/main.ui.h:45 msgid "Login information" msgstr "Information de login" #: ../gtk/main.ui.h:46 -msgid "Welcome !" +msgid "Welcome!" msgstr "Bienvenue !" #: ../gtk/main.ui.h:47 @@ -1015,12 +1009,12 @@ msgid "Delete" msgstr "Supprimer" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "A propos de linphone" +msgid "About Linphone" +msgstr "À propos de Linphone" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "(C) Belledonne Communications, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." @@ -1041,6 +1035,18 @@ msgid "" "hu: anonymous\n" "he: Eli Zaretskii \n" msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1064,7 +1070,7 @@ msgstr "Fenêtre de débogage de linphone" #: ../gtk/log.ui.h:2 msgid "Scroll to end" -msgstr "" +msgstr "Défiler jusqu'à la fin" #: ../gtk/password.ui.h:1 msgid "Linphone - Authentication required" @@ -1100,7 +1106,7 @@ msgstr "De la forme sip:@" #: ../gtk/sip_account.ui.h:4 msgid "sip:" -msgstr "" +msgstr "sip:" #: ../gtk/sip_account.ui.h:5 msgid "SIP Proxy address:" @@ -1120,7 +1126,7 @@ msgstr "Paramètres de contact (optionnel):" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" -msgstr "" +msgstr "Intervalle standard RTCP AVPF (sec) :" #: ../gtk/sip_account.ui.h:10 msgid "Route (optional):" @@ -1148,15 +1154,15 @@ msgstr "Configurer un compte SIP" #: ../gtk/parameters.ui.h:1 msgid "anonymous" -msgstr "" +msgstr "anonyme" #: ../gtk/parameters.ui.h:2 msgid "GSSAPI" -msgstr "" +msgstr "GSSAPI" #: ../gtk/parameters.ui.h:3 msgid "SASL" -msgstr "" +msgstr "SASL" #: ../gtk/parameters.ui.h:4 msgid "default soundcard" @@ -1172,7 +1178,7 @@ msgstr "camera par défaut" #: ../gtk/parameters.ui.h:7 msgid "CIF" -msgstr "" +msgstr "CIF" #: ../gtk/parameters.ui.h:8 msgid "Audio codecs" @@ -1182,21 +1188,21 @@ msgstr "Codecs audio" msgid "Video codecs" msgstr "Codecs vidéo" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" -msgstr "" +msgstr "C" #: ../gtk/parameters.ui.h:11 msgid "SIP (UDP)" -msgstr "" +msgstr "SIP (UDP)" #: ../gtk/parameters.ui.h:12 msgid "SIP (TCP)" -msgstr "" +msgstr "SIP (TCP)" #: ../gtk/parameters.ui.h:13 msgid "SIP (TLS)" -msgstr "" +msgstr "SIP (TLS)" #: ../gtk/parameters.ui.h:14 msgid "Settings" @@ -1224,24 +1230,23 @@ msgstr "Type d'encryption media" #: ../gtk/parameters.ui.h:20 msgid "Video RTP/UDP:" -msgstr "" +msgstr "Vidéo RTP / UDP :" #: ../gtk/parameters.ui.h:21 msgid "Audio RTP/UDP:" -msgstr "" +msgstr "Audio RTP / UDP :" #: ../gtk/parameters.ui.h:22 msgid "Fixed" msgstr "Fixe" #: ../gtk/parameters.ui.h:23 -#, fuzzy msgid "Media encryption is mandatory" -msgstr "Type d'encryption media" +msgstr "Le chiffrement media est obligatoire" #: ../gtk/parameters.ui.h:24 msgid "Tunnel" -msgstr "" +msgstr "Tunnel" #: ../gtk/parameters.ui.h:25 msgid "DSCP fields" @@ -1249,11 +1254,11 @@ msgstr "Champs DSCP" #: ../gtk/parameters.ui.h:26 msgid "SIP/TCP port" -msgstr "" +msgstr "Port SIP / TCP" #: ../gtk/parameters.ui.h:27 msgid "SIP/UDP port" -msgstr "" +msgstr "Port SIP / UDP" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1301,7 +1306,7 @@ msgstr "Sonnerie:" #: ../gtk/parameters.ui.h:39 msgid "ALSA special device (optional):" -msgstr "" +msgstr "Appareil ALSA spécifique (optionnel) :" #: ../gtk/parameters.ui.h:40 msgid "Capture device:" @@ -1440,7 +1445,7 @@ msgstr "Gestion de la bande passante" #: ../gtk/parameters.ui.h:72 msgid "Codecs" -msgstr "" +msgstr "Codecs" #: ../gtk/parameters.ui.h:73 msgid "Language" @@ -1467,18 +1472,14 @@ msgid "Authentication method:" msgstr "Méthode d'authentification:" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "" - -#: ../gtk/parameters.ui.h:81 msgid "LDAP Account setup" msgstr "Configuration LDAP" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:81 msgid "LDAP" -msgstr "" +msgstr "LDAP" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "Fermer" @@ -1508,15 +1509,15 @@ msgstr "Réglages DSCP" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" -msgstr "" +msgstr "SIP" #: ../gtk/dscp_settings.ui.h:3 msgid "Audio RTP stream" -msgstr "" +msgstr "Flux RTP audio" #: ../gtk/dscp_settings.ui.h:4 msgid "Video RTP stream" -msgstr "" +msgstr "Flux RTP vidéo" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" @@ -1580,7 +1581,7 @@ msgstr "Hôte" #: ../gtk/tunnel_config.ui.h:3 msgid "Port" -msgstr "" +msgstr "Port" #: ../gtk/tunnel_config.ui.h:6 msgid "Configure tunnel" @@ -1590,66 +1591,6 @@ msgstr "Configuration du tunnel" msgid "Configure http proxy (optional)" msgstr "Configuration d'un proxy http (optionel)" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "" - #: ../gtk/ldap.ui.h:1 msgid "LDAP Settings" msgstr "Paramètres LDAP" @@ -1668,15 +1609,15 @@ msgstr "Connexion" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" -msgstr "" +msgstr "Assigner ND" #: ../gtk/ldap.ui.h:10 msgid "Authname" -msgstr "" +msgstr "Nom d'authentification" #: ../gtk/ldap.ui.h:11 msgid "Realm" -msgstr "" +msgstr "Realm" #: ../gtk/ldap.ui.h:12 msgid "SASL" @@ -1684,16 +1625,16 @@ msgstr "SASL" #: ../gtk/ldap.ui.h:13 msgid "Base object:" -msgstr "" +msgstr "Object de base :" #: ../gtk/ldap.ui.h:15 #, no-c-format msgid "Filter (%s for name):" -msgstr "" +msgstr "Filtre (nom avec %s) : " #: ../gtk/ldap.ui.h:16 msgid "Name Attribute:" -msgstr "" +msgstr "Attribut nom :" #: ../gtk/ldap.ui.h:17 msgid "SIP address attribute:" @@ -1725,19 +1666,19 @@ msgstr "Divers" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" -msgstr "" +msgstr "ANONYME" #: ../gtk/ldap.ui.h:25 msgid "SIMPLE" -msgstr "" +msgstr "SIMPLE" #: ../gtk/ldap.ui.h:26 msgid "DIGEST-MD5" -msgstr "" +msgstr "DIGEST-MD5" #: ../gtk/ldap.ui.h:27 msgid "NTLM" -msgstr "" +msgstr "NTLM" #: ../gtk/config-uri.ui.h:1 msgid "Specifying a remote configuration URI" @@ -1757,10 +1698,6 @@ msgstr "" "redémarrer automatiquement pour charger et prendre en compte la nouvelle " "configuration." -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 msgid "Configuring..." msgstr "Configuration en cours" @@ -1771,74 +1708,70 @@ msgstr "" "Veuillez patenter un instant pendant le chargement de la configuration " "distante..." -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Prêt." -#: ../coreapi/linphonecore.c:1967 +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" msgstr "Configuration en cours" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Recherche de la destination du numéro de téléphone..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "La destination n'a pu être trouvée." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Appel de" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "Echec de l'appel" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Désolé, le nombre maximum d'appels simultanés est atteint." -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "vous appelle" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "et sollicite un décrochage automatique." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "Modifications des paramètres d'appels..." -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "En ligne." -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "Appel abandonné" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "La mise en attente a échoué" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "Mise en attente de l'appel..." -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "Découverte STUN en cours" -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." -msgstr "" +msgstr "Collection des candidats locaux ICE en cours..." #: ../coreapi/friend.c:33 msgid "Online" @@ -1889,10 +1822,10 @@ msgid "Vacation" msgstr "En congé" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Bug inconnu" +msgid "Unknown status" +msgstr "Status inconnu" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1900,7 +1833,7 @@ msgstr "" "L'adresse SIP du proxy est invalide. Elle doit commencer par \"sip:\" suivie " "par un nom de domaine." -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1909,254 +1842,164 @@ msgstr "" "Elle doit être de la forme sip:username@domain, comme par example sip:" "alice@example.net" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "Echec de la connexion en tant que %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "Sonnerie distante." -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "Sonnerie distante..." -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "Prise d'appel anticipée." -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "%s est maintenant en attente." -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "Appel répondu par %s - en attente" -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "Appel repris." -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "Appel répondu par %s." -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." -msgstr "" +msgstr "Incompatible, vérfiez les codecs ou les paramètres de sécurité..." -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "Paramètres media incompatibles." + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "Appel repris." -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "L'appel a été mis en attente." -#: ../coreapi/callbacks.c:556 -#, fuzzy +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." -msgstr "Mise à jour de l'appel par le correspondant." +msgstr "L'appel est modifié par la partie distante." -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Appel terminé." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Occupé..." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "L'usager est temporairement indisponible." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "L'usager ne souhaite pas être dérangé" -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Appel décliné." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." -msgstr "" +msgstr "Délai d'attente de la requête dépassé." -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "Redirection" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "Paramètres media incompatibles." - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "L'appel a échoué." -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Enregistrement sur %s effectué." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "Désenregistrement sur %s effectué." -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "Pas de réponse" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "Echec de l'enregistrement sur %s: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" -msgstr "" +msgstr "Service indisponible, nouvelle tentative" -#: ../coreapi/linphonecall.c:177 +#: ../coreapi/linphonecall.c:174 #, c-format msgid "Authentication token is %s" msgstr "Le jeton d'authentification est %s" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "Vous avez manqué %i appel" msgstr[1] "Vous avez manqué %i appels" -#~ msgid "aborted" -#~ msgstr "abandonné" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "interrompu" -#~ msgid "completed" -#~ msgstr "terminé" +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "terminé" -#~ msgid "missed" -#~ msgstr "manqué" +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "manqué" -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s le %s\n" -#~ "De: %s\n" -#~ "A destination de: %s\n" -#~ "Etat: %s\n" -#~ "Durée: %i mn %i sec\n" +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" +"%s à %s\n" +"De : %s\n" +"Vers : %s\n" +"Status : %s\n" +"Durée : %i min %i sec\n" -#~ msgid "Outgoing call" -#~ msgstr "Appel sortant" +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "Appel sortant" -#~ msgid "No response." -#~ msgstr "Pas de réponse." - -#~ msgid "Protocol error." -#~ msgstr "Erreur de protocole" - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Adresse SIP mal formulée. Une address sip ressemble à " - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Votre ordinateur semble utiliser les pilotes sons ALSA.\n" -#~ "C'est en g��al le meilleur choix, cependant un module\n" -#~ "d'emulation oss est manquant et linphone en a besoin.\n" -#~ "Veuillez s'il vous plait executer la commande\n" -#~ "'modprobe snd-pcm-oss' en tant que root afin de le charger." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Votre ordinateur semble utiliser les pilotes sons ALSA. C'est en g��al " -#~ "le\n" -#~ "meilleur choix, cependant un module d'emulation est manquant et linphone " -#~ "en\n" -#~ "a besoin. Veuillez s'il vous plait executer la commande\n" -#~ "'modprobe snd-mixer-oss' en tant que root afin de le charger." - -#~ msgid "Keypad" -#~ msgstr "Clavier" - -#~ msgid "Chat with %s" -#~ msgstr "Chat avec %s" - -#~ msgid "Choosing a username" -#~ msgstr "Choix du nom d'utilisateur" - -#~ msgid "Enable video" -#~ msgstr "Activer la video" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "" -#~ "Entrez un nom d'utilisateur, un numéro de téléphone, ou une adresse SIP" - -#~ msgid "Lookup:" -#~ msgstr "Rechercher:" - -#~ msgid "in" -#~ msgstr "dans" - -#~ msgid "We are being paused..." -#~ msgstr "Mise en attente..." - -#~ msgid "No common codecs" -#~ msgstr "Pas de codecs commun" - -#~ msgid "" -#~ "Pause all calls\n" -#~ "and answer" -#~ msgstr "" -#~ "Pauser les appels en cours\n" -#~ "et répondre" - -#~ msgid "Contact list" -#~ msgstr "Liste de contacts" - -#~ msgid "Audio & video" -#~ msgstr "Audio et video" - -#~ msgid "Audio only" -#~ msgstr "Audio seul" - -#~ msgid "Duration:" -#~ msgstr "Durée:" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "Historique des appels" - -#~ msgid "_Linphone" -#~ msgstr "_Linphone" - -#~ msgid "Register at startup" -#~ msgstr "S'enregistrer au démarrage" - -#~ msgid "Sorry, you have to pause or stop the current call first !" -#~ msgstr "Désolé, vous devez d'abord mettre en attente l'appel en cours." - -#~ msgid "There is already a call in process, pause or stop it first." -#~ msgstr "" -#~ "Il y a déjà un appel en cours, veuillez d'abord le mettre en attente ou " -#~ "le raccrocher." +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "Impossibde de jouer %s." diff --git a/po/he.po b/po/he.po index f6dd58f14..594308819 100644 --- a/po/he.po +++ b/po/he.po @@ -1,25 +1,27 @@ -# Hebrew translations for linphone -# Copyright (C) Belledonne Communications,2010 -# This file is distributed under the same license as the linphone package. -# Eli Zaretskii , 2012. -# Isratine Citizen , 2012, 2013. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # +# Translators: +# Eli Zaretskii , 2012 +# GenghisKhan , 2014 +# GenghisKhan , 2014 +# GenghisKhan , 2012-2013 msgid "" msgstr "" -"Project-Id-Version: Linphone 3.5.99.0\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2013-04-24 21:31+0200\n" -"Last-Translator: Isratine Citizen \n" -"Language-Team: Rahut Project \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Hebrew (http://www.transifex.com/projects/p/linphone-gtk/" +"language/he/)\n" "Language: he\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Poedit 1.5.4\n" -# צור קשר עם #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format msgid "Call %s" @@ -65,11 +67,6 @@ msgid_plural "%i seconds" msgstr[0] "שניה %i" msgstr[1] "%i שניות" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -79,11 +76,9 @@ msgstr "" "%s\tאיכות: %s\n" "%s\t%s\t" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -99,76 +94,49 @@ msgstr "אני" msgid "Couldn't find pixmap file: %s" msgstr "לא ניתן למצוא קובץ ‫pixmap: ‫%s" -# איש־קשר -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "כתובת sip לא תקפה !" -# cli #: ../gtk/main.c:107 -#, fuzzy msgid "log to stdout some debug information while running." -msgstr "רשום אל stdout מידע ניפוי שגיאות מסוים בזמן ביצוע." +msgstr "" -# cli #: ../gtk/main.c:114 -#, fuzzy msgid "path to a file to write logs into." -msgstr "נתיב אל קובץ שברצונך לרשום אליו את הרשומות." +msgstr "" -# cli #: ../gtk/main.c:121 -#, fuzzy msgid "Start linphone with video disabled." -msgstr "התחל את לינפון עם וידאו מנוטרל." +msgstr "" -# cli #: ../gtk/main.c:128 -#, fuzzy msgid "Start only in the system tray, do not show the main interface." -msgstr "התחל במגש המערכת בלבד, אל תציג את הממשק הראשי." +msgstr "" -# cli #: ../gtk/main.c:135 -#, fuzzy msgid "address to call right now" -msgstr "כתובת להתקשרות ברגע זה" +msgstr "" -# cli #: ../gtk/main.c:142 -#, fuzzy msgid "if set automatically answer incoming calls" -msgstr "באם אפשרות זו נקבעת ענה אוטומטית לקריאות נכנסות" +msgstr "" -# cli #: ../gtk/main.c:149 -#, fuzzy msgid "" "Specifiy a working directory (should be the base of the installation, eg: c:" "\\Program Files\\Linphone)" msgstr "" -"ציין מדור העבודה (אמור להיות מבוסס על ההתקנה, למשל: c:\\Program Files" -"\\Linphone)" -# וידוא #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "אימות" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "אשף הגדרת חשבון" +msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "התקשרות באמצעות %s" - -# הקשר שלהם -# אם התשובה -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -181,75 +149,68 @@ msgstr "" "שלך ?\n" "היה ותשובתך תהיה לא, אדם זה יהיה מסומן באופן זמני ברשימה השחורה." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -"נא להזין את סיסמתך עבור שם משתמש %s\n" -" בתחום %s:" +"אנא הזן סיסמה עבור משתמש %s\n" +"במתחם %s:" -# שיחה -#: ../gtk/main.c:1376 +#: ../gtk/main.c:1283 msgid "Call error" msgstr "שגיאת קריאה" -# Conversation ended -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "שיחה הסתיימה" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "קריאה נכנסת" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "לענות" -# דחיה -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "לדחות" -# Conversation paused -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 msgid "Call paused" msgstr "שיחה הושהתה" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 #, c-format msgid "by %s" msgstr "על ידי %s" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "‏%s רוצה להתחיל וידאו. האם אתה מסכים ?" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "קישור אתר רשת" -# ‫Linphone - וידאופון במרשתת -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "‫Linphone - וידאופון אינטרנטי" -# משתמטת -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "‫%s (ברירת מחדל)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "אנחנו מועברים אל %s" -# קריאות שמע -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -257,7 +218,7 @@ msgstr "" "לא אותרו כרטיסי קול במחשב זה.\n" "לא תהיה ביכולתך לשלוח או לקבל שיחות אודיו." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "וידאופון SIP חופשי" @@ -281,7 +242,6 @@ msgstr "קריאה" msgid "Chat" msgstr "שיחה" -# a name or a number #: ../gtk/friendlist.c:756 #, c-format msgid "Search in %s directory" @@ -307,7 +267,6 @@ msgstr "מחק היסטוריית שיחה של '%s'" msgid "Add new contact from %s directory" msgstr "הוסף איש קשר חדש מן מדור %s" -# קצב תדר תדירות מהירות #: ../gtk/propertybox.c:558 msgid "Rate (Hz)" msgstr "שיעור (הרץ)" @@ -316,22 +275,18 @@ msgstr "שיעור (הרץ)" msgid "Status" msgstr "מצב" -# שיעור סיביות מינימלי #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "קצב נתונים מינימלי (קי״ב/שנ׳)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" msgstr "פרמטרים" -# מאופשר #: ../gtk/propertybox.c:620 ../gtk/propertybox.c:763 msgid "Enabled" msgstr "מופעל" -# מנוטרל #: ../gtk/propertybox.c:622 ../gtk/propertybox.c:763 msgid "Disabled" msgstr "לא מופעל" @@ -340,95 +295,92 @@ msgstr "לא מופעל" msgid "Account" msgstr "חשבון" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "English" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Español" -# português do Brasil -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "português brasileiro" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Polski" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Deutsch" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Русский" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Nederlands" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Magyar" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Česky" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "中文" -# 繁体字 -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "繁體字" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "norsk" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "עברית" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "српски srpski" -# selected הנבחרת -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "עליך לאתחל את לינפון כדי שהשפה החדשה תיכנס לתוקף." -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "ללא" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -441,7 +393,6 @@ msgstr "" "גרסא מאוחרת יותר זמינה מן %s.\n" "האם ברצונך לפתוח דפדפן בכדי להורידה ?" -# בידך #: ../gtk/update.c:91 msgid "You are running the lastest version." msgstr "ברשותך הגרסא האחרונה של לינפון." @@ -475,11 +426,9 @@ msgstr[1] "נמצאו %i אנשי קשר" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"ברוך בואך !\n" -"אשף זה יסייע לך לעשות שימוש בחשבון SIP עבור שיחותייך." #: ../gtk/setupwizard.c:43 msgid "Create an account on linphone.org" @@ -489,7 +438,6 @@ msgstr "צור חשבון אצל linphone.org" msgid "I have already a linphone.org account and I just want to use it" msgstr "כבר קיים חשבון linphone.org ברשותי וברצוני לעשות בו שימוש" -# כבר קיים ברשותי חשבון sip #: ../gtk/setupwizard.c:45 msgid "I have already a sip account and I just want to use it" msgstr "כבר קיים חשבון sip ברשותי וברצוני לעשות בו שימוש" @@ -530,7 +478,6 @@ msgstr "מתחם*" msgid "Proxy" msgstr "פרוקסי" -# נדרשים #: ../gtk/setupwizard.c:317 msgid "(*) Required fields" msgstr "(*) שדות חובה" @@ -555,8 +502,6 @@ msgstr "אימות סיסמתך: (*)" msgid "Keep me informed with linphone updates" msgstr "" -# אינו בר־השגה -# לשוב אחורה #: ../gtk/setupwizard.c:394 msgid "" "Error, account not validated, username already used or server unreachable.\n" @@ -569,7 +514,6 @@ msgstr "" msgid "Thank you. Your account is now configured and ready for use." msgstr "תודה לך. חשבונך מוגדר ומוכן לשימוש כעת." -# לאחר מכן #: ../gtk/setupwizard.c:413 msgid "" "Please validate your account by clicking on the link we just sent you by " @@ -579,44 +523,39 @@ msgstr "" "נא לאמת את חשבונך באמצעות הקלקה על הקישור ששלחנו לך עתה באמצעות דוא״ל.\n" "אחרי כן נא לחזור לכאן וללחוץ על הלחצן 'קדימה'." -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "אשף הגדרת חשבון" +msgstr "" -# Wizard אשף -# סייע -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "ברוך בואך אל אשף הגדרת החשבון" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "אשף הגדרת חשבון" -# שלב -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "הגדרת חשבונך (צעד 1/1)" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "הזנת שם משתמש sip (צעד 1/1)" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "הזנת מידע חשבון (צעד 1/2)" -# תקפות -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "אימות (צעד 2/2)" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "שגיאה" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "מסיים כעת" @@ -701,112 +640,100 @@ msgstr "" msgid "%.3f seconds" msgstr "%.3f שניות" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "נתק" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "מתקשר כעת..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "‭00::00::00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "קריאה נכנסת" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "טובה" -# רגילה -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "ממוצעת" -# weak חלשה חלושה רפויה רופפת -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "דלה" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "דלה מאוד" -# רעה -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "גרועה מדי" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "לא זמינה" -# באמצעות -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "מאובטחת על ידי SRTP" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "מאובטחת על ידי ZRTP - [אות אימות: %s]" -# set or unset verification state of ZRTP SAS. -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "הגדר כלא מאומתת" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "הגדר כמאומתת" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "בשיחת ועידה" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "בשיחה כעת" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "שיחה מושהית" -# שעות %02i דקות %02i שניות %02i -# Force LTR time format (hours::minutes::seconds) with LRO chatacter (U+202D) -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "‭%02i::%02i::%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "שיחה הסתיימה." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "העברה מצויה כעת בעיצומה" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "העברה הסתיימה." -#: ../gtk/incall_view.c:809 +#: ../gtk/incall_view.c:831 msgid "Transfer failed." msgstr "העברה נכשלה." -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "חזור" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "השהה" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" @@ -815,7 +742,7 @@ msgstr "" "מקליט אל תוך\n" "%s %s" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "(מושהה)" @@ -840,29 +767,25 @@ msgstr "" #: ../gtk/audio_assistant.c:99 msgid "Too low" -msgstr "" +msgstr "נמוך מדי" #: ../gtk/audio_assistant.c:100 msgid "Good" -msgstr "" +msgstr "טוב" #: ../gtk/audio_assistant.c:101 msgid "Too loud" -msgstr "" +msgstr "חזק מדי" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"ברוך בואך !\n" -"אשף זה יסייע לך לעשות שימוש בחשבון SIP עבור שיחותייך." #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "התקן לכידה:" +msgstr "התקן לכידה" #: ../gtk/audio_assistant.c:329 msgid "Recorded volume" @@ -870,16 +793,15 @@ msgstr "" #: ../gtk/audio_assistant.c:333 msgid "No voice" -msgstr "" +msgstr "אין קול" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "התקן פס קול:" +msgstr "התקן השמעה" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" -msgstr "" +msgstr "נגן שלושה צפצופים" #: ../gtk/audio_assistant.c:403 msgid "Press the record button and say some words" @@ -891,17 +813,15 @@ msgstr "" #: ../gtk/audio_assistant.c:433 msgid "Let's start Linphone now" -msgstr "" +msgstr "הבא נתחיל את Linphone עכשיו" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "אשף חשבון" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "אשף חשבון" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -915,13 +835,10 @@ msgstr "" msgid "Record and Play" msgstr "" -# מתקשר Caller -# זה ש: נתקשר או מתוקשר או הותקשר? #: ../gtk/main.ui.h:1 msgid "Callee name" msgstr "שם מקבל" -# שגר #: ../gtk/main.ui.h:2 msgid "Send" msgstr "שלח" @@ -974,7 +891,6 @@ msgstr "‫ADSL" msgid "Fiber Channel" msgstr "ערוץ סיב" -# משתמט #: ../gtk/main.ui.h:21 msgid "Default" msgstr "ברירת מחדל" @@ -983,11 +899,9 @@ msgstr "ברירת מחדל" msgid "_Options" msgstr "_אפשרויות" -# וידוא #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "אימות" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -1041,12 +955,10 @@ msgstr "הוסף אנשי קשר מן מדור" msgid "Add contact" msgstr "הוסף איש קשר" -# קריאות אחרונות #: ../gtk/main.ui.h:38 msgid "Recent calls" msgstr "שיחות אחרונות" -# הזהות הנוכחית שלי #: ../gtk/main.ui.h:39 msgid "My current identity:" msgstr "זהותי הנוכחית:" @@ -1059,7 +971,6 @@ msgstr "שם משתמש" msgid "Password" msgstr "סיסמה" -# מרשתת #: ../gtk/main.ui.h:42 msgid "Internet connection:" msgstr "חיבור אינטרנט:" @@ -1077,22 +988,20 @@ msgid "Login information" msgstr "מידע התחברות" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "ברוך בואך !" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "מחק" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "אודות לינפון" +msgid "About Linphone" +msgstr "" -# Should be updated to 2012 2013 -# כל הזכויות שמורות (C) ‫Belledonne Communications, ‫2010\n #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "‫(C) ‫Belledonne Communications,‫2010\n" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." @@ -1142,12 +1051,10 @@ msgstr "גלול אוטומטית לסוף" msgid "Linphone - Authentication required" msgstr "‫Linphone - נדרש אימות" -# תחום #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" msgstr "נא להזין את סיסמת המתחם" -# קריאות #: ../gtk/call_logs.ui.h:1 msgid "Call history" msgstr "היסטוריית שיחות" @@ -1156,7 +1063,6 @@ msgstr "היסטוריית שיחות" msgid "Clear all" msgstr "טיהור מוחלט" -# קריאה חוזרת #: ../gtk/call_logs.ui.h:3 msgid "Call back" msgstr "חיוג חוזר" @@ -1190,9 +1096,8 @@ msgid "Registration duration (sec):" msgstr "משך רישום (בשניות):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "ניתוב (רשות):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1202,11 +1107,9 @@ msgstr "" msgid "Route (optional):" msgstr "ניתוב (רשות):" -# מוביל #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "טרנספורט" +msgstr "טרנספורט" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1217,9 +1120,8 @@ msgid "Publish presence information" msgstr "פרסם מידע נוכחות" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "אפשר" +msgstr "אפשר AVPF" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1261,7 +1163,7 @@ msgstr "קודקים של אודיו" msgid "Video codecs" msgstr "קודקים של וידאו" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "" @@ -1281,7 +1183,6 @@ msgstr "‏SIP ‏(TLS)" msgid "Settings" msgstr "הגדרות" -# שידור #: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" msgstr "הגדר יחידת תמסורת מרבית:" @@ -1294,7 +1195,6 @@ msgstr "שלח טזמ״תים (DTMFs) כמידע SIP" msgid "Use IPv6 instead of IPv4" msgstr "השתמש בפרוטוקול IPv6 במקום בפרוטוקול IPv4" -# מוביל #: ../gtk/parameters.ui.h:18 msgid "Transport" msgstr "טרנספורט" @@ -1344,25 +1244,17 @@ msgid "Direct connection to the Internet" msgstr "חיבור ישיר אל האינטרנט" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "מאחורי NAT / חומת אש (ציון כתובת שער (Gateway IP) למטה)" +msgstr "" -# ניצול STUN -# שימוש ב־STUN -# utilize #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "מאחורי NAT / חומת אש (בעזרת STUN לפתירה)" -# שימוש ב־STUN -# utilize #: ../gtk/parameters.ui.h:32 msgid "Behind NAT / Firewall (use ICE)" msgstr "מאחורי NAT / חומת אש (בעזרת ICE)" -# שימוש ב־STUN -# utilize #: ../gtk/parameters.ui.h:33 msgid "Behind NAT / Firewall (use uPnP)" msgstr "מאחורי NAT / חומת אש (בעזרת uPnP)" @@ -1415,15 +1307,13 @@ msgstr "אודיו" msgid "Video input device:" msgstr "התקן קלט וידאו:" -# רצויה #: ../gtk/parameters.ui.h:46 msgid "Prefered video resolution:" msgstr "רזולוציית וידאו מועדפת:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "התקן קלט וידאו:" +msgstr "" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1469,7 +1359,6 @@ msgstr "ערוך" msgid "Remove" msgstr "הסר" -# חשבונות מתווכים #: ../gtk/parameters.ui.h:59 msgid "Proxy accounts" msgstr "חשבונות Proxy" @@ -1498,18 +1387,14 @@ msgstr "נטרל" msgid "Codecs" msgstr "קודקים" -# ללא הגבלה #: ../gtk/parameters.ui.h:66 msgid "0 stands for \"unlimited\"" msgstr "0 מסמל \"בלי הגבלה\"" -# does KiB mean kibibyte? #: ../gtk/parameters.ui.h:67 msgid "Upload speed limit in Kbit/sec:" msgstr "מגבלת מהירות העלאה בקי״ב/שנ׳:" -# האם KiB זה kibibyte? -# קי״ב (1024) אל מול ק״ב (1000) #: ../gtk/parameters.ui.h:68 msgid "Download speed limit in Kbit/sec:" msgstr "מגבלת מהירות הורדה בקי״ב/שנ׳:" @@ -1518,7 +1403,6 @@ msgstr "מגבלת מהירות הורדה בקי״ב/שנ׳:" msgid "Enable adaptive rate control" msgstr "אפשר בקרת קצב מסתגלת" -# שיטה ניחוש #: ../gtk/parameters.ui.h:70 msgid "" "Adaptive rate control is a technique to dynamically guess the available " @@ -1527,8 +1411,6 @@ msgstr "" "בקרת קצב מסתגלת הינה טכניקה להשערה דינמית של רוחב הפס הזמין במהלך שיחה." -# פס רוחב -# טווח תדרים #: ../gtk/parameters.ui.h:71 msgid "Bandwidth control" msgstr "בקרת רוחב פס" @@ -1554,30 +1436,22 @@ msgid "User interface" msgstr "ממשק משתמש" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "כתובת SIP Proxy:" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "כשל באימות" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "תוויות" - -# חשבונות מתווכים -#: ../gtk/parameters.ui.h:81 -#, fuzzy msgid "LDAP Account setup" -msgstr "חשבונות Proxy" +msgstr "" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:81 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "סיום" @@ -1589,7 +1463,6 @@ msgstr "חיפוש אנשי קשר בתוך מדור" msgid "Add to my list" msgstr "הוסף אל הרשימה שלי" -# חיפוש מאן דהו #: ../gtk/buddylookup.ui.h:3 msgid "Search somebody" msgstr "חיפוש אחר מישהו" @@ -1603,9 +1476,8 @@ msgid "Please wait" msgstr "נא להמתין" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "הגדרות Dscp" +msgstr "אפשרויות DSCP" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" @@ -1659,11 +1531,9 @@ msgstr "זמן הלוך ושוב" msgid "Video resolution received" msgstr "" -# רצויה #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "רזולוציית וידאו מועדפת:" +msgstr "" #: ../gtk/call_statistics.ui.h:11 msgid "RTP profile" @@ -1693,84 +1563,21 @@ msgstr "הגדר מינהור" msgid "Configure http proxy (optional)" msgstr "הגדר http proxy (רשות)" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9 [סעפ]" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8 [צק]" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7 [רשת]" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6 [זחט]" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5 [יכל]" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4 [מנ]" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3 [אבג]" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2 [דהו]" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "הגדרות" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" msgstr "" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "‏uPnp לא זמינה" +msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "קודקים" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1785,9 +1592,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "אודיו" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1803,19 +1609,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "כתובת SIP או מספר טלפון" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" -# חיפוש מאן דהו #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "חיפוש אחר מישהו" +msgstr "חיפוש" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1830,9 +1633,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "וידאו" +msgstr "שונות" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1863,90 +1665,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "מתחבר כעת..." +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "מוכן" -# וידוא -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "אימות" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "מחפש כעת עבור יעד מספר טלפון..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "לא ניתן לפתור את מספר זה." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "מתקשר כעת" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "לא ניתן להתקשר" -# מספר השיחות המקבילות המרבי -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "הגענו אל המספר המרבי של שיחות מקבילות, עמך הסליחה" -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "מתקשר/ת אליך" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr " ומבקש/ת מענה אוטומטי." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -# פרמטרי קריאה -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "מתאים כעת פרמטרים של שיחה..." -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "מקושר." -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "קריאה בוטלה" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "לא ניתן להשהות את השיחה" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "משהה כעת שיחה נוכחית..." -# במהלך (או) באמצע חיפוש... -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "בדיקת STUN מצויה כעת בעיצומה..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "צבירת מועמדים מקומיים של ICE מצויה כעת בעיצומה..." @@ -1958,7 +1746,6 @@ msgstr "מקוון" msgid "Busy" msgstr "עסוק" -# מיד אשוב #: ../coreapi/friend.c:39 msgid "Be right back" msgstr "כבר אשוב" @@ -1979,14 +1766,10 @@ msgstr "בארוחת צהריים" msgid "Do not disturb" msgstr "נא לא להפריע" -# Is it: change residence? -# What is the difference with Away? -# fr Parti #: ../coreapi/friend.c:54 msgid "Moved" msgstr "עברתי דירה" -# additional נוסף #: ../coreapi/friend.c:57 msgid "Using another messaging service" msgstr "אני עושה כעת שימוש בשירות מסרים אחר" @@ -2000,23 +1783,21 @@ msgid "Pending" msgstr "בהמתנה" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "משך זמן" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "תקלה לא מוכרת" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" "כתובת sip proxy שהזנת הינה שגויה, זו צריכה להתחיל עם‭\"sip:\" ‬ לאחר שם מארח." -# כמו למשל -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -2024,314 +1805,159 @@ msgstr "" "זהות sip שהוזנה הינה שגויה.\n" "זו צריכה להיראות כמו sip:username@proxydomain, למשל sip:alice@example.net" -# בשם כ־ -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "לא ניתן להתחבר בזהות %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "צלצול מרוחק." -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "צלצול מרוחק..." -# A SIP state -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "מדיה מוקדמת." -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "שיחה עם %s מושהית." -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "קריאה נענתה על ידי %s - בהמתנה." -# renewed -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "קריאה חודשה." -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "קריאה נענתה על ידי %s." -# לא תואם -# אי תאימות -# אי התאמה -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "חוסר תאימות, בדוק קודקים או הגדרות אבטחה..." -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "פרמטריי מדיה חסרי תואמים." + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "חזרנו." -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "אנו מושהים על ידי צד אחר." -# באופן מרוחק -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "שיחה עודכנה מרחוק." -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "קריאה הסתיימה." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "משתמש עסוק כעת." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "משתמש לא זמין זמנית." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "משתמש לא מעוניין שיפריעו לו." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "קריאה סורבה." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "מכוון מחדש" -# לא תואם -# אי תאימות -# אי התאמה -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "פרמטריי מדיה חסרי תואמים." - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "קריאה נכשלה." -# הרשמה אצל %s הושלמה בהצלחה. -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "רישום אצל %s הושלם בהצלחה." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "אי רישום אצל %s סוים." -# Pas de réponse -# no response in defined time -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "אין היענות תוך זמן מוגדר" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "רישום אצל %s נכשל: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 +#: ../coreapi/linphonecall.c:174 #, c-format msgid "Authentication token is %s" msgstr "אות האימות הינה %s" -# האם כדאי לחקות את הטלפונים הניידים? שיחות של נענו -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "החמצת שיחה %i." msgstr[1] "החמצת %i שיחות." -#~ msgid "aborted" -#~ msgstr "ננטשה" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" -#~ msgid "completed" -#~ msgstr "הסתיימה" +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" -#~ msgid "missed" -#~ msgstr "הוחמצה" +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" -# needs to be tested -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s אצל %s\n" -#~ "מאת: %s\n" -#~ "אל: %s\n" -#~ "מצב: %s\n" -#~ "משך: %i mn %i sec\n" +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" -#~ msgid "Outgoing call" -#~ msgstr "קריאה יוצאת" +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" -#~ msgid "No response." -#~ msgstr "אין תגובה." - -#~ msgid "Protocol error." -#~ msgstr "שגיאת פרוטוקול." - -# לרוב -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "לא ניתן היה לפענח את הכתובת שניתנה. כתובת sip בדרך כלל נראית כך: sip:" -#~ "user@domain" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "נראה שמחשבך עושה שימוש במנהל התקן הקול ALSA.\n" -#~ "זוהי הבחירה הטובה ביותר. אולם מודול ההדמיה (emulation module) של pcm oss\n" -#~ "נעדר ולינפון זקוק לו. נא להריץ את הפקודה\n" -#~ "‫'modprobe snd-pcm-oss' כמשתמש שורש (משתמש על) כדי להטעינו." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "נראה שמחשבך עושה שימוש במנהל התקן הקול ALSA.\n" -#~ "זוהי הבחירה הטובה ביותר. אולם מודול ההדמיה (emulation module) של mixer " -#~ "oss\n" -#~ "נעדר ולינפון זקוק לו. נא להריץ את הפקודה\n" -#~ "‫'modprobe snd-mixer-oss' כמשתמש שורש (משתמש על) כדי להטעינו." - -#~ msgid "by %s" -#~ msgstr "מאת %s" - -#~ msgid "Keypad" -#~ msgstr "לוח מקשים" - -# שוחחו -#~ msgid "Chat with %s" -#~ msgstr "שיחה עם %s" - -#~ msgid "Enable video" -#~ msgstr "הפעל וידאו" - -# הזנת -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "נא להזין שם משתמש, מספר טלפון, או כתובת sip מלאה" - -# עיון -#~ msgid "Lookup:" -#~ msgstr "חיפוש:" - -# במסגרת -#~ msgid "in" -#~ msgstr "בקרב" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "רישום אל FONICS\n" -#~ "רשת עבודה וירטואלית !" - -#~ msgid "edit" -#~ msgstr "עריכה" - -#~ msgid "We are being paused..." -#~ msgstr "אנחנו כעת מושהים..." - -#~ msgid "No common codecs" -#~ msgstr "אין קודקים משותפים" - -#~ msgid "Please choose a username:" -#~ msgstr "נא לבחור שם משתמש:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "בודק כעת אם '%s' זמין..." - -#~ msgid "Please wait..." -#~ msgstr "נא להמתין..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "צר לי, שם משתמש זה כבר קיים. נא לנסות אחד חדש." - -#, fuzzy -#~ msgid "Ok !" -#~ msgstr "חיובי !" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "בעיית תקשורת, נא לנסות שוב מאוחר יותר." - -#~ msgid "Choosing a username" -#~ msgstr "בחירת שם משתמש" - -# וידוא -#, fuzzy -#~ msgid "Verifying" -#~ msgstr "מאמת כעת" - -#~ msgid "Creating your account" -#~ msgstr "חשבונך נוצר כעת" - -#~ msgid "Now ready !" -#~ msgstr "מוכן כעת !" - -#~ msgid "" -#~ "Pause all calls\n" -#~ "and answer" -#~ msgstr "" -#~ "Pauser les appels en cours\n" -#~ "et répondre" - -#~ msgid "Contact list" -#~ msgstr "Liste de contacts" - -#~ msgid "Audio & video" -#~ msgstr "Audio et video" - -#~ msgid "Audio only" -#~ msgstr "Audio seul" - -#~ msgid "Duration:" -#~ msgstr "Durée:" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "Historique des appels" - -#~ msgid "_Linphone" -#~ msgstr "_Linphone" - -#~ msgid "Register at startup" -#~ msgstr "S'enregistrer au démarrage" - -#~ msgid "Sorry, you have to pause or stop the current call first !" -#~ msgstr "Désolé, vous devez d'abord mettre en attente l'appel en cours." - -#~ msgid "There is already a call in process, pause or stop it first." -#~ msgstr "" -#~ "Il y a déjà un appel en cours, veuillez d'abord le mettre en attente ou " -#~ "le raccrocher." +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/hu.po b/po/hu.po index 86c3032b5..1fe343f05 100644 --- a/po/hu.po +++ b/po/hu.po @@ -1,21 +1,22 @@ -# Hungarian translation for Linphone. -# Copyright 2013. -# This file is distributed under the same license as the linphone package. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # +# Translators: msgid "" msgstr "" -"Project-Id-Version: Linphone\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2013-03-26 19:00+0100\n" -"Last-Translator: Viktor \n" -"Language-Team: \n" -"Language: Hungarian\n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Hungarian (http://www.transifex.com/projects/p/linphone-gtk/" +"language/hu/)\n" +"Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Poedit 1.5.4\n" -"Plural-Forms: nplurals=1; plural=1 == 1 ? 0 : 1;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -28,9 +29,9 @@ msgid "Send text to %s" msgstr "Szöveg küldése a következőnek: %s" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "vonalban" +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" @@ -52,38 +53,27 @@ msgstr "Elutasítva" #, c-format msgid "%i minute" msgid_plural "%i minutes" -msgstr[0] "%i perc" +msgstr[0] "" +msgstr[1] "" #: ../gtk/calllogs.c:332 #, c-format msgid "%i second" msgid_plural "%i seconds" -msgstr[0] "%i másodperc" - -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, fuzzy, c-format -msgid "%s\t%s" -msgstr "" -"%s\t%s\t\n" -"%s\t%s" +msgstr[0] "" +msgstr[1] "" #: ../gtk/calllogs.c:337 -#, fuzzy, c-format +#, c-format msgid "" "%s\tQuality: %s\n" "%s\t%s\t" msgstr "" -"%s\t%s\tMinőség: %s\n" -"%s\t%s %s\t" -#: ../gtk/calllogs.c:343 -#, fuzzy, c-format -msgid "" -"%s\t\n" -"%s" +#: ../gtk/calllogs.c:341 +#, c-format +msgid "%s\t%s" msgstr "" -"%s\t%s\t\n" -"%s\t%s" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" @@ -98,7 +88,7 @@ msgstr "én" msgid "Couldn't find pixmap file: %s" msgstr "Nemtalálható a pixmap fájl: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "Érvénytelen sip partner !" @@ -135,21 +125,14 @@ msgstr "" "lennie, pl. C:\\Program Files\\Linphone)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Információk" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "Fiók beállítása varázsló" +msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Hívás %s -el" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -162,68 +145,66 @@ msgstr "" "szeretné adni a partnerlistához?\n" "Ha nemmel válaszol, ez a személy átmenetileg tiltólistára kerül." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -"Kérem, adja meg jelszavát a következő felhasználónévhez: %s\n" -"tartomány %s:" -#: ../gtk/main.c:1376 +#: ../gtk/main.c:1283 msgid "Call error" msgstr "Hiba a hívás közben" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Hívás vége" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Beérkező hívás" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Hívás fogadása" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Elutasítás" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 msgid "Call paused" msgstr "Hívás várakoztatva" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 #, c-format msgid "by %s" msgstr "a következő által: %s" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s szerené elidítani a videót. Elfogadja?" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Internetes oldal" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - internetes videó telefon" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (Alapértelmezett)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "Át vagyunk irányítva ide: %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -231,7 +212,7 @@ msgstr "" "Hangkártya nincs érzékelve ezen a számítógépen.\n" "Nem fog tudni hang hívásokat küldeni vagy fogadni." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "Egy ingyenes SIP video-telefon" @@ -271,9 +252,9 @@ msgid "Delete contact '%s'" msgstr "'%s' partner törlése" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "'%s' partner törlése" +msgstr "" #: ../gtk/friendlist.c:1029 #, c-format @@ -289,9 +270,8 @@ msgid "Status" msgstr "Állapot" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Min bitrate (kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -309,94 +289,94 @@ msgstr "Tiltva" msgid "Account" msgstr "Hozzáférés" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "angol" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "francia" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "svéd" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "olasz" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "spanyol" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "brazil-portugál" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "lengyel" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "német" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "orosz" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "japán" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "holland" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "magyar" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "cseh" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "egyszerúsített kínai" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "tradícionális kínai" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "norvég" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "héber" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" "Újra kell indítania a linphone-t, hogy az új nyelv kiválasztása érvényre " "jusson. " -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "Nincs" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "ZRTP" @@ -437,15 +417,14 @@ msgstr "Adatok fogadása..." #, c-format msgid "Found %i contact" msgid_plural "Found %i contacts" -msgstr[0] "Találat: %i partner" +msgstr[0] "" +msgstr[1] "" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Üdvözöljük !\n" -"Ez a varázsló segít Önnek, hogy sip fiókot használjon hívásaihoz." #: ../gtk/setupwizard.c:43 msgid "Create an account on linphone.org" @@ -542,40 +521,39 @@ msgstr "" "hivatkozásra kattintva.\n" "Azután térjen vissza ide és kattintson a Következő gombra." -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "Fiók beállítása varázsló" +msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "A fiók beállítása varázsló üdvözli Önt" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Fiók beállítása varázsló" -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "Az Ön fiókjának beállítása (1/1 lépés)" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "Adja meg sip felhasználónevét (1/2 lépés)" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "Adja meg a fiókinformációt (1/2 lépés)" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "Érvényesítés (2/2 lépés)" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "Hiba" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "Befejezés" @@ -660,105 +638,100 @@ msgstr "" msgid "%.3f seconds" msgstr "%.3f másodperc" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "Befejezés" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "Hívás folyamatban..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00::00::00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "Beérkező hívás" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "jó" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "közepes" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "gyenge" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "nagyon gyenge" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "rossz" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "nem elérhető" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "SRTP-vel titkosítva" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "ZRTP-vel titkosítva - [hitelesítési jel: %s]" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "Beállítás ellenőrizetlenként" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "Beállítás ellenőrzöttként" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "Konferencián" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "vonalban" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "Várakoztatott hívás" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i::%02i::%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Hívás vége." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "Átvitel folyamatban" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "Átvitel befejezve." -#: ../gtk/incall_view.c:809 +#: ../gtk/incall_view.c:831 msgid "Transfer failed." msgstr "Az átvitel sikertelen." -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "Visszatérés" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "Várakoztatás" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" @@ -767,7 +740,7 @@ msgstr "" "Felvétel a következőbe\n" "%s %s" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "(Várakoztatva)" @@ -777,9 +750,9 @@ msgid "Please enter login information for %s" msgstr "Kérem, adja meg a bejelentkezési információt %s -hoz" #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "Beérkező hívás" +msgstr "" #: ../gtk/config-fetching.c:73 #, c-format @@ -803,32 +776,26 @@ msgid "Too loud" msgstr "" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"Üdvözöljük !\n" -"Ez a varázsló segít Önnek, hogy sip fiókot használjon hívásaihoz." #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Felvevő hang eszköz:" +msgstr "" #: ../gtk/audio_assistant.c:329 -#, fuzzy msgid "Recorded volume" -msgstr "Felvételi forrás:" +msgstr "" #: ../gtk/audio_assistant.c:333 msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Lejátszó hang eszköz:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -847,14 +814,12 @@ msgid "Let's start Linphone now" msgstr "" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "Fiók varázsló" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "Fiók varázsló" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -933,9 +898,8 @@ msgid "_Options" msgstr "_Beállítások" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Proxy/Regisztráció konfigurációs doboz" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -1022,20 +986,20 @@ msgid "Login information" msgstr "Bejelentkezési információ" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "Üdvözöljük !" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "Törlés" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "Linphone névjegy" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." @@ -1044,7 +1008,6 @@ msgstr "" "használja." #: ../gtk/about.ui.h:5 -#, fuzzy msgid "" "fr: Simon Morlat\n" "en: Simon Morlat and Delphine Perreau\n" @@ -1059,17 +1022,6 @@ msgid "" "hu: anonymous\n" "he: Eli Zaretskii \n" msgstr "" -"francia: Simon Morlat\n" -"angol: Simon Morlat és Delphine Perreau\n" -"olasz: Alberto Zanoni \n" -"német: Jean-Jacques Sarton \n" -"svéd: Daniel Nylander \n" -"spanyol: Jesus Benitez \n" -"japán: YAMAGUCHI YOSHIYA \n" -"brazil-portugál: Rafael Caesar Lenzi \n" -"lengyel: Robert Nasiadek \n" -"cseh: Petr Pisar \n" -"magyar: anonymous és Barczi Viktor \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1144,9 +1096,8 @@ msgid "Registration duration (sec):" msgstr "Regisztrálási Időköz (mp):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Út (nem kötelező):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1157,9 +1108,8 @@ msgid "Route (optional):" msgstr "Út (nem kötelező):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Átvitel" +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1170,9 +1120,8 @@ msgid "Publish presence information" msgstr "Jelenléti információ közlése" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Engedélyezés" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1214,7 +1163,7 @@ msgstr "Audió kódekek" msgid "Video codecs" msgstr "Videó kódekek" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "C" @@ -1279,14 +1228,12 @@ msgid "DSCP fields" msgstr "DSCP mezők" #: ../gtk/parameters.ui.h:26 -#, fuzzy msgid "SIP/TCP port" -msgstr "SIP port" +msgstr "" #: ../gtk/parameters.ui.h:27 -#, fuzzy msgid "SIP/UDP port" -msgstr "SIP port" +msgstr "" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1297,9 +1244,8 @@ msgid "Direct connection to the Internet" msgstr "Közvetlen Internet kapcsolat" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "NAT / tűzfal mögött (adja meg az átjáró IP címét)" +msgstr "" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" @@ -1366,9 +1312,8 @@ msgid "Prefered video resolution:" msgstr "Kívánt videó felbontás:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Videó bemeneti eszköz:" +msgstr "" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1491,29 +1436,22 @@ msgid "User interface" msgstr "Felhasználói környezet" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Sip cím:" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Hitelesítési információ" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "címke" +msgid "LDAP Account setup" +msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Proxy fiókok" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "Kész" @@ -1538,9 +1476,8 @@ msgid "Please wait" msgstr "Kérem várjon" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "DSCP beállítások" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" @@ -1595,9 +1532,8 @@ msgid "Video resolution received" msgstr "" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "Kívánt videó felbontás:" +msgstr "" #: ../gtk/call_statistics.ui.h:11 msgid "RTP profile" @@ -1627,84 +1563,21 @@ msgstr "Alagút beállítása" msgid "Configure http proxy (optional)" msgstr "http proxy beállítása (nem kötelező)" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "D" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "B" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "A" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Beállítások" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" msgstr "" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "uPnP nem elérhető" +msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Kódekek" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1715,14 +1588,12 @@ msgid "Authname" msgstr "" #: ../gtk/ldap.ui.h:11 -#, fuzzy msgid "Realm" -msgstr "tartomány:" +msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Audió" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1738,18 +1609,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "Sip cím:" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Keres valakit" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1764,9 +1633,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Videó" +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1797,86 +1665,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Kapcsolódás..." +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Kész" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Információk" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Telefonszám-cél keresése..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Nem sikkerült értelmezni a számot." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Kapcsolódás" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "Nem sikerült hívni" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Elnézést, elértük a egyidejű hívások maximális számát" -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "kapcsolatba lépett veled." -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "és automatikus választ kért." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "." - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "A hívási jellemzők módosítása..." -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Kapcsolódva." -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "Hívás megszakítva" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "Nem sikerült várakoztatni a hívást" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "Jelenlegi hívás várakoztatásának aktiválása..." -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "Stun keresés folyamatban..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "ICE helyi jelentkezők begyűjtése folyamatban..." @@ -1925,15 +1783,14 @@ msgid "Pending" msgstr "Függőben" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Időtartam" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Ismeretlen programhiba" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1941,7 +1798,7 @@ msgstr "" "Az Ön által megadott SIP proxy cím érvénytelen. \"sip:\"-tal kell kezdődnie, " "ezt egy hosztnév követi." -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1950,670 +1807,160 @@ msgstr "" "Így kéne kinéznie: sip:felhasznalonev@proxytartomany, például sip:" "aladar@pelda.hu" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "Nem sikerült belépni ezzel: %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "Távoli csengés." -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "Távoli csengés..." -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "Korai médiák." -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "A hívás a következővel: %s várakoztatva" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "%s fogadta a hívást - várakoztatva." -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "Hívás visszatért" -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "%s válaszolt a hívásra." -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" "Nem kompatibilis, ellenőrizze a kódek- vagy a biztonsági beállításokat..." -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "Nem kompatibilis médiajellemzők." + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "Visszatértünk." -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "Megállítva a másik fél által." -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "A hívás távolról frissítve." -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "A hívás befejezve." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "A felhasználó foglalt." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "A felhasználó ideiglenesen nem elérhető" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "A felhasználó nem akarja, hogy zavarják." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Hívás elutasítva" -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "Átirányítva" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "Nem kompatibilis médiajellemzők." - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "Nem sikerült a hívás." -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "A regisztáció a %s -n sikerült." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "A kiregisztrálás kész a következőn: %s ." -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "időtúllépés után nincs válasz" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "A regisztáció a %s -n nem sikerült: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 +#: ../coreapi/linphonecall.c:174 #, c-format msgid "Authentication token is %s" msgstr "Hitelesítési jel: %s" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." -msgstr[0] "Van %i nem fogadott hivás." - -#~ msgid "aborted" -#~ msgstr "megszakítva" - -#~ msgid "completed" -#~ msgstr "befejezve" - -#~ msgid "missed" -#~ msgstr "elhibázva" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s nél %s\n" -#~ "Tól: %s\n" -#~ "Ig: %s\n" -#~ "Állapot: %s\n" -#~ "Időtartam: %i perc %i másodperc\n" - -#~ msgid "Outgoing call" -#~ msgstr "Kimenő hívás" - -#~ msgid "No response." -#~ msgstr "Nincs válasz." - -#~ msgid "Protocol error." -#~ msgstr "Protokol hiba." - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Az adott szám nem értelmezhető. Egy sip cím általában így néz ki: " -#~ "user@domain" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "A számítógéped úgy tűnik, hogy ALSA hangot használ.\n" -#~ "Ez a legjobb választás. Mindazonáltal a pcm* OSS emuláció modulra\n" -#~ " a linphone-nak szüksége van és ez hiányzik. Kérem futassa le a\n" -#~ "'modprobe snd-pcm-oss' parancsot rendszergazdaként." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "A számítógéped úgy tűnik, hogy ALSA hangot használ.\n" -#~ "Ez a legjobb választás. Mindazonáltal a mixer OSS emuláció modulra\n" -#~ " a linphone-nak szüksége van és ez hiányzik. Kérem futassa le a\n" -#~ "'modprobe snd-pcm-oss' parancsot rendszergazdaként." - -#~ msgid "Chat with %s" -#~ msgstr "Chat-elés %s -el" - -#, fuzzy -#~ msgid "Choosing a username" -#~ msgstr "felhasználónév:" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "Engedélyezve" - -#, fuzzy -#~ msgid "Unmute" -#~ msgstr "Korlátlan" - -#, fuzzy -#~ msgid "Contact list" -#~ msgstr "Kapcsolatilista" - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "Audio kodekek" - -#, fuzzy -#~ msgid "Audio only" -#~ msgstr "Audio kodekek" - -#, fuzzy -#~ msgid "Duration:" -#~ msgstr "Információk" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "Linphone - Híváselőzmények" - -#, fuzzy -#~ msgid "_Linphone" -#~ msgstr "Linphone" - -#, fuzzy -#~ msgid "gtk-cancel" -#~ msgstr "Kapcsolódva." - -#, fuzzy -#~ msgid "gtk-ok" -#~ msgstr "Eltávolítás" - -#, fuzzy -#~ msgid "gtk-close" -#~ msgstr "Kapcsolódva." - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "A géped úgy tűnik, hogy csatlakozik egy IPv6 hálózathoz. Alapból a " -#~ "linphone mindig az IPv4-et használja. Frissítsd a konfigurációdat, ha " -#~ "használni akarod az IPv6-ot" - -#, fuzzy -#~ msgid "_Modes" -#~ msgstr "Kodekek" - -#~ msgid "Accept" -#~ msgstr "Elfogad" - -#, fuzzy -#~ msgid "Incoming call from" -#~ msgstr "Beérkező hívás" - -#, fuzzy -#~ msgid "Linphone - Incoming call" -#~ msgstr "Beérkező hívás" - -#, fuzzy -#~ msgid "" -#~ "Audio codecs\n" -#~ "Video codecs" -#~ msgstr "Audio és video kodekek" - -#~ msgid "Sorry, having multiple simultaneous calls is not supported yet !" -#~ msgstr "Bocsánat, a többszörös egyidejű hívások még nem támogatottak!" - -#~ msgid "Could not reach destination." -#~ msgstr "A cél elérhetetlen." - -#~ msgid "Request Cancelled." -#~ msgstr "Kérelem elutasítva." - -#~ msgid "Bad request" -#~ msgstr "Rossz kérés" - -#~ msgid "User cannot be found at given address." -#~ msgstr "Nem telálható felhasználó at adott címen." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "" -#~ "A távoli felhasználó nem rendelkezik a javasolt kódoló-dekódolókkal " -#~ "(codecs)" - -#~ msgid "Timeout." -#~ msgstr "Időtúllépés." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "A távoli gép elérhető, de a kapcsolatot visszautasította." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "A felhasználó nem elérhető pillanatnyilag de meghívja Önt\n" -#~ "thogy lépjen kapcsolatba vele miközben használja a következő alternatív " -#~ "erőforrást:" - -#~ msgid "No nat/firewall address supplied !" -#~ msgstr "Nincs nat/tűzfal cím megadva!" - -#~ msgid "Invalid nat address '%s' : %s" -#~ msgstr "Hibás nat cím '%s' : %s" - -#~ msgid "Gone" -#~ msgstr "Elveszítve" - -#~ msgid "Waiting for Approval" -#~ msgstr "Jóváhagyásra vár" - -#~ msgid "Be Right Back" -#~ msgstr "Legyen igazad" - -#~ msgid "On The Phone" -#~ msgstr "Telefonál" - -#~ msgid "Out To Lunch" -#~ msgstr "Ebédelni ment" - -#~ msgid "Closed" -#~ msgstr "Lezárva" - -#, fuzzy -#~ msgid "_View" -#~ msgstr "Video" - -#, fuzzy -#~ msgid "_Properties" -#~ msgstr "RTP beállítások" - -#, fuzzy -#~ msgid "Show logs" -#~ msgstr "Mutasd a hívásokat" - -#, fuzzy -#~ msgid "_About" -#~ msgstr "Hozzáférés" - -#, fuzzy -#~ msgid "Proxy in use" -#~ msgstr "Használt SIP Proxy:" - -#~ msgid "Sound" -#~ msgstr "Hang" - -#, fuzzy -#~ msgid "Proxy accounts" -#~ msgstr "Használt SIP Proxy:" - -#~ msgid "Go" -#~ msgstr "Ugrás" - -#~ msgid "Exit" -#~ msgstr "Kilépés" - -#~ msgid "Shows the address book" -#~ msgstr "Mutasd a címjegyzéket" - -#~ msgid "..." -#~ msgstr "..." - -#~ msgid "" -#~ "Hangup\n" -#~ "or refuse" -#~ msgstr "" -#~ "Lerak vagy\n" -#~ "Nem válaszol" - -#~ msgid "Or chat !" -#~ msgstr "Vagy chat-elj!" - -#~ msgid "Show more..." -#~ msgstr "További beállítások..." - -#~ msgid "Playback level:" -#~ msgstr "Lejátszási hangerő:" - -#~ msgid "Recording level:" -#~ msgstr "Felvételi hangerő:" - -#~ msgid "Ring level:" -#~ msgstr "Csengetési hangerő:" - -#~ msgid "Controls" -#~ msgstr "Vezérlés" - -#~ msgid "Reachable" -#~ msgstr "Elérhető" - -#~ msgid "Busy, I'll be back in " -#~ msgstr "Foglalt vagyok, jövök vissza" - -#~ msgid "The other party will be informed that you'll be back in X minutes" -#~ msgstr "A másik fél tájékoztatva lesz, hogy X perc alatt vissza fogsz jönni" - -#~ msgid "mn" -#~ msgstr "perc" - -#~ msgid "Moved temporarily" -#~ msgstr "Ideiglenesen nem elérhető" - -#~ msgid "Alternative service" -#~ msgstr "Átirányítás" - -#~ msgid "URL:" -#~ msgstr "URL:" - -#~ msgid "Presence" -#~ msgstr "Elérhető" - -#~ msgid "Press digits to send DTMFs." -#~ msgstr "Nyomja le a számokat a DTMF küldéshez" - -#~ msgid "" -#~ " 3\n" -#~ "def" -#~ msgstr "" -#~ " 3\n" -#~ "def" - -#~ msgid "" -#~ " 2\n" -#~ "abc" -#~ msgstr "" -#~ " 2\n" -#~ "abc" - -#~ msgid "" -#~ " 4\n" -#~ "ghi" -#~ msgstr "" -#~ " 4\n" -#~ "ghi" - -#~ msgid "" -#~ " 5\n" -#~ "jkl" -#~ msgstr "" -#~ " 5\n" -#~ "jkl" - -#~ msgid "" -#~ " 6\n" -#~ "mno" -#~ msgstr "" -#~ " 6\n" -#~ "mno" - -#~ msgid "" -#~ " 7\n" -#~ "pqrs" -#~ msgstr "" -#~ " 7\n" -#~ "pqrs" - -#~ msgid "" -#~ " 8\n" -#~ "tuv" -#~ msgstr "" -#~ " 8\n" -#~ "tuv" - -#~ msgid "" -#~ " 9\n" -#~ "wxyz" -#~ msgstr "" -#~ " 9\n" -#~ "wxyz" - -#~ msgid "DTMF" -#~ msgstr "DTMF" - -#~ msgid "My online friends" -#~ msgstr "Elérhető partnerek" - -#~ msgid "" -#~ "C: 2001\n" -#~ "Made in Old Europe" -#~ msgstr "" -#~ "C: 2001\n" -#~ "Made in Old Europe" - -#~ msgid "" -#~ "Linphone is a web-phone.\n" -#~ "It is compatible with SIP and RTP protocols." -#~ msgstr "" -#~ "A Linphone egy web-telefon.\n" -#~ "SIP és RTP kompatíbilis." - -#~ msgid "http://www.linphone.org" -#~ msgstr "http://www.linphone.org" - -#~ msgid "Use IPv6 network (if available)" -#~ msgstr "IPv6 hálózat használata (ha elérhető)" - -#~ msgid "" -#~ "Toggle this if you are on an ipv6 network and you wish linphone to use it." -#~ msgstr "Ha egy IPv6 hálózat elérhető, akkor a linphone használja azt." - -#~ msgid "Global" -#~ msgstr "Általános" - -#~ msgid "" -#~ "These options is only for users in a private network, behind a gateway. " -#~ "If you are not in this situation, then leave this empty." -#~ msgstr "" -#~ "Ez az opció azoknak a felhasználóknak kell, akik egy privát hálózaton " -#~ "tűzfal mögül interneteznek. Egyébként üresen kell hagyni." - -#~ msgid "No firewall" -#~ msgstr "Nincs tűzfal" - -#~ msgid "Use this STUN server to guess firewall address :" -#~ msgstr "STUN szerver használata a tűzfal címének meghatározásához." - -#~ msgid "Specify firewall address manually:" -#~ msgstr "Tűzfal külső címe:" - -#~ msgid "NAT traversal options (experimental)" -#~ msgstr "NAT beállítások áttekintése (kísérleti)" - -#~ msgid "Number of buffered miliseconds (jitter compensation):" -#~ msgstr "A pufferelt milisecondok száma (jitter compensation):" - -#~ msgid "RTP port used for audio:" -#~ msgstr "RTP port, audió használatra:" - -#~ msgid "Use SIP INFO message instead of RTP rfc2833 for DTMF transmitting" -#~ msgstr "Használj SIP INFO üzenetet RTP rfc2833 helyett a DTMF átvitelnél" - -#~ msgid "RTP-RFC2833 is the recommended way." -#~ msgstr "RTP-RFC2833 az ajánlott." - -#~ msgid "Other" -#~ msgstr "Egyéb" - -#~ msgid "micro" -#~ msgstr "mikrofon" - -#~ msgid "Enable echo-canceler (cancels the echo heard by the remote party)" -#~ msgstr "" -#~ "Visszhang törlés engedélyezése (törli a visszhangot, amit hall a távoli " -#~ "partner" - -#~ msgid "Choose file" -#~ msgstr "Fájl kiválasztás" - -#~ msgid "Listen" -#~ msgstr "Hallgatás" - -#~ msgid "Run sip user agent on port:" -#~ msgstr "SIP felhasználó ügynök által használt port:" - -#~ msgid "It is strongly recommended to use port 5060." -#~ msgstr "Erősen ajánlott az 5060-as port használata." - -#~ msgid "@" -#~ msgstr "@" - -#~ msgid "Identity" -#~ msgstr "Azonosító" - -#~ msgid "Add proxy/registrar" -#~ msgstr "Proxy vagy regisztráció hozzáadás" - -#~ msgid "Clear all stored authentication information (username,password...)" -#~ msgstr "" -#~ "Az összes tárolt hitelesítési információ törlése (felhasználónév, " -#~ "jelszó...)" - -#~ msgid "List of audio codecs, in order of preference:" -#~ msgstr "Az audió kódoló-dekódolók listája, a preferencia rendjében:" - -#~ msgid "" -#~ "Note: Codecs in red are not usable regarding to your connection type to " -#~ "the internet." -#~ msgstr "" -#~ "Figyelem: A pirosban lévő kodekek nem használhatók a jelenlegi " -#~ "internetkapcsolattal." - -#~ msgid "Codec information" -#~ msgstr "Kodekinformáció" - -#~ msgid "Address Book" -#~ msgstr "Címjegyzék" - -#~ msgid "Select" -#~ msgstr "Kiválasztás" - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you to contact him " -#~ "using the following alternate ressource:" -#~ msgstr "" -#~ "A felhasználó jelenleg nem elérhető, de kéri, hogy lépj vele kapcsolatba " -#~ "itt:" - -#~ msgid "None." -#~ msgstr "Nincs." - -#~ msgid "Send registration:" -#~ msgstr "Regisztárció küldés:" - -#~ msgid "Name:" -#~ msgstr "Név:" - -#~ msgid "Subscribe policy:" -#~ msgstr "Láthatósági szabály:" - -#~ msgid "Send subscription (see person's online status)" -#~ msgstr "Láthatóság küldése (látszik a személy elérhetőségi státusza)" - -#~ msgid "New incoming subscription" -#~ msgstr "Új beérkező előfizetés" - -#~ msgid "You have received a new subscription..." -#~ msgstr "Megkaptál egy új előfizetést." - -#~ msgid "Refuse" -#~ msgstr "Hulladék" - -#~ msgid "Authentication required for realm" -#~ msgstr "Hitelesítési kérelem a tartománynak" - -#~ msgid "userid:" -#~ msgstr "felhasználói azonosító:" - -#~ msgid "Text:" -#~ msgstr "Szöveg:" - -#~ msgid "The caller asks for resource reservation. Do you agree ?" -#~ msgstr "A hívó forrásfoglalást kér. Egyetértesz?" - -#~ msgid "" -#~ "The caller doesn't use resource reservation. \t\t\t\t\tDo you wish to " -#~ "continue anyway ?" -#~ msgstr "" -#~ "A hívó nem használ forrásfoglalást. \t\t\t\t\tÍgy is szeretnéd folytatni?" - -#~ msgid "linphone - receiving call from %s" -#~ msgstr "linphone - hívást fogad innen %s" - -#~ msgid "" -#~ "You have received a subscription from %s.This means that this person " -#~ "wishes to be notified of your presence information (online, busy, " -#~ "away...).\n" -#~ "Do you agree ?" -#~ msgstr "" -#~ "Kaptál egy előfizetést tőle %s. Ez azt jelenti, hogy ez a személy " -#~ "szeretné, hogy értesítsék a jelenlétinformációd (online, elfoglalt, " -#~ "away...).\n" -#~ "Egyetértesz?" - -#~ msgid "Authentication required for realm %s" -#~ msgstr "Hitelesítési kérelem ebből a tartományból %s" - -#~ msgid "Wait" -#~ msgstr "Várakozás" - -#~ msgid "Deny" -#~ msgstr "Tiltás" - -#~ msgid "Bad sip address: a sip address looks like sip:user@domain" -#~ msgstr "Rossz sip cím: egy sip cím általában így néz ki: user@domain" - -#~ msgid "Stun lookup done..." -#~ msgstr "Stun keresés kész..." +msgstr[0] "" +msgstr[1] "" + +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/it.po b/po/it.po index 980db056b..29577b62b 100644 --- a/po/it.po +++ b/po/it.po @@ -1,19 +1,22 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. -# FIRST AUTHOR , YEAR. -# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: Linphone 3.2.0\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2002-10-15 HO:MI+ZONE\n" -"Last-Translator: Matteo Piazza \n" -"Language-Team: it \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Italian (http://www.transifex.com/projects/p/linphone-gtk/" +"language/it/)\n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -26,28 +29,25 @@ msgid "Send text to %s" msgstr "Invia testo a %s" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "In chiamata con" +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "annullato" +msgstr "" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "mancante" +msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "Rifiuta" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -63,11 +63,6 @@ msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -75,11 +70,9 @@ msgid "" "%s\t%s\t" msgstr "" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -87,18 +80,15 @@ msgid "Conference" msgstr "" #: ../gtk/conference.c:46 -#, fuzzy msgid "Me" msgstr "" -"Chiudi\n" -"microfono" #: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "Contatto SIP non valido" @@ -133,21 +123,14 @@ msgid "" msgstr "" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Informazioni" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "Configuratore di account" +msgstr "" -#: ../gtk/main.c:590 -#, fuzzy, c-format -msgid "Call with %s" -msgstr "Chat con %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -159,74 +142,72 @@ msgstr "" "veda il tuo stato o aggiungerlo alla tua lista dei contatti Se rispondi no " "questo utente sarà momentaneamente bloccato." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "Prego inserire la password per username %s e dominio %s" +msgstr "" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "Cronologia" +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Chiamata terminata" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Chimata in entrata" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Rifiuta" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "annullato" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "Porte" +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (Default)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "" @@ -243,9 +224,8 @@ msgid "Name" msgstr "Nome" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "Chiamata %s" +msgstr "" #: ../gtk/friendlist.c:726 msgid "Chat" @@ -267,9 +247,9 @@ msgid "Delete contact '%s'" msgstr "Elimina contatto %s" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "Elimina contatto %s" +msgstr "" #: ../gtk/friendlist.c:1029 #, c-format @@ -285,9 +265,8 @@ msgid "Status" msgstr "Stato" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Bitrate Min (kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -305,92 +284,92 @@ msgstr "Disattivato" msgid "Account" msgstr "Account" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "Inglese" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Francese" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Svedese" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Italiano" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Spagnolo" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Polacco" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Tedesco" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Russo" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "Giapponese" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Olandese" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Ungherese" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Ceco" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Riavviare il software per utilizzare la nuova lingua selezionata" -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -436,26 +415,21 @@ msgstr[1] "Trovato %i contatti" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Benvenuti !\n" -"La procedura vi aiutera a configurare un account SIP." #: ../gtk/setupwizard.c:43 -#, fuzzy msgid "Create an account on linphone.org" -msgstr "Creare un account scegliendo l'username" +msgstr "" #: ../gtk/setupwizard.c:44 -#, fuzzy msgid "I have already a linphone.org account and I just want to use it" -msgstr "Ho gia un account e voglio usarlo" +msgstr "" #: ../gtk/setupwizard.c:45 -#, fuzzy msgid "I have already a sip account and I just want to use it" -msgstr "Ho gia un account e voglio usarlo" +msgstr "" #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" @@ -478,14 +452,12 @@ msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "Username" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "Password" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -500,14 +472,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "Manuale utente" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "Password:" +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -538,49 +508,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "Configuratore di account" +msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "Benvenuto nel configuratore di account" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Configuratore di account" -#: ../gtk/setupwizard.c:629 -#, fuzzy +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" -msgstr "Configurazione SIP account" +msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 -#, fuzzy +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" -msgstr "Termina chiamata" +msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "Chiamata %s" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -596,9 +563,8 @@ msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "Filtro ICE" +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -609,9 +575,8 @@ msgid "Going through one or more NATs" msgstr "" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "Rediretto verso %s..." +msgstr "" #: ../gtk/incall_view.c:231 msgid "Through a relay server" @@ -622,9 +587,8 @@ msgid "uPnP not activated" msgstr "" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "Ricerca Stun in progresso ..." +msgstr "" #: ../gtk/incall_view.c:243 msgid "uPnp not available" @@ -635,9 +599,8 @@ msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "Filtro ICE" +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -660,117 +623,107 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 -#, fuzzy +#: ../gtk/incall_view.c:511 msgid "Calling..." -msgstr "Linguaggio" +msgstr "" -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "" -#: ../gtk/incall_view.c:515 -#, fuzzy +#: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "Chimata in entrata" +msgstr "" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 -#, fuzzy +#: ../gtk/incall_view.c:722 msgid "In call" -msgstr "In chiamata con" - -#: ../gtk/incall_view.c:738 -#, fuzzy -msgid "Paused call" -msgstr "Termina chiamata" - -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" msgstr "" -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:758 +msgid "Paused call" +msgstr "" + +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Chiamata terminata." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "Chiamata rifiutata" +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "" @@ -780,9 +733,9 @@ msgid "Please enter login information for %s" msgstr "Prego inserire le proprie credenziali di accesso per %s" #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "Chiamata proveniente da %s" +msgstr "" #: ../gtk/config-fetching.c:73 #, c-format @@ -806,18 +759,14 @@ msgid "Too loud" msgstr "" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"Benvenuti !\n" -"La procedura vi aiutera a configurare un account SIP." #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Dispositivo microfono:" +msgstr "" #: ../gtk/audio_assistant.c:329 msgid "Recorded volume" @@ -828,9 +777,8 @@ msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Dispositivo uscita audio:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -849,14 +797,12 @@ msgid "Let's start Linphone now" msgstr "" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "Configuratore" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "Configuratore di account" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -871,9 +817,8 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "Chiamata terminata." +msgstr "" #: ../gtk/main.ui.h:2 msgid "Send" @@ -916,22 +861,16 @@ msgid "All users" msgstr "" #: ../gtk/main.ui.h:18 -#, fuzzy msgid "Online users" msgstr "" -"Tutti gli utenti\n" -"Utenti Online" #: ../gtk/main.ui.h:19 msgid "ADSL" msgstr "" #: ../gtk/main.ui.h:20 -#, fuzzy msgid "Fiber Channel" msgstr "" -"ADSL\n" -"Fibra Ottica" #: ../gtk/main.ui.h:21 msgid "Default" @@ -942,9 +881,8 @@ msgid "_Options" msgstr "" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Informazioni" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -959,9 +897,8 @@ msgid "_Help" msgstr "" #: ../gtk/main.ui.h:27 -#, fuzzy msgid "Show debug window" -msgstr "Linphone debug window" +msgstr "" #: ../gtk/main.ui.h:28 msgid "_Homepage" @@ -972,9 +909,8 @@ msgid "Check _Updates" msgstr "" #: ../gtk/main.ui.h:30 -#, fuzzy msgid "Account assistant" -msgstr "Configuratore di account" +msgstr "" #: ../gtk/main.ui.h:32 msgid "SIP address or phone number:" @@ -985,28 +921,24 @@ msgid "Initiate a new call" msgstr "" #: ../gtk/main.ui.h:34 -#, fuzzy msgid "Contacts" -msgstr "In connessione" +msgstr "" #: ../gtk/main.ui.h:35 msgid "Search" msgstr "" #: ../gtk/main.ui.h:36 -#, fuzzy msgid "Add contacts from directory" -msgstr "Aggiungi nuovo contatto dalla directory %s" +msgstr "" #: ../gtk/main.ui.h:37 -#, fuzzy msgid "Add contact" -msgstr "Trovato %i contatto" +msgstr "" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "In chiamata" +msgstr "" #: ../gtk/main.ui.h:39 msgid "My current identity:" @@ -1037,25 +969,24 @@ msgid "Login information" msgstr "Credenziali di accesso" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "Benvenuto !" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "Info Linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" msgstr "" #: ../gtk/about.ui.h:4 -#, fuzzy msgid "An internet video phone using the standard SIP (rfc3261) protocol." -msgstr "Un internet video telefono basato sullo standard SIP (rfc3261)" +msgstr "" #: ../gtk/about.ui.h:5 msgid "" @@ -1098,9 +1029,8 @@ msgid "Scroll to end" msgstr "" #: ../gtk/password.ui.h:1 -#, fuzzy msgid "Linphone - Authentication required" -msgstr "Linphone - Autenticazione richiesta" +msgstr "" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" @@ -1115,9 +1045,8 @@ msgid "Clear all" msgstr "" #: ../gtk/call_logs.ui.h:3 -#, fuzzy msgid "Call back" -msgstr "Chiamata %s" +msgstr "" #: ../gtk/sip_account.ui.h:1 msgid "Linphone - Configure a SIP account" @@ -1148,9 +1077,8 @@ msgid "Registration duration (sec):" msgstr "Durata registrazione (sec)" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Rotta (opzionale)" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1161,9 +1089,8 @@ msgid "Route (optional):" msgstr "Rotta (opzionale)" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Transporto" +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1174,9 +1101,8 @@ msgid "Publish presence information" msgstr "Pubblica stato della presenza" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Attivato" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1199,9 +1125,8 @@ msgid "default soundcard" msgstr "default scheda audio" #: ../gtk/parameters.ui.h:5 -#, fuzzy msgid "a sound card" -msgstr "una scheda audio\n" +msgstr "" #: ../gtk/parameters.ui.h:6 msgid "default camera" @@ -1212,37 +1137,28 @@ msgid "CIF" msgstr "CIF" #: ../gtk/parameters.ui.h:8 -#, fuzzy msgid "Audio codecs" msgstr "" -"Audio codecs\n" -"Video codecs" #: ../gtk/parameters.ui.h:9 -#, fuzzy msgid "Video codecs" msgstr "" -"Audio codecs\n" -"Video codecs" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 -#, fuzzy msgid "SIP (UDP)" -msgstr "SIP (UDP)" +msgstr "" #: ../gtk/parameters.ui.h:12 -#, fuzzy msgid "SIP (TCP)" -msgstr "SIP (UDP)" +msgstr "" #: ../gtk/parameters.ui.h:13 -#, fuzzy msgid "SIP (TLS)" -msgstr "SIP (UDP)" +msgstr "" #: ../gtk/parameters.ui.h:14 msgid "Settings" @@ -1309,23 +1225,20 @@ msgid "Direct connection to the Internet" msgstr "Connessione diretta a internet" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "Dietro NAT / Firewall (IP del gateway)" +msgstr "" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Dietro NAT / Firewall (utilizza STUN)" #: ../gtk/parameters.ui.h:32 -#, fuzzy msgid "Behind NAT / Firewall (use ICE)" -msgstr "Dietro NAT / Firewall (utilizza STUN)" +msgstr "" #: ../gtk/parameters.ui.h:33 -#, fuzzy msgid "Behind NAT / Firewall (use uPnP)" -msgstr "Dietro NAT / Firewall (utilizza STUN)" +msgstr "" #: ../gtk/parameters.ui.h:34 msgid "Public IP address:" @@ -1380,9 +1293,8 @@ msgid "Prefered video resolution:" msgstr "Risoluzione video preferita" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Dispositivo Video:" +msgstr "" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1496,38 +1408,30 @@ msgid "Show advanced settings" msgstr "" #: ../gtk/parameters.ui.h:75 -#, fuzzy msgid "Level" -msgstr "Linguaggio" +msgstr "" #: ../gtk/parameters.ui.h:76 msgid "User interface" msgstr "Interfaccia utente" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Indirizzi SIP" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Linphone - Autenticazione richiesta" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "etichetta" +msgid "LDAP Account setup" +msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Account proxy" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "Fatto" @@ -1552,46 +1456,36 @@ msgid "Please wait" msgstr "Prego attendere" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Preferenze" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" msgstr "" #: ../gtk/dscp_settings.ui.h:3 -#, fuzzy msgid "Audio RTP stream" -msgstr "campionatore di frequenza" +msgstr "" #: ../gtk/dscp_settings.ui.h:4 -#, fuzzy msgid "Video RTP stream" -msgstr "Video RTP/UDP" +msgstr "" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" msgstr "" #: ../gtk/call_statistics.ui.h:1 -#, fuzzy msgid "Call statistics" -msgstr "Chiamata %s" +msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" msgstr "" -"Audio codecs\n" -"Video codecs" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" msgstr "" -"Audio codecs\n" -"Video codecs" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1618,24 +1512,20 @@ msgid "Video resolution received" msgstr "" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "Risoluzione video preferita" +msgstr "" #: ../gtk/call_statistics.ui.h:11 -#, fuzzy msgid "RTP profile" -msgstr "RTP imput filter" +msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "Contact informazioni" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 -#, fuzzy msgid "Configure VoIP tunnel" -msgstr "Configurazione SIP account" +msgstr "" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" @@ -1653,70 +1543,9 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "D" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "B" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "A" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Preferenze" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" @@ -1727,9 +1556,8 @@ msgid "Not yet available" msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Codecs" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1744,9 +1572,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Audio" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1762,18 +1589,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "Indirizzi SIP" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Cerca" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1788,9 +1613,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Video" +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1821,91 +1645,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "In connessione..." +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Pronto" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Informazioni" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Ricerca numero destinazione..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Impossibile risolvere il numero." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "In connessione" -#: ../coreapi/linphonecore.c:2425 -#, fuzzy +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" -msgstr "chiamata fallita" +msgstr "" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:2745 -#, fuzzy +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" -msgstr "ti sta conttatando." +msgstr "" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Connessione" -#: ../coreapi/linphonecore.c:3220 -#, fuzzy +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" -msgstr "annullato" +msgstr "" -#: ../coreapi/linphonecore.c:3412 -#, fuzzy +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" -msgstr "chiamata fallita" +msgstr "" -#: ../coreapi/linphonecore.c:3417 -#, fuzzy +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." -msgstr "Mostra chiamata corrente" +msgstr "" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "Ricerca Stun in progresso ..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1954,15 +1763,14 @@ msgid "Pending" msgstr "Pendente" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Durata" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Bug-sconosciuto" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1970,7 +1778,7 @@ msgstr "" "L'indirizzo sip proxy utilizzato è invalido, deve iniziare con \"sip:\" " "seguito dall' hostaname." -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1978,555 +1786,159 @@ msgstr "" "L'identità sip utilizza è invalida.\n" "Dovrebbre essere sip:username@proxydomain, esempio: sip:alice@example.net" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "impossibile login come %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "" -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:435 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:475 +#, c-format msgid "Call with %s is paused." -msgstr "Chat con %s" +msgstr "" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:459 -#, fuzzy +#: ../coreapi/callbacks.c:498 msgid "Call resumed." -msgstr "Chiamata terminata" +msgstr "" -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "" -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Chiamata terminata." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Utente occupato" -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Utente non disponibile" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "L'utente non vuole essere disturbato" -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Chiamata rifiutata" -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 -#, fuzzy +#: ../coreapi/callbacks.c:780 msgid "Redirected" -msgstr "Rediretto verso %s..." - -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:798 -#, fuzzy +#: ../coreapi/callbacks.c:835 msgid "Call failed." -msgstr "Chiamata rifiutata" +msgstr "" -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Registrazione su %s attiva" -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "Unregistrazione su %s" -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "timeout no risposta" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrazione su %s fallita: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "Linphone - Autenticazione richiesta" +msgstr "" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "" msgstr[1] "" -#~ msgid "aborted" -#~ msgstr "annullato" - -#~ msgid "completed" -#~ msgstr "comletato" - -#~ msgid "missed" -#~ msgstr "mancante" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s at %s\n" -#~ "Da: %s\n" -#~ "Verso: %s\n" -#~ "Stato: %s\n" -#~ "Durata: %i mn %i sec\n" - -#~ msgid "Outgoing call" -#~ msgstr "Chiamata in uscita" - -#, fuzzy -#~ msgid "No response." -#~ msgstr "timeout no risposta" - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Errore nel formato del contatto sip. Usualmente un indirizzo appare sip:" -#~ "user@domain" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Il tuo computer appare utlizzare il driver ALSA.\n" -#~ "Questa è la scelta migliore. Tuttavia il modulo di emulazione pcm oss\n" -#~ "è assente e linphone lo richede. Prego eseguire\n" -#~ "'modprobe snd-pcm-oss' da utente root per caricarlo." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Il tuo computer appare utlizzare il driver ALSA.\n" -#~ "Questa è la scelta migliore. Tuttavia il modulo di emulazione mixer oss\n" -#~ "è assente e linphone lo richede. Prego eseguire\n" -#~ "'modprobe snd-mixer-oss' da utente root per caricarlo." - -#~ msgid "Chat with %s" -#~ msgstr "Chat con %s" - -#~ msgid "Please choose a username:" -#~ msgstr "Prego scegliere un username" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "Controllo se '%s' è disponibile..." - -#~ msgid "Please wait..." -#~ msgstr "Prego attendere ..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "Spiacenti, questo usernsame è gia utilizzato. Prego riprovare" - -#~ msgid "Ok !" -#~ msgstr "Ok !" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "Errore di comunicazione, prego riprovare." - -#~ msgid "Choosing a username" -#~ msgstr "Scegli un username" - -#~ msgid "Verifying" -#~ msgstr "Verifica" - -#~ msgid "Creating your account" -#~ msgstr "Creazione account" - -#~ msgid "Now ready !" -#~ msgstr "Pronto !" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "Attivato" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "Inserisci username, numero o indirizzo sip" - -#~ msgid "in" -#~ msgstr "in" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "Registrati a FONICS\n" -#~ "virtual network !" - -#~ msgid "Unmute" -#~ msgstr "" -#~ "Attiva\n" -#~ "microfono" - -#~ msgid "Contact list" -#~ msgstr "Lista contatti" - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "Audio & Video" - -#~ msgid "Audio only" -#~ msgstr "Solo Audio" - -#~ msgid "Duration:" -#~ msgstr "Durata:" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "Cronologia" - -#~ msgid "_Linphone" -#~ msgstr "_Linphone" - -#~ msgid "Register at startup" -#~ msgstr "Registra all'avvio" - -#~ msgid "ITU-G.711 alaw encoder" -#~ msgstr "ITU-G.711 alaw encoder" - -#~ msgid "ITU-G.711 alaw decoder" -#~ msgstr "ITU-G.711 alaw decoder" - -#~ msgid "Alsa sound source" -#~ msgstr "Alsa sound sorgente" - -#~ msgid "Alsa sound output" -#~ msgstr "Alsa sound riproduzione" - -#~ msgid "Sound capture filter for MacOS X Audio Queue Service" -#~ msgstr "Sound capture filter for MacOS X Audio Queue Service" - -#~ msgid "Sound playback filter for MacOS X Audio Queue Service" -#~ msgstr "Sound playback filter for MacOS X Audio Queue Service" - -#~ msgid "DTMF generator" -#~ msgstr "Generatore DTMF" - -#~ msgid "The GSM full-rate codec" -#~ msgstr "GSM full-rate codec" - -#~ msgid "The GSM codec" -#~ msgstr "GSM codec" - -#, fuzzy -#~ msgid "Sound capture filter for MacOS X Audio Unit" -#~ msgstr "Sound capture filter for MacOS X Audio Queue Service" - -#, fuzzy -#~ msgid "Sound playback filter for MacOS X Audio Unit" -#~ msgstr "Sound playback filter for MacOS X Audio Queue Service" - -#~ msgid "A filter to make conferencing" -#~ msgstr "Un filtro per fare conferenze" - -#~ msgid "Raw files and wav reader" -#~ msgstr "Raw files and wav reader" - -#~ msgid "Wav file recorder" -#~ msgstr "Registratore Wav file" - -#~ msgid "A filter that send several inputs to one output." -#~ msgstr "Un filtro che invia alcuni inputs in un unico output" - -#~ msgid "RTP output filter" -#~ msgstr "RTP output filter" - -#~ msgid "The free and wonderful speex codec" -#~ msgstr "The free and wonderful speex codec" - -#~ msgid "A filter that controls and measure sound volume" -#~ msgstr "Un filtro che controlla e misura il volume" - -#~ msgid "A video4linux compatible source filter to stream pictures." -#~ msgstr "Un video4linux filtro per inviare immagini" - -#~ msgid "A filter to grab pictures from Video4Linux2-powered cameras" -#~ msgstr "un filtro per catturare immagini da video4linux2 videocamere" - -#~ msgid "A filter that outputs a static image." -#~ msgstr "Un filtro che invia una immagine statica" - -#~ msgid "A pixel format converter" -#~ msgstr "Un convertitore di formati pixel" - -#~ msgid "A video size converter" -#~ msgstr "Un convertitore dimesione video " - -#~ msgid "a small video size converter" -#~ msgstr "un piccolo convertitore dimesione video" - -#, fuzzy -#~ msgid "Echo canceller using speex library" -#~ msgstr "Cancellazione eco utilizzando la libreria speex" - -#~ msgid "A filter that reads from input and copy to its multiple outputs." -#~ msgstr "Un filtro che legge gli inout e copia su multipli output." - -#~ msgid "The theora video encoder from xiph.org" -#~ msgstr "Theora video encoder da xiph.org" - -#~ msgid "The open-source and royalty-free 'theora' video codec from xiph.org" -#~ msgstr "Open-source and royalty-free 'theora' video codec da xiph.org" - -#~ msgid "The theora video decoder from xiph.org" -#~ msgstr "Theora video decoder from xiph.org" - -#~ msgid "ITU-G.711 ulaw encoder" -#~ msgstr "ITU-G.711 ulaw encoder" - -#~ msgid "ITU-G.711 ulaw decoder" -#~ msgstr "ITU-G.711 ulaw decoder" - -#~ msgid "A H.263 decoder using ffmpeg library" -#~ msgstr "Un H.263 decoder che utilizza le librerie ffmpeg" - -#~ msgid "A MPEG4 decoder using ffmpeg library" -#~ msgstr "Un MPEG4 decoder che utilizza le librerie ffmpeg" - -#~ msgid "A RTP/JPEG decoder using ffmpeg library" -#~ msgstr "Un RTP/JPEG decoder che utilizza le librerie ffmpeg" - -#~ msgid "A MJPEG decoder using ffmpeg library" -#~ msgstr "Un MJPEG decoder che utilizza le librerie ffmpeg" - -#~ msgid "A snow decoder using ffmpeg library" -#~ msgstr "Un snow decoder che utilizza le librerie ffmpeg" - -#~ msgid "A video H.263 encoder using ffmpeg library." -#~ msgstr "Un H.263 encoder che utilizza le librerie ffmpeg" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library. It is compliant with old " -#~ "RFC2190 spec." -#~ msgstr "" -#~ "Un H.263 encoder che utilizza le librerie ffmpeg. Compliante con RFC2190 " -#~ "spec." - -#~ msgid "A video MPEG4 encoder using ffmpeg library." -#~ msgstr "Un MPEG4 encoder che utilizza le librerie ffmpeg" - -#~ msgid "A video snow encoder using ffmpeg library." -#~ msgstr "Un snow encoder che utilizza le librerie ffmpeg" - -#~ msgid "A RTP/MJPEG encoder using ffmpeg library." -#~ msgstr "Un RTP/JPEG decoder che utilizza le librerie ffmpeg" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library, compliant with old RFC2190 " -#~ "spec." -#~ msgstr "" -#~ "Un H.263 encoder che utilizza le librerie ffmpeg. Compliante con RFC2190 " -#~ "spec." - -#~ msgid "A MJPEG encoder using ffmpeg library." -#~ msgstr "Un MJPEG encoder che utilizza le librerie ffmpeg" - -#, fuzzy -#~ msgid "A SDL-based video display" -#~ msgstr "Un generico video display" - -#~ msgid "A video4windows compatible source filter to stream pictures." -#~ msgstr "Un filtro video4windows per lo streaming delle immagini." - -#~ msgid "A video for windows (vfw.h) based source filter to grab pictures." -#~ msgstr "Un filtro (vfw.h) per catturare immagini." - -#~ msgid "Parametric sound equalizer." -#~ msgstr "Equalizzatore di suono." - -#~ msgid "A webcam grabber based on directshow." -#~ msgstr "Un webcam grabber basato su directshow." - -#, fuzzy -#~ msgid "A filter that converts from mono to stereo and vice versa." -#~ msgstr "Un filtro che controlla e misura il volume" - -#, fuzzy -#~ msgid "Inter ticker communication filter." -#~ msgstr "Errore di comunicazione" - -#, fuzzy -#~ msgid "Sound capture filter for MacOS X Audio Unit Service" -#~ msgstr "Sound capture filter for MacOS X Audio Queue Service" - -#, fuzzy -#~ msgid "Sound playback filter for MacOS X Audio Unit Service" -#~ msgstr "Sound playback filter for MacOS X Audio Queue Service" - -#, fuzzy -#~ msgid "Sound capture filter for Android" -#~ msgstr "Filtro per la cattura audio per i driver OSS" - -#, fuzzy -#~ msgid "Sound playback filter for Android" -#~ msgstr "Filtro per la riproduzione audio per i driver OSS" - -#, fuzzy -#~ msgid "A filter that captures Android video." -#~ msgstr "Un filtro che controlla e misura il volume" - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "La tua macchina sembra connessa ad una rete IPv6. Di default linphone " -#~ "utilizza IPv4. Prego aggiorna la tua configurazione se vuoi usare IPv6" - -#~ msgid "Sound capture filter for MacOS X Core Audio drivers" -#~ msgstr "Sound capture filter for MacOS X Core Audio drivers" - -#~ msgid "Sound playback filter for MacOS X Core Audio drivers" -#~ msgstr "Sound playback filter for MacOS X Core Audio drivers" - -#~ msgid "Start call" -#~ msgstr "Inizia chiamata" - -#~ msgid "_Modes" -#~ msgstr "_Modi" - -#~ msgid "Created by Simon Morlat\n" -#~ msgstr "Creato da Simon Morlat\n" - -#~ msgid "Accept" -#~ msgstr "Accetta" - -#~ msgid "Incoming call from" -#~ msgstr "Chiama in entrata da" - -#~ msgid "Linphone - Incoming call" -#~ msgstr "Linphone - Chiamata in entrata" - -#~ msgid "default soundcard\n" -#~ msgstr "default scheda audio\n" - -#~ msgid "" -#~ "Remote end seems to have disconnected, the call is going to be closed." -#~ msgstr "L'utente remoto sembra disconesso, la chiamata verrà terminata" - -#~ msgid "Sorry, having multiple simultaneous calls is not supported yet !" -#~ msgstr "Spiacenti, le chiamate multiple non sono supportate" - -#~ msgid "Could not reach destination." -#~ msgstr "Non posso raggiungere la destinazione" - -#~ msgid "Request Cancelled." -#~ msgstr "Richiesta cancellata" - -#~ msgid "Bad request" -#~ msgstr "Richiesta errata" - -#~ msgid "User cannot be found at given address." -#~ msgstr "L'utente non trovato." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "L'utente remoto non supporta alcun code proposto." - -#~ msgid "Timeout." -#~ msgstr "Timeout." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Utente remoto trovato ma ha rifiutato la connessione." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "L'utente non è raggiungibile ma ti ha invitato\n" -#~ "per contattarlo usare l'indirizzo alternativo:" - -#~ msgid "Digits" -#~ msgstr "Caratteri" - -#~ msgid "Main view" -#~ msgstr "Vista principale" - -#~ msgid "No nat/firewall address supplied !" -#~ msgstr "Non è stato fornito un indirizzo nat/firewall!" - -#~ msgid "Invalid nat address '%s' : %s" -#~ msgstr "Indirizzo NAT invalido '%s' : %s" - -#~ msgid "Gone" -#~ msgstr "Uscita" - -#~ msgid "Waiting for Approval" -#~ msgstr "In attesa di approvazione" - -#~ msgid "Be Right Back" -#~ msgstr "Torno subito" - -#~ msgid "On The Phone" -#~ msgstr "Al telefono" - -#~ msgid "Out To Lunch" -#~ msgstr "Fuori per pranzo" - -#~ msgid "Closed" -#~ msgstr "Chiuso" - -#~ msgid "Unknown" -#~ msgstr "Sconosciuto" - -#~ msgid "Bresilian" -#~ msgstr "Brasiliano" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/ja.po b/po/ja.po index 6a5e37625..004469d0b 100644 --- a/po/ja.po +++ b/po/ja.po @@ -1,73 +1,67 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the PACKAGE package. -# 山口善也 , 2002. -# -#, fuzzy +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Alexander, 2014 +# Alexander, 2014 msgid "" msgstr "" -"Project-Id-Version: linphone 0.10\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2003-01-21 00:05+9000\n" -"Last-Translator: YAMAGUCHI YOSHIYA \n" -"Language-Team: \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Japanese (http://www.transifex.com/projects/p/linphone-gtk/" +"language/ja/)\n" +"Language: ja\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=1; plural=0;\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format msgid "Call %s" -msgstr "" +msgstr "%s を呼び出し中" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:975 #, c-format msgid "Send text to %s" -msgstr "" +msgstr "%s に文章を送信" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "接続中" +msgstr "通話時間 (%i)" #: ../gtk/calllogs.c:314 msgid "n/a" -msgstr "" +msgstr "n/a" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "通話はキャンセルされました。" +msgstr "中断" #: ../gtk/calllogs.c:320 msgid "Missed" -msgstr "" +msgstr "失敗" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "ライン入力" +msgstr "辞退" #: ../gtk/calllogs.c:329 #, c-format msgid "%i minute" msgid_plural "%i minutes" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i 分" #: ../gtk/calllogs.c:332 #, c-format msgid "%i second" msgid_plural "%i seconds" -msgstr[0] "" -msgstr[1] "" - -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" +msgstr[0] "%i 秒" #: ../gtk/calllogs.c:337 #, c-format @@ -75,76 +69,72 @@ msgid "" "%s\tQuality: %s\n" "%s\t%s\t" msgstr "" +"%s品質: %s\n" +"%s⇥%s⇥" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" -msgstr "" +msgid "%s\t%s" +msgstr "%s⇥%s" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" -msgstr "" +msgstr "会議" #: ../gtk/conference.c:46 msgid "Me" -msgstr "" +msgstr "自分" #: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "pixmapファイルが見つかりません %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" -msgstr "" +msgstr "無効なSIP接続です!" #: ../gtk/main.c:107 msgid "log to stdout some debug information while running." -msgstr "" +msgstr "実行中にいくつかのデバッグ情報をstdoutに送信します。" #: ../gtk/main.c:114 msgid "path to a file to write logs into." -msgstr "" +msgstr "ログを書き込むファイルへのパス。" #: ../gtk/main.c:121 msgid "Start linphone with video disabled." -msgstr "" +msgstr "ビデオを無効にしてLinphoneを開始します。" #: ../gtk/main.c:128 msgid "Start only in the system tray, do not show the main interface." -msgstr "" +msgstr "主なインターフェイスを表示しないでシステムトレイに移動します。" #: ../gtk/main.c:135 msgid "address to call right now" -msgstr "" +msgstr "今すぐに呼び出す" #: ../gtk/main.c:142 msgid "if set automatically answer incoming calls" -msgstr "" +msgstr "着信呼び出しが設定されている場合自動的に応答する" #: ../gtk/main.c:149 msgid "" "Specifiy a working directory (should be the base of the installation, eg: c:" "\\Program Files\\Linphone)" msgstr "" +"作業ディレクトリをSpecifiy (インストールした時のベースである必要があります。" +"例:c:\\Program Files\\Linphone)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "情報" +msgstr "設定ファイル" #: ../gtk/main.c:163 msgid "Run the audio assistant" -msgstr "" +msgstr "オーディオアシスタントを実行" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -152,122 +142,119 @@ msgid "" "list ?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" +"%s が連絡相手にあなたを追加しようとしています。\n" +"あなたのステータスを参照させるか、もしくは連絡先リストに追加することができま" +"す。\n" +"あなたが拒否すると、この人は一時的にブラックリストへ登録されます。" -#: ../gtk/main.c:1260 +#: ../gtk/main.c:1162 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "通話はキャンセルされました。" +msgstr "呼出エラー" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 -#, fuzzy +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" -msgstr "通話は拒否されました。" +msgstr "呼出終了" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" -msgstr "" +msgstr "着信" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" -msgstr "" +msgstr "応答" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 -#, fuzzy +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" -msgstr "ライン入力" +msgstr "拒否" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "通話はキャンセルされました。" +msgstr "呼び出しの一時停止" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "接続中" +msgstr "%s" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" -msgstr "" +msgstr "ウェブサイトリンク" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" -msgstr "" +msgstr "Linphone - ビデオインターネット電話" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" -msgstr "" +msgstr "%s (デフォルト)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" -msgstr "" +msgstr "%s に転送しました" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" -msgstr "" +msgstr "無料 SIP ビデオ-電話" #: ../gtk/friendlist.c:505 -#, fuzzy msgid "Add to addressbook" -msgstr "電話帳" +msgstr "電話帳に追加する" #: ../gtk/friendlist.c:691 -#, fuzzy msgid "Presence status" -msgstr "状態" +msgstr "状態のステータス" #: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 msgid "Name" msgstr "名前" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "通話はキャンセルされました。" +msgstr "通話" #: ../gtk/friendlist.c:726 msgid "Chat" -msgstr "" +msgstr "チャット" #: ../gtk/friendlist.c:756 #, c-format msgid "Search in %s directory" -msgstr "" +msgstr "%s のディレクトリ内を検索" #: ../gtk/friendlist.c:976 -#, fuzzy, c-format +#, c-format msgid "Edit contact '%s'" -msgstr "(接続するための情報がありません!)" +msgstr "'%s' の連絡先を編集" #: ../gtk/friendlist.c:977 #, c-format msgid "Delete contact '%s'" -msgstr "" +msgstr "'%s' の連絡先を削除" #: ../gtk/friendlist.c:978 #, c-format msgid "Delete chat history of '%s'" -msgstr "" +msgstr "'%s' のチャット履歴を削除" #: ../gtk/friendlist.c:1029 #, c-format @@ -276,16 +263,15 @@ msgstr "" #: ../gtk/propertybox.c:558 msgid "Rate (Hz)" -msgstr "" +msgstr "レート (Hz)" #: ../gtk/propertybox.c:564 msgid "Status" msgstr "状態" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "最低限のビットレート (kbit/s)" +msgstr "IP ビットレート (kbit/s)" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -301,97 +287,96 @@ msgstr "使用しない" #: ../gtk/propertybox.c:809 msgid "Account" -msgstr "" +msgstr "アカウント" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" -msgstr "" +msgstr "English" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Français" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" -msgstr "" +msgstr "Svenska" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" -msgstr "" +msgstr "Italiano" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" -msgstr "" +msgstr "Español" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" -msgstr "" +msgstr "Português do Brasil" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" -msgstr "" +msgstr "Polski" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" -msgstr "" +msgstr "Deutsch" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" -msgstr "" +msgstr "Pусский" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "日本語" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" -msgstr "" +msgstr "Nederlands" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Magyar" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "čeština" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "简体中文" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" -msgstr "" +msgstr "繁体中文" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" -msgstr "" +msgstr "Norsk" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" -msgstr "" +msgstr "עברית" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" -msgstr "" +msgstr "Cрпски" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." -msgstr "" +msgstr "言語の選択を有効にするには、 Linphoneを再起動する必要があります。" -#: ../gtk/propertybox.c:1225 -#, fuzzy +#: ../gtk/propertybox.c:1234 msgid "None" -msgstr "ありません。" +msgstr "なし" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" -msgstr "" +msgstr "SRTP" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" -msgstr "" +msgstr "ZRTP" #: ../gtk/update.c:80 #, c-format @@ -399,57 +384,56 @@ msgid "" "A more recent version is availalble from %s.\n" "Would you like to open a browser to download it ?" msgstr "" +"%s よりも新しいバージョンが利用可能です。\n" +"ダウンロードするために、ブラウザを開きますか?" #: ../gtk/update.c:91 msgid "You are running the lastest version." -msgstr "" +msgstr "最新版です。" #: ../gtk/buddylookup.c:85 msgid "Firstname, Lastname" -msgstr "" +msgstr "名前、名字" #: ../gtk/buddylookup.c:160 msgid "Error communicating with server." -msgstr "" +msgstr "サーバーとの通信エラーが発生しました。" #: ../gtk/buddylookup.c:164 -#, fuzzy msgid "Connecting..." -msgstr "コネクション" +msgstr "接続中..." #: ../gtk/buddylookup.c:168 -#, fuzzy msgid "Connected" -msgstr "接続しました。" +msgstr "接続" #: ../gtk/buddylookup.c:172 msgid "Receiving data..." -msgstr "" +msgstr "データを受信中…" #: ../gtk/buddylookup.c:180 #, c-format msgid "Found %i contact" msgid_plural "Found %i contacts" -msgstr[0] "" -msgstr[1] "" +msgstr[0] "%i 件発見" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" #: ../gtk/setupwizard.c:43 msgid "Create an account on linphone.org" -msgstr "" +msgstr "linphone.orgのアカウントを作成" #: ../gtk/setupwizard.c:44 msgid "I have already a linphone.org account and I just want to use it" -msgstr "" +msgstr "linphone.orgのアカウントを持っているのでそれを使います" #: ../gtk/setupwizard.c:45 msgid "I have already a sip account and I just want to use it" -msgstr "" +msgstr "SIPアカウントを持っているのでそれを使います" #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" @@ -457,65 +441,59 @@ msgstr "" #: ../gtk/setupwizard.c:89 msgid "Enter your linphone.org username" -msgstr "" +msgstr "linphone.orgで取得したユーザー名を入力" #: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4 -#, fuzzy msgid "Username:" -msgstr "ユーザーマニュアル" +msgstr "ユーザー名:" #: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 -#, fuzzy msgid "Password:" -msgstr "パスワード" +msgstr "パスワード:" #: ../gtk/setupwizard.c:124 msgid "Enter your account informations" -msgstr "" +msgstr "アカウント情報を入力" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "ユーザーマニュアル" +msgstr "ユーザー名*" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "パスワード" +msgstr "パスワード*" #: ../gtk/setupwizard.c:144 msgid "Domain*" -msgstr "" +msgstr "ドメイン*" #: ../gtk/setupwizard.c:145 msgid "Proxy" -msgstr "" +msgstr "プロキシ*" #: ../gtk/setupwizard.c:317 msgid "(*) Required fields" -msgstr "" +msgstr "(*) 必須" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "ユーザーマニュアル" +msgstr "ユーザー名: (*)" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "パスワード" +msgstr "パスワード: (*)" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" -msgstr "" +msgstr "メールアドレス: (*)" #: ../gtk/setupwizard.c:324 msgid "Confirm your password: (*)" -msgstr "" +msgstr "パスワードを再入力: (*)" #: ../gtk/setupwizard.c:338 msgid "Keep me informed with linphone updates" -msgstr "" +msgstr "アップデートでLinphoneを常に最新にする" #: ../gtk/setupwizard.c:394 msgid "" @@ -534,46 +512,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" -msgstr "" +msgstr "アカウント設定アシスタントへようこそ" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" -msgstr "" +msgstr "アカウント設定アシスタント" -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" -msgstr "" +msgstr "エラー" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "通話はキャンセルされました。" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -582,20 +560,19 @@ msgstr "" #: ../gtk/incall_view.c:211 ../gtk/incall_view.c:214 msgid "Not used" -msgstr "" +msgstr "使用しない" #: ../gtk/incall_view.c:221 msgid "ICE not activated" -msgstr "" +msgstr "ICE 未認証" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "通話はキャンセルされました。" +msgstr "ICE 失敗" #: ../gtk/incall_view.c:225 msgid "ICE in progress" -msgstr "" +msgstr "ICE 進行中" #: ../gtk/incall_view.c:227 msgid "Going through one or more NATs" @@ -603,11 +580,11 @@ msgstr "" #: ../gtk/incall_view.c:229 msgid "Direct" -msgstr "" +msgstr "直接" #: ../gtk/incall_view.c:231 msgid "Through a relay server" -msgstr "" +msgstr "間接的にリレーサーバーを使う" #: ../gtk/incall_view.c:239 msgid "uPnP not activated" @@ -615,21 +592,19 @@ msgstr "" #: ../gtk/incall_view.c:241 msgid "uPnP in progress" -msgstr "" +msgstr "uPnPを使用中" #: ../gtk/incall_view.c:243 -#, fuzzy msgid "uPnp not available" -msgstr "特に情報はありません" +msgstr "" #: ../gtk/incall_view.c:245 msgid "uPnP is running" -msgstr "" +msgstr "uPnP作動中" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "通話はキャンセルされました。" +msgstr "uPnP失敗" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -645,127 +620,116 @@ msgstr "" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format msgid "%ix%i @ %f fps" -msgstr "" +msgstr "%ix%i @ %f fps" #: ../gtk/incall_view.c:304 #, c-format msgid "%.3f seconds" -msgstr "" +msgstr "%.3f 秒" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 -#, fuzzy +#: ../gtk/incall_view.c:511 msgid "Calling..." -msgstr "接続中" +msgstr "かけています…" -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" -msgstr "" +msgstr "00::00::00" -#: ../gtk/incall_view.c:515 -#, fuzzy +#: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "接続中" +msgstr "着信" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" -msgstr "" +msgstr "アベレージ" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" -msgstr "" +msgstr "SRTPのセキュリティ" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 -#, fuzzy +#: ../gtk/incall_view.c:722 msgid "In call" -msgstr "接続中" - -#: ../gtk/incall_view.c:738 -#, fuzzy -msgid "Paused call" -msgstr "接続中" - -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" msgstr "" -#: ../gtk/incall_view.c:772 -#, fuzzy -msgid "Call ended." -msgstr "通話は拒否されました。" +#: ../gtk/incall_view.c:758 +msgid "Paused call" +msgstr "" -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:794 +msgid "Call ended." +msgstr "" + +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." -msgstr "" +msgstr "転送完了。" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "通話はキャンセルされました。" +msgstr "転送失敗。" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" -msgstr "" +msgstr "レジューム" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" -msgstr "" +msgstr "一時停止" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" -msgstr "" +msgstr "(停止中)" #: ../gtk/loginframe.c:88 #, c-format @@ -800,28 +764,25 @@ msgstr "" #: ../gtk/audio_assistant.c:318 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "使用するサウンドデバイス" +msgstr "" #: ../gtk/audio_assistant.c:329 -#, fuzzy msgid "Recorded volume" -msgstr "録音する音源" +msgstr "" #: ../gtk/audio_assistant.c:333 msgid "No voice" -msgstr "" +msgstr "音声なし" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "使用するサウンドデバイス" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -833,41 +794,39 @@ msgstr "" #: ../gtk/audio_assistant.c:404 msgid "Listen to your record voice" -msgstr "" +msgstr "録音した音声を聞く" #: ../gtk/audio_assistant.c:433 msgid "Let's start Linphone now" -msgstr "" +msgstr "Linphoneをはじめる" #: ../gtk/audio_assistant.c:496 msgid "Audio Assistant" -msgstr "" +msgstr "音声アシスタント" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 msgid "Audio assistant" -msgstr "" +msgstr "音声アシスタント" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" -msgstr "" +msgstr "マイクのゲイン測定" #: ../gtk/audio_assistant.c:517 msgid "Speaker volume calibration" -msgstr "" +msgstr "スピーカーの音量測定" #: ../gtk/audio_assistant.c:522 msgid "Record and Play" -msgstr "" +msgstr "録音して再生" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "通話は拒否されました。" +msgstr "" #: ../gtk/main.ui.h:2 -#, fuzzy msgid "Send" -msgstr "サウンド" +msgstr "送信" #: ../gtk/main.ui.h:3 msgid "End conference" @@ -879,25 +838,23 @@ msgstr "" #: ../gtk/main.ui.h:8 msgid "Video" -msgstr "" +msgstr "ビデオ" #: ../gtk/main.ui.h:10 msgid "Mute" -msgstr "" +msgstr "消音" #: ../gtk/main.ui.h:11 msgid "Transfer" -msgstr "" +msgstr "転送" #: ../gtk/main.ui.h:14 -#, fuzzy msgid "In call" -msgstr "接続中" +msgstr "" #: ../gtk/main.ui.h:15 -#, fuzzy msgid "Duration" -msgstr "情報" +msgstr "" #: ../gtk/main.ui.h:16 msgid "Call quality rating" @@ -905,47 +862,43 @@ msgstr "" #: ../gtk/main.ui.h:17 msgid "All users" -msgstr "" +msgstr "すべての利用者" #: ../gtk/main.ui.h:18 -#, fuzzy msgid "Online users" -msgstr "ライン入力" +msgstr "オンラインの利用者" #: ../gtk/main.ui.h:19 msgid "ADSL" -msgstr "" +msgstr "ADSL" #: ../gtk/main.ui.h:20 msgid "Fiber Channel" msgstr "" #: ../gtk/main.ui.h:21 -#, fuzzy msgid "Default" -msgstr "個人情報" +msgstr "デフォルト" #: ../gtk/main.ui.h:22 msgid "_Options" msgstr "" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "情報" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" msgstr "" #: ../gtk/main.ui.h:25 -#, fuzzy msgid "Enable self-view" -msgstr "使用する" +msgstr "" #: ../gtk/main.ui.h:26 msgid "_Help" -msgstr "" +msgstr "_ヘルプ" #: ../gtk/main.ui.h:27 msgid "Show debug window" @@ -953,7 +906,7 @@ msgstr "" #: ../gtk/main.ui.h:28 msgid "_Homepage" -msgstr "" +msgstr "_ホームページ" #: ../gtk/main.ui.h:29 msgid "Check _Updates" @@ -961,89 +914,78 @@ msgstr "" #: ../gtk/main.ui.h:30 msgid "Account assistant" -msgstr "" +msgstr "アカウントのアシスタント" #: ../gtk/main.ui.h:32 -#, fuzzy msgid "SIP address or phone number:" -msgstr "レジストラサーバーのSIPアドレス" +msgstr "" #: ../gtk/main.ui.h:33 msgid "Initiate a new call" msgstr "" #: ../gtk/main.ui.h:34 -#, fuzzy msgid "Contacts" -msgstr "接続中" +msgstr "" #: ../gtk/main.ui.h:35 msgid "Search" -msgstr "" +msgstr "検索" #: ../gtk/main.ui.h:36 -#, fuzzy msgid "Add contacts from directory" -msgstr "コーデックの情報" +msgstr "" #: ../gtk/main.ui.h:37 -#, fuzzy msgid "Add contact" -msgstr "(接続するための情報がありません!)" +msgstr "" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "接続中" +msgstr "" #: ../gtk/main.ui.h:39 -#, fuzzy msgid "My current identity:" -msgstr "個人情報" +msgstr "" #: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7 -#, fuzzy msgid "Username" -msgstr "ユーザーマニュアル" +msgstr "ユーザー名" #: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8 -#, fuzzy msgid "Password" msgstr "パスワード" #: ../gtk/main.ui.h:42 msgid "Internet connection:" -msgstr "" +msgstr "インターネット接続:" #: ../gtk/main.ui.h:43 msgid "Automatically log me in" -msgstr "" +msgstr "自動的にログインする" #: ../gtk/main.ui.h:44 ../gtk/password.ui.h:3 msgid "UserID" msgstr "" #: ../gtk/main.ui.h:45 -#, fuzzy msgid "Login information" -msgstr "コーデックの情報" +msgstr "ログイン情報" #: ../gtk/main.ui.h:46 -#, fuzzy -msgid "Welcome !" -msgstr "接続中" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" -msgstr "" +msgstr "削除" #: ../gtk/about.ui.h:1 -#, fuzzy -msgid "About linphone" -msgstr "Linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" msgstr "" #: ../gtk/about.ui.h:4 @@ -1065,11 +1007,22 @@ msgid "" "hu: anonymous\n" "he: Eli Zaretskii \n" msgstr "" +"fr: Simon Morlat\n" +"en: Simon Morlat and Delphine Perreau\n" +"it: Alberto Zanoni \n" +"de: Jean-Jacques Sarton \n" +"sv: Daniel Nylander \n" +"es: Jesus Benitez \n" +"ja: YAMAGUCHI YOSHIYA \n" +"pt_BR: Rafael Caesar Lenzi \n" +"pl: Robert Nasiadek \n" +"cs: Petr Pisar \n" +"hu: anonymous\n" +"he: Eli Zaretskii \n" #: ../gtk/contact.ui.h:2 -#, fuzzy msgid "SIP Address" -msgstr "アドレス" +msgstr "SIPアドレス" #: ../gtk/contact.ui.h:3 msgid "Show this contact presence status" @@ -1080,22 +1033,20 @@ msgid "Allow this contact to see my presence status" msgstr "" #: ../gtk/contact.ui.h:5 -#, fuzzy msgid "Contact information" -msgstr "コーデックの情報" +msgstr "" #: ../gtk/log.ui.h:1 msgid "Linphone debug window" -msgstr "" +msgstr "Linphoneデバッグウインドウ" #: ../gtk/log.ui.h:2 msgid "Scroll to end" msgstr "" #: ../gtk/password.ui.h:1 -#, fuzzy msgid "Linphone - Authentication required" -msgstr "コーデックの情報" +msgstr "" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" @@ -1103,11 +1054,11 @@ msgstr "" #: ../gtk/call_logs.ui.h:1 msgid "Call history" -msgstr "" +msgstr "呼出履歴" #: ../gtk/call_logs.ui.h:2 msgid "Clear all" -msgstr "" +msgstr "すべて消去する" #: ../gtk/call_logs.ui.h:3 msgid "Call back" @@ -1118,9 +1069,8 @@ msgid "Linphone - Configure a SIP account" msgstr "" #: ../gtk/sip_account.ui.h:2 -#, fuzzy msgid "Your SIP identity:" -msgstr "個人情報" +msgstr "" #: ../gtk/sip_account.ui.h:3 msgid "Looks like sip:@" @@ -1131,18 +1081,16 @@ msgid "sip:" msgstr "sip:" #: ../gtk/sip_account.ui.h:5 -#, fuzzy msgid "SIP Proxy address:" -msgstr "Sipアドレス:" +msgstr "SIP プロキシ:" #: ../gtk/sip_account.ui.h:6 msgid "Looks like sip:" msgstr "" #: ../gtk/sip_account.ui.h:7 -#, fuzzy msgid "Registration duration (sec):" -msgstr "登録しました。" +msgstr "" #: ../gtk/sip_account.ui.h:8 msgid "Contact params (optional):" @@ -1157,23 +1105,20 @@ msgid "Route (optional):" msgstr "" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "接続中" +msgstr "転送" #: ../gtk/sip_account.ui.h:12 msgid "Register" -msgstr "" +msgstr "登録" #: ../gtk/sip_account.ui.h:13 -#, fuzzy msgid "Publish presence information" -msgstr "コーデックの情報" +msgstr "パブリッシュ情報" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "使用する" +msgstr "AVPFを有効にする" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1181,15 +1126,15 @@ msgstr "" #: ../gtk/parameters.ui.h:1 msgid "anonymous" -msgstr "" +msgstr "anonymous" #: ../gtk/parameters.ui.h:2 msgid "GSSAPI" -msgstr "" +msgstr "GSSAPI" #: ../gtk/parameters.ui.h:3 msgid "SASL" -msgstr "" +msgstr "SASL" #: ../gtk/parameters.ui.h:4 msgid "default soundcard" @@ -1197,45 +1142,43 @@ msgstr "" #: ../gtk/parameters.ui.h:5 msgid "a sound card" -msgstr "" +msgstr "サウンドカード" #: ../gtk/parameters.ui.h:6 msgid "default camera" -msgstr "" +msgstr "デフォルトのカメラ" #: ../gtk/parameters.ui.h:7 msgid "CIF" -msgstr "" +msgstr "CIF" #: ../gtk/parameters.ui.h:8 -#, fuzzy msgid "Audio codecs" -msgstr "オーディオコーデックのプロパティー" +msgstr "オーディオのコーデック" #: ../gtk/parameters.ui.h:9 -#, fuzzy msgid "Video codecs" -msgstr "オーディオコーデックのプロパティー" +msgstr "ビデオのコーデック" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "" #: ../gtk/parameters.ui.h:11 msgid "SIP (UDP)" -msgstr "" +msgstr "SIP (UDP)" #: ../gtk/parameters.ui.h:12 msgid "SIP (TCP)" -msgstr "" +msgstr "SIP (TCP)" #: ../gtk/parameters.ui.h:13 msgid "SIP (TLS)" -msgstr "" +msgstr "SIP (TLS)" #: ../gtk/parameters.ui.h:14 msgid "Settings" -msgstr "" +msgstr "設定" #: ../gtk/parameters.ui.h:15 msgid "Set Maximum Transmission Unit:" @@ -1243,28 +1186,27 @@ msgstr "" #: ../gtk/parameters.ui.h:16 msgid "Send DTMFs as SIP info" -msgstr "" +msgstr "DTMFをSIP情報で送信する" #: ../gtk/parameters.ui.h:17 msgid "Use IPv6 instead of IPv4" -msgstr "" +msgstr "IPv4ではなくIPv6を使用する" #: ../gtk/parameters.ui.h:18 -#, fuzzy msgid "Transport" -msgstr "接続中" +msgstr "転送" #: ../gtk/parameters.ui.h:19 msgid "Media encryption type" -msgstr "" +msgstr "メディアの暗号化の種類" #: ../gtk/parameters.ui.h:20 msgid "Video RTP/UDP:" -msgstr "" +msgstr "ビデオ RTP/UDP:" #: ../gtk/parameters.ui.h:21 msgid "Audio RTP/UDP:" -msgstr "" +msgstr "オーディオ RTP/UDP:" #: ../gtk/parameters.ui.h:22 msgid "Fixed" @@ -1276,25 +1218,23 @@ msgstr "" #: ../gtk/parameters.ui.h:24 msgid "Tunnel" -msgstr "" +msgstr "トンネル" #: ../gtk/parameters.ui.h:25 msgid "DSCP fields" -msgstr "" +msgstr "DSCP値" #: ../gtk/parameters.ui.h:26 -#, fuzzy msgid "SIP/TCP port" -msgstr "SIPのポート" +msgstr "SIP/TCP ポート" #: ../gtk/parameters.ui.h:27 -#, fuzzy msgid "SIP/UDP port" -msgstr "SIPのポート" +msgstr "SIP/UDP ポート" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" -msgstr "" +msgstr "ネットワークのプロトコルとポート" #: ../gtk/parameters.ui.h:29 msgid "Direct connection to the Internet" @@ -1317,80 +1257,68 @@ msgid "Behind NAT / Firewall (use uPnP)" msgstr "" #: ../gtk/parameters.ui.h:34 -#, fuzzy msgid "Public IP address:" -msgstr "Sipアドレス:" +msgstr "パブリック IP アドレス:" #: ../gtk/parameters.ui.h:35 -#, fuzzy msgid "Stun server:" -msgstr "使用するサウンドデバイス" +msgstr "Stunサーバー:" #: ../gtk/parameters.ui.h:36 -#, fuzzy msgid "NAT and Firewall" -msgstr "接続中" +msgstr "NAT と ファイヤーウォール" #: ../gtk/parameters.ui.h:37 -#, fuzzy msgid "Network settings" -msgstr "ネットワーク" +msgstr "ネットワーク設定" #: ../gtk/parameters.ui.h:38 -#, fuzzy msgid "Ring sound:" -msgstr "録音する音源" +msgstr "鳴動音:" #: ../gtk/parameters.ui.h:39 msgid "ALSA special device (optional):" msgstr "" #: ../gtk/parameters.ui.h:40 -#, fuzzy msgid "Capture device:" -msgstr "使用するサウンドデバイス" +msgstr "" #: ../gtk/parameters.ui.h:41 -#, fuzzy msgid "Ring device:" -msgstr "使用するサウンドデバイス" +msgstr "" #: ../gtk/parameters.ui.h:42 -#, fuzzy msgid "Playback device:" -msgstr "使用するサウンドデバイス" +msgstr "" #: ../gtk/parameters.ui.h:43 msgid "Enable echo cancellation" -msgstr "" +msgstr "エコーキャンセラーを有効にする" #: ../gtk/parameters.ui.h:44 -#, fuzzy msgid "Audio" -msgstr "接続中" +msgstr "オーディオ" #: ../gtk/parameters.ui.h:45 -#, fuzzy msgid "Video input device:" -msgstr "使用するサウンドデバイス" +msgstr "" #: ../gtk/parameters.ui.h:46 msgid "Prefered video resolution:" msgstr "" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "使用するサウンドデバイス" +msgstr "" #: ../gtk/parameters.ui.h:48 -#, fuzzy msgid "Video" -msgstr "接続中" +msgstr "ビデオ" #: ../gtk/parameters.ui.h:49 msgid "Multimedia settings" -msgstr "" +msgstr "マルチメディア設定" #: ../gtk/parameters.ui.h:50 msgid "This section defines your SIP address when not using a SIP account" @@ -1398,26 +1326,23 @@ msgstr "" #: ../gtk/parameters.ui.h:51 msgid "Your display name (eg: John Doe):" -msgstr "" +msgstr "あなたの表示名 (例: John Doe):" #: ../gtk/parameters.ui.h:52 -#, fuzzy msgid "Your username:" -msgstr "ユーザーマニュアル" +msgstr "あなたのユーザー名:" #: ../gtk/parameters.ui.h:53 -#, fuzzy msgid "Your resulting SIP address:" -msgstr "あなたのSIPアドレス" +msgstr "" #: ../gtk/parameters.ui.h:54 -#, fuzzy msgid "Default identity" -msgstr "個人情報" +msgstr "" #: ../gtk/parameters.ui.h:55 msgid "Wizard" -msgstr "" +msgstr "ウィザード" #: ../gtk/parameters.ui.h:56 msgid "Add" @@ -1425,25 +1350,23 @@ msgstr "追加する" #: ../gtk/parameters.ui.h:57 msgid "Edit" -msgstr "" +msgstr "編集する" #: ../gtk/parameters.ui.h:58 msgid "Remove" msgstr "削除する" #: ../gtk/parameters.ui.h:59 -#, fuzzy msgid "Proxy accounts" -msgstr "接続中" +msgstr "" #: ../gtk/parameters.ui.h:60 msgid "Erase all passwords" msgstr "" #: ../gtk/parameters.ui.h:61 -#, fuzzy msgid "Privacy" -msgstr "接続中" +msgstr "プライバシー" #: ../gtk/parameters.ui.h:62 msgid "Manage SIP Accounts" @@ -1458,9 +1381,8 @@ msgid "Disable" msgstr "使用しない" #: ../gtk/parameters.ui.h:65 -#, fuzzy msgid "Codecs" -msgstr "接続中" +msgstr "コーデック" #: ../gtk/parameters.ui.h:66 msgid "0 stands for \"unlimited\"" @@ -1468,11 +1390,11 @@ msgstr "" #: ../gtk/parameters.ui.h:67 msgid "Upload speed limit in Kbit/sec:" -msgstr "" +msgstr "アップロード速度制限 Kbit/sec:" #: ../gtk/parameters.ui.h:68 msgid "Download speed limit in Kbit/sec:" -msgstr "" +msgstr "ダウンロード速度制限 Kbit/sec:" #: ../gtk/parameters.ui.h:69 msgid "Enable adaptive rate control" @@ -1486,87 +1408,71 @@ msgstr "" #: ../gtk/parameters.ui.h:71 msgid "Bandwidth control" -msgstr "" +msgstr "帯域幅制御" #: ../gtk/parameters.ui.h:72 -#, fuzzy msgid "Codecs" msgstr "コーデック" #: ../gtk/parameters.ui.h:73 -#, fuzzy msgid "Language" -msgstr "接続中" +msgstr "言語" #: ../gtk/parameters.ui.h:74 msgid "Show advanced settings" -msgstr "" +msgstr "拡張設定を表示する" #: ../gtk/parameters.ui.h:75 -#, fuzzy msgid "Level" -msgstr "接続中" +msgstr "レベル" #: ../gtk/parameters.ui.h:76 -#, fuzzy msgid "User interface" -msgstr "ユーザーマニュアル" +msgstr "ユーザーインターフェイス" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "サーバーのアドレス" +msgstr "サーバーアドレス:" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "コーデックの情報" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" +msgid "LDAP Account setup" msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "接続中" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 -#, fuzzy +#: ../gtk/parameters.ui.h:82 msgid "Done" -msgstr "ありません。" +msgstr "" #: ../gtk/buddylookup.ui.h:1 -#, fuzzy msgid "Search contacts in directory" -msgstr "コーデックの情報" +msgstr "" #: ../gtk/buddylookup.ui.h:2 msgid "Add to my list" msgstr "" #: ../gtk/buddylookup.ui.h:3 -#, fuzzy msgid "Search somebody" -msgstr "接続中" +msgstr "" #: ../gtk/waiting.ui.h:1 -#, fuzzy msgid "Linphone" msgstr "Linphone" #: ../gtk/waiting.ui.h:2 msgid "Please wait" -msgstr "" +msgstr "お待ちください" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "ネットワーク" +msgstr "DSCP設定" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" @@ -1574,11 +1480,11 @@ msgstr "SIP" #: ../gtk/dscp_settings.ui.h:3 msgid "Audio RTP stream" -msgstr "" +msgstr "オーディオのRTP" #: ../gtk/dscp_settings.ui.h:4 msgid "Video RTP stream" -msgstr "" +msgstr "ビデオのRTP" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" @@ -1589,14 +1495,12 @@ msgid "Call statistics" msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" -msgstr "オーディオコーデックのプロパティー" +msgstr "オーディオのコーデック" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" -msgstr "オーディオコーデックのプロパティー" +msgstr "ビデオのコーデック" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1615,9 +1519,8 @@ msgid "Video Media connectivity" msgstr "" #: ../gtk/call_statistics.ui.h:8 -#, fuzzy msgid "Round trip time" -msgstr "サウンドのプロパティー" +msgstr "" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" @@ -1629,12 +1532,11 @@ msgstr "" #: ../gtk/call_statistics.ui.h:11 msgid "RTP profile" -msgstr "" +msgstr "RTPプロファイル" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "コーデックの情報" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 msgid "Configure VoIP tunnel" @@ -1642,11 +1544,11 @@ msgstr "" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" -msgstr "" +msgstr "ホスト" #: ../gtk/tunnel_config.ui.h:3 msgid "Port" -msgstr "" +msgstr "ポート" #: ../gtk/tunnel_config.ui.h:6 msgid "Configure tunnel" @@ -1656,84 +1558,21 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "ネットワーク" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" -msgstr "" +msgstr "TLS接続を使用する" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "特に情報はありません" +msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "接続中" +msgstr "接続" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1745,12 +1584,11 @@ msgstr "" #: ../gtk/ldap.ui.h:11 msgid "Realm" -msgstr "" +msgstr "Realm" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "接続中" +msgstr "SASL" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1766,18 +1604,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "アドレス" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "接続中" +msgstr "検索" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1792,21 +1628,20 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "接続中" +msgstr "種々" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" -msgstr "" +msgstr "匿名" #: ../gtk/ldap.ui.h:25 msgid "SIMPLE" -msgstr "" +msgstr "シンプル" #: ../gtk/ldap.ui.h:26 msgid "DIGEST-MD5" -msgstr "" +msgstr "ダイジェスト-MD5" #: ../gtk/ldap.ui.h:27 msgid "NTLM" @@ -1825,102 +1660,86 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "コネクション" +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 -#, fuzzy +#: ../coreapi/linphonecore.c:1510 msgid "Ready" -msgstr "準備完了。" +msgstr "準備" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "情報" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "" -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "" #. must be known at that time -#: ../coreapi/linphonecore.c:2418 -#, fuzzy +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" -msgstr "接続中" +msgstr "" -#: ../coreapi/linphonecore.c:2425 -#, fuzzy +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" -msgstr "pixmapファイルが見つかりません %s" +msgstr "" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:2745 -#, fuzzy +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" -msgstr "から電話です。" +msgstr "" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "接続しました。" -#: ../coreapi/linphonecore.c:3220 -#, fuzzy +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" -msgstr "通話はキャンセルされました。" +msgstr "" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "" -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" #: ../coreapi/friend.c:33 -#, fuzzy msgid "Online" -msgstr "ライン入力" +msgstr "オンライン" #: ../coreapi/friend.c:36 msgid "Busy" -msgstr "" +msgstr "ビジー" #: ../coreapi/friend.c:39 msgid "Be right back" @@ -1928,12 +1747,11 @@ msgstr "" #: ../coreapi/friend.c:42 msgid "Away" -msgstr "退席中" +msgstr "離席中" #: ../coreapi/friend.c:45 -#, fuzzy msgid "On the phone" -msgstr "Linphone" +msgstr "" #: ../coreapi/friend.c:48 msgid "Out to lunch" @@ -1944,525 +1762,193 @@ msgid "Do not disturb" msgstr "手が離せません" #: ../coreapi/friend.c:54 -#, fuzzy msgid "Moved" -msgstr "コーデック" +msgstr "移動中" #: ../coreapi/friend.c:57 msgid "Using another messaging service" msgstr "" #: ../coreapi/friend.c:60 -#, fuzzy msgid "Offline" -msgstr "ライン入力" +msgstr "オフライン" #: ../coreapi/friend.c:63 msgid "Pending" -msgstr "" +msgstr "保留" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "情報" +msgstr "休暇中" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" +msgid "Unknown status" msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1369 -#, fuzzy, c-format +#: ../coreapi/proxy.c:1377 +#, c-format msgid "Could not login as %s" -msgstr "pixmapファイルが見つかりません %s" - -#: ../coreapi/callbacks.c:355 -#, fuzzy -msgid "Remote ringing." -msgstr "登録中……" - -#: ../coreapi/callbacks.c:373 -#, fuzzy -msgid "Remote ringing..." -msgstr "登録中……" - -#: ../coreapi/callbacks.c:384 -msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:383 +msgid "Remote ringing." +msgstr "" + +#: ../coreapi/callbacks.c:404 +msgid "Remote ringing..." +msgstr "" + +#: ../coreapi/callbacks.c:414 +msgid "Early media." +msgstr "Early media." + +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:459 -#, fuzzy +#: ../coreapi/callbacks.c:498 msgid "Call resumed." -msgstr "通話は拒否されました。" +msgstr "" -#: ../coreapi/callbacks.c:464 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:502 +#, c-format msgid "Call answered by %s." msgstr "" -"電話をかける\n" -"電話に出る" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 -msgid "We have been resumed." -msgstr "" - -#: ../coreapi/callbacks.c:521 -msgid "We are paused by other party." -msgstr "" - -#: ../coreapi/callbacks.c:556 -msgid "Call is updated by remote." -msgstr "" - -#: ../coreapi/callbacks.c:658 -#, fuzzy -msgid "Call terminated." -msgstr "通話は拒否されました。" - -#: ../coreapi/callbacks.c:687 -msgid "User is busy." -msgstr "ユーザーはビジーです" - -#: ../coreapi/callbacks.c:688 -msgid "User is temporarily unavailable." -msgstr "ユーザーは、今出られません。" - -#. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 -msgid "User does not want to be disturbed." -msgstr "ユーザーは手が離せないようです。" - -#: ../coreapi/callbacks.c:691 -msgid "Call declined." -msgstr "通話は拒否されました。" - -#: ../coreapi/callbacks.c:706 -msgid "Request timeout." -msgstr "" - -#: ../coreapi/callbacks.c:737 -msgid "Redirected" -msgstr "" - -#: ../coreapi/callbacks.c:787 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:798 -#, fuzzy +#: ../coreapi/callbacks.c:560 +msgid "We have been resumed." +msgstr "" + +#. we are being paused +#: ../coreapi/callbacks.c:568 +msgid "We are paused by other party." +msgstr "" + +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 +msgid "Call is updated by remote." +msgstr "" + +#: ../coreapi/callbacks.c:705 +msgid "Call terminated." +msgstr "" + +#: ../coreapi/callbacks.c:733 +msgid "User is busy." +msgstr "相手はビジーです。" + +#: ../coreapi/callbacks.c:734 +msgid "User is temporarily unavailable." +msgstr "相手は、今出られません。" + +#. char *retrymsg=_("%s. Retry after %i minute(s)."); +#: ../coreapi/callbacks.c:736 +msgid "User does not want to be disturbed." +msgstr "相手は手が離せないようです。" + +#: ../coreapi/callbacks.c:737 +msgid "Call declined." +msgstr "通話は拒否されました。" + +#: ../coreapi/callbacks.c:752 +msgid "Request timeout." +msgstr "リクエストは時間切れです。" + +#: ../coreapi/callbacks.c:780 +msgid "Redirected" +msgstr "" + +#: ../coreapi/callbacks.c:835 msgid "Call failed." -msgstr "通話はキャンセルされました。" +msgstr "" -#: ../coreapi/callbacks.c:878 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:913 +#, c-format msgid "Registration on %s successful." -msgstr "登録しました。" +msgstr "" -#: ../coreapi/callbacks.c:879 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:914 +#, c-format msgid "Unregistration on %s done." -msgstr "登録しました。" +msgstr "" -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:900 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:935 +#, c-format msgid "Registration on %s failed: %s" -msgstr "登録しました。" +msgstr "" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "コーデックの情報" +msgstr "" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "" -msgstr[1] "" -#, fuzzy -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "SIPアドレスの形式エラーです。SIPアドレスは、のよ" -#~ "うな形式です。" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "このコンピューターはALSAサウンドドライバーを使用しているようです。\n" -#~ "それは最良の選択です。しかし、Linphoneが必要とする\n" -#~ "pcm ossエミュレーションモジュールが見つかりません。\n" -#~ "ロードするために、ルート権限で'modprobe snd-pcm-oss'を実行してください。" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "このコンピューターはALSAサウンドドライバーを使用しているようです。\n" -#~ "それは最良の選択です。しかし、Linphoneが必要とする\n" -#~ "mixer ossエミュレーションモジュールが見つかりません。\n" -#~ "ロードするために、ルート権限で'modprobe snd-mixer-oss'を実行してください。" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "使用する" - -#, fuzzy -#~ msgid "Contact list" -#~ msgstr "接続中" - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "オーディオコーデックのプロパティー" - -#, fuzzy -#~ msgid "Audio only" -#~ msgstr "オーディオ" - -#, fuzzy -#~ msgid "Duration:" -#~ msgstr "情報" - -#, fuzzy -#~ msgid "_Linphone" -#~ msgstr "Linphone" - -#, fuzzy -#~ msgid "gtk-cancel" -#~ msgstr "接続しました。" - -#, fuzzy -#~ msgid "gtk-ok" -#~ msgstr "削除する" - -#, fuzzy -#~ msgid "gtk-close" -#~ msgstr "接続しました。" - -#, fuzzy -#~ msgid "_Modes" -#~ msgstr "コーデック" - -#, fuzzy -#~ msgid "" -#~ "Audio codecs\n" -#~ "Video codecs" -#~ msgstr "オーディオコーデックのプロパティー" - -#, fuzzy -#~ msgid "Request Cancelled." -#~ msgstr "通話はキャンセルされました。" - -#~ msgid "User cannot be found at given address." -#~ msgstr "ユーザーが見つかりません。" - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "相手側では、提案したコーデックを一つもサポートしていません。" - -#~ msgid "Timeout." -#~ msgstr "時間切れです。" - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "リモートホストが見つかりましたが、接続を拒否されました。" - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "ユーザーに接続することができませんが、ユーザーは代わりの手段に招待していま" -#~ "す。\n" -#~ "他の手段で連絡をとってください。" - -#, fuzzy -#~ msgid "Gone" -#~ msgstr "ありません。" - -#, fuzzy -#~ msgid "Display filters" -#~ msgstr "表示される名前" - -#, fuzzy -#~ msgid "_Properties" -#~ msgstr "RTPのプロパティー" - -#~ msgid "Sound" -#~ msgstr "サウンド" - -#~ msgid "Address book" -#~ msgstr "電話帳" - -#, fuzzy -#~ msgid "Shows the address book" -#~ msgstr "電話帳" - -#~ msgid "Show more..." -#~ msgstr "詳細" - -#~ msgid "Playback level:" -#~ msgstr "受話音量" - -#~ msgid "Recording level:" -#~ msgstr "送話音量" - -#, fuzzy -#~ msgid "Ring level:" -#~ msgstr "送話音量" - -#~ msgid "Reachable" -#~ msgstr "在席中" - -#~ msgid "Busy, I'll be back in " -#~ msgstr "今席をはずしています。" - -#~ msgid "The other party will be informed that you'll be back in X minutes" -#~ msgstr "発信者は、あなたがX分後に戻ってくることが分かります。" - -#~ msgid "mn" -#~ msgstr "分" - -#~ msgid "Moved temporarily" -#~ msgstr "すぐ戻ります" - -#~ msgid "Alternative service" -#~ msgstr "他の連絡手段を使って下さい" - -#~ msgid "URL:" -#~ msgstr "URL:" - -#~ msgid "Presence" -#~ msgstr "状態" - -#~ msgid "Press digits to send DTMFs." -#~ msgstr "DTMFを送信するための数字を押して下さい。" - -#~ msgid "DTMF" -#~ msgstr "DTMF" - -#~ msgid "" -#~ "Linphone is a web-phone.\n" -#~ "It is compatible with SIP and RTP protocols." -#~ msgstr "" -#~ "Linphoneはインターネット電話です。\n" -#~ "SIP・RTPプロトコルと互換性があります。" - -#, fuzzy -#~ msgid "Use IPv6 network (if available)" -#~ msgstr "ユーザーは、今出られません。" - -#, fuzzy -#~ msgid "Number of buffered miliseconds (jitter compensation):" -#~ msgstr "" -#~ "バッファするミリ秒\n" -#~ "(音声が途切れるときは大きくします)" - -#~ msgid "RTP port used for audio:" -#~ msgstr "オーディオに使用するRTPポート番号" - -#~ msgid "micro" -#~ msgstr "マイク入力" - -#~ msgid "Run sip user agent on port:" -#~ msgstr "SIPユーザーエージェントが起動するポート" - -#~ msgid "It is strongly recommended to use port 5060." -#~ msgstr "5060番ポートを使うことを強く推奨します。" - -#~ msgid "@" -#~ msgstr "@" - -#~ msgid "Identity" -#~ msgstr "個人情報" - -#, fuzzy -#~ msgid "Add proxy/registrar" -#~ msgstr "SIPレジストラを使う" - -#~ msgid "Remote services" -#~ msgstr "リモートのサービス" - -#~ msgid "List of audio codecs, in order of preference:" -#~ msgstr "コーデックのリストです。使いたい順に並べてください。" - -#~ msgid "" -#~ "Note: Codecs in red are not usable regarding to your connection type to " -#~ "the internet." -#~ msgstr "" -#~ "注意:赤い色のコーデックは、現在のネットワーク接続方法では使えません。" - -#~ msgid "Codec information" -#~ msgstr "コーデックの情報" - -#~ msgid "Address Book" -#~ msgstr "電話帳" - -#~ msgid "Select" -#~ msgstr "選択する" - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you to contact him " -#~ "using the following alternate ressource:" -#~ msgstr "" -#~ "ユーザーに接続することができませんが、ユーザーは代わりの手段に招待していま" -#~ "す。他の手段で連絡をとってください。" - -#~ msgid "None." -#~ msgstr "ありません。" - -#, fuzzy -#~ msgid "Name:" -#~ msgstr "名前" - -#, fuzzy -#~ msgid "Bad sip address: a sip address looks like sip:user@domain" -#~ msgstr "" -#~ "SIPアドレスの形式エラーです。SIPアドレスは、のよ" -#~ "うな形式です。" - -#~ msgid "Communication ended." -#~ msgstr "会話は終了しました。" - -#~ msgid "28k modem" -#~ msgstr "28kのモデム" - -#~ msgid "56k modem" -#~ msgstr "56kのモデム" - -#~ msgid "64k modem (numeris)" -#~ msgstr "64Kのモデム(ISDN)" - -#~ msgid "ADSL or Cable modem" -#~ msgstr "ADSL・CATVモデム" - -#~ msgid "Ethernet or equivalent" -#~ msgstr "イーサネットなど" - -#~ msgid "Connection type:" -#~ msgstr "接続のタイプ" - -#, fuzzy -#~ msgid "" -#~ "Linphone could not open audio device %s. Check if your sound card is " -#~ "fully configured and working." -#~ msgstr "" -#~ "Linphoneはオーディオデバイスをオープンできませんでした。サウンドカードの設" -#~ "定が完全で、正しく動いているかどうか確認して下さい。" - -#~ msgid "Type here the sip address of the person you want to call." -#~ msgstr "電話をかけたい相手のSIPアドレスを入力して下さい。" - -#~ msgid "" -#~ "Release or\n" -#~ "Refuse" -#~ msgstr "" -#~ "電話を切る\n" -#~ "会話を拒否" - -#~ msgid "%s. Retry after %i minute(s)." -#~ msgstr "%s。%i 分後にかけ直して下さい。" - -#, fuzzy -#~ msgid "Timeout..." -#~ msgstr "時間切れです。" - -#~ msgid "Toggle this if you want to be registered on a remote server." -#~ msgstr "リモートサーバーに登録するときは、チェックして下さい。" - -#~ msgid "Address of record:" -#~ msgstr "登録するアドレス" - -#~ msgid "" -#~ "The password used for registration. On some servers it is not necessary" -#~ msgstr "登録にパスワードを用います。必須でないサーバーもあります。" - -#~ msgid "Use this registrar server as outbound proxy." -#~ msgstr "レジストラサーバーをアウトバウンドプロクシとして使用します。" - -#~ msgid "sip address:" -#~ msgstr "SIPアドレス" - -#~ msgid "Modify" -#~ msgstr "修正" - -#, fuzzy -#~ msgid "" -#~ "You are currently using the i810_audio driver.\n" -#~ "This driver is buggy and so does not work with Linphone.\n" -#~ "We suggest that you replace it by its equivalent ALSA driver,\n" -#~ "either with packages from your distribution, or by downloading\n" -#~ "ALSA drivers at http://www.alsa-project.org." -#~ msgstr "" -#~ "現在、i810オーディオドライバーを使っています。\n" -#~ "このドライバーにはバグがあり、Linphoneではうまく動作しません。\n" -#~ "ALSAドライバーに相当する\n" -#~ "あなたのディストリビュージョンのパッケージか、\n" -#~ "ALSAドライバー(http://www.alsa-project.org)への交換を推奨します。" - -#~ msgid "Unregistration successfull." -#~ msgstr "登録を解除しました。" - -#~ msgid "Select network interface to use:" -#~ msgstr "使用するネットワークインターフェースを選んで下さい" - -#~ msgid "Network interface properties" -#~ msgstr "ネットワークインターフェースのプロパティー" - -#~ msgid "RTP" -#~ msgstr "RTP" - -#~ msgid "C: 2001" -#~ msgstr "C: 2001" - -#~ msgid "/dev/dsp" -#~ msgstr "/dev/dsp" - -#~ msgid "/dev/dsp1" -#~ msgstr "/dev/dsp1" - -#~ msgid "/dev/dsp2" -#~ msgstr "/dev/dsp2" - -#~ msgid "/dev/dsp3" -#~ msgstr "/dev/dsp3" - -#~ msgid "Set the selected address in linphone'main window." -#~ msgstr "選択したアドレスがLinphoneのメインウインドウに現れます。" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/nb_NO.po b/po/nb_NO.po index 6170997da..fb24b907a 100644 --- a/po/nb_NO.po +++ b/po/nb_NO.po @@ -1,21 +1,23 @@ -# Copyright (C) 2011 Free Software Foundation, Inc. -# This file is distributed under the same license as the PACKAGE package. -# -# Øyvind Sæther , 2011. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Øyvind Sæther , 2011 msgid "" msgstr "" -"Project-Id-Version: \n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2011-04-05 01:56+0200\n" -"Last-Translator: Øyvind Sæther \n" -"Language-Team: Norwegian Bokmål \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Norwegian Bokmål (Norway) (http://www.transifex.com/projects/" +"p/linphone-gtk/language/nb_NO/)\n" +"Language: nb_NO\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"X-Generator: Lokalize 1.2\n" -"Plural-Forms: nplurals=2; plural=n != 1;\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -28,28 +30,25 @@ msgid "Send text to %s" msgstr "Send tekst til %s" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "I samtale med" +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "avbrutt" +msgstr "" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "ubesvart" +msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "Avvis" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -65,11 +64,6 @@ msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -77,11 +71,9 @@ msgid "" "%s\t%s\t" msgstr "" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -89,16 +81,15 @@ msgid "Conference" msgstr "" #: ../gtk/conference.c:46 -#, fuzzy msgid "Me" -msgstr "Skru mikrofonen av" +msgstr "" #: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Fant ikke pixmap fli: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "Ugyldig SIP kontakt !" @@ -135,21 +126,14 @@ msgstr "" "\\Programfiler\\Linphone)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Bekreftelse" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "Brukerkontoveiviser" +msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Ring med %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -157,75 +141,71 @@ msgid "" "list ?\n" "If you answer no, this person will be temporarily blacklisted." msgstr "" -"&s vil legge deg til i hans/hennes kontaktliste.\n" +"%s vil legge deg til i hans/hennes kontaktliste.\n" "Vil du tillate vedkommende å se din tilstedestatus eller legge vedkommende i " "din kontaktliste?\n" "Hvis du svarer nei vil personen bli svartelyst midlertidig." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -"Skriv inn ditt passord for brukernavn %s\n" -" på domene %s:i>:" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "Samtalehistorikk" +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Samtale avsluttet" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Innkommende samtale" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Svarer" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Avvis" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "Samtale avbrutt" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "Porter" +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Peker til nettsted" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - en video Internet telefon" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (Standard)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "Vi er overført til %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -233,7 +213,7 @@ msgstr "" "Klarte ikke å finne noe lydkort på denne datamaskinen.\n" "Du vil ikke kunne sende eller motta lydsamtaler." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "En gratis SIP video-telefon" @@ -250,9 +230,8 @@ msgid "Name" msgstr "Navn" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "Ring %s" +msgstr "" #: ../gtk/friendlist.c:726 msgid "Chat" @@ -274,9 +253,9 @@ msgid "Delete contact '%s'" msgstr "Slett kontakt '%s'" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "Slett kontakt '%s'" +msgstr "" #: ../gtk/friendlist.c:1029 #, c-format @@ -292,9 +271,8 @@ msgid "Status" msgstr "Status" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Min. datahastighet (kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -312,92 +290,92 @@ msgstr "Av" msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "Engelsk" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Fransk" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Svensk" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Italisensk" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Spansk" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "Portugisisk" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Polsk" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Tysk" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Russisk" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "Japansk" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Nederlandsk" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Ungarsk" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Tjekkisk" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "Kinesisk" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Du må restarte linphone for at det nye språkvalget skal iverksettes." -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -443,26 +421,21 @@ msgstr[1] "Hittat kontakt %i" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Velkommen\n" -"Denne veiviseren vil hjelpe deg sette opp en SIP-konto for dine samtaler." #: ../gtk/setupwizard.c:43 -#, fuzzy msgid "Create an account on linphone.org" -msgstr "Lag en konto ved å velge ett brukernavn" +msgstr "" #: ../gtk/setupwizard.c:44 -#, fuzzy msgid "I have already a linphone.org account and I just want to use it" -msgstr "Jeg har allerede en brukerkonto og vil bruke den." +msgstr "" #: ../gtk/setupwizard.c:45 -#, fuzzy msgid "I have already a sip account and I just want to use it" -msgstr "Jeg har allerede en brukerkonto og vil bruke den." +msgstr "" #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" @@ -485,14 +458,12 @@ msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "Brukernavn" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "Passord" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -507,14 +478,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "Brukernavn:" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "Passord:" +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -545,49 +514,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "Brukerkontoveiviser" +msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "Velkommen til brukerkontoveiviseren" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Brukerkontoveiviser" -#: ../gtk/setupwizard.c:629 -#, fuzzy +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" -msgstr "Konfigurer en SIP konto" +msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 -#, fuzzy +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" -msgstr "Lägg på" +msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "Ring %s" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -595,18 +561,16 @@ msgid "Transfer to call #%i with %s" msgstr "" #: ../gtk/incall_view.c:211 ../gtk/incall_view.c:214 -#, fuzzy msgid "Not used" -msgstr "Ikke funnet" +msgstr "" #: ../gtk/incall_view.c:221 msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "ICE filter" +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -617,9 +581,8 @@ msgid "Going through one or more NATs" msgstr "" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "Omdirigert" +msgstr "" #: ../gtk/incall_view.c:231 msgid "Through a relay server" @@ -630,9 +593,8 @@ msgid "uPnP not activated" msgstr "" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "STUN oppslag pågår..." +msgstr "" #: ../gtk/incall_view.c:243 msgid "uPnp not available" @@ -643,9 +605,8 @@ msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "ICE filter" +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -668,117 +629,109 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "Ringer..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00:00:00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "Innkommende samtale" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "I samtale med" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "Pauset samtale" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i:%02i:%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Samtale avsluttet." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 -#, fuzzy +#: ../gtk/incall_view.c:828 msgid "Transfer done." -msgstr "Overfører" +msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "Overfører" +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "Fortsett" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "Pause" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 -#, fuzzy +#: ../gtk/incall_view.c:948 msgid "(Paused)" -msgstr "Pause" +msgstr "" #: ../gtk/loginframe.c:88 #, c-format @@ -786,9 +739,9 @@ msgid "Please enter login information for %s" msgstr "Skriv inn påloggingsinformasjon for %s:" #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "Inkommande samtal från %s" +msgstr "" #: ../gtk/config-fetching.c:73 #, c-format @@ -812,18 +765,14 @@ msgid "Too loud" msgstr "" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"Velkommen\n" -"Denne veiviseren vil hjelpe deg sette opp en SIP-konto for dine samtaler." #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Mikrofonenhet:" +msgstr "" #: ../gtk/audio_assistant.c:329 msgid "Recorded volume" @@ -834,9 +783,8 @@ msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Avspillingsenhet:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -855,14 +803,12 @@ msgid "Let's start Linphone now" msgstr "" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "Assistent" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "Brukerkontoveiviser" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -877,9 +823,8 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "Samtale avsluttet." +msgstr "" #: ../gtk/main.ui.h:2 msgid "Send" @@ -942,9 +887,8 @@ msgid "_Options" msgstr "_Alternativer" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Bekreftelse" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -971,9 +915,8 @@ msgid "Check _Updates" msgstr "Sjekk _Oppdateringer" #: ../gtk/main.ui.h:30 -#, fuzzy msgid "Account assistant" -msgstr "Brukerkontoveiviser" +msgstr "" #: ../gtk/main.ui.h:32 msgid "SIP address or phone number:" @@ -1000,9 +943,8 @@ msgid "Add contact" msgstr "Legg til kontakt" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "I samtale" +msgstr "" #: ../gtk/main.ui.h:39 msgid "My current identity:" @@ -1033,20 +975,20 @@ msgid "Login information" msgstr "Innlogginsinformasjon" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "Velkommen!" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "Om Linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "(C) Belledonne Communications,2011\n" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." @@ -1055,7 +997,6 @@ msgstr "" "(rfc3261)." #: ../gtk/about.ui.h:5 -#, fuzzy msgid "" "fr: Simon Morlat\n" "en: Simon Morlat and Delphine Perreau\n" @@ -1070,17 +1011,6 @@ msgid "" "hu: anonymous\n" "he: Eli Zaretskii \n" msgstr "" -"fr: Simon Morlat\n" -"en: Simon Morlat og Delphine Perreau\n" -"it: Alberto Zanoni \n" -"de: Jean-Jacques Sarton \n" -"sv: Daniel Nylander \n" -"es: Jesus Benitez \n" -"ja: YAMAGUCHI YOSHIYA \n" -"pt_BR: Rafael Caesar Lenzi \n" -"pl: Robert Nasiadek \n" -"cs: Petr Pisar \n" -"hu: anonym\n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1155,9 +1085,8 @@ msgid "Registration duration (sec):" msgstr "Registreringsfrekvens (sek.):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Route (valgfritt):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1168,9 +1097,8 @@ msgid "Route (optional):" msgstr "Route (valgfritt):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Transport" +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1181,9 +1109,8 @@ msgid "Publish presence information" msgstr "Publiser tilstedestatus" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Aktiver" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1225,24 +1152,21 @@ msgstr "Lyd kodek" msgid "Video codecs" msgstr "Video kodek" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 -#, fuzzy msgid "SIP (UDP)" -msgstr "SIP (UDP):" +msgstr "" #: ../gtk/parameters.ui.h:12 -#, fuzzy msgid "SIP (TCP)" -msgstr "SIP (TCP):" +msgstr "" #: ../gtk/parameters.ui.h:13 -#, fuzzy msgid "SIP (TLS)" -msgstr "SIP (TCP):" +msgstr "" #: ../gtk/parameters.ui.h:14 msgid "Settings" @@ -1309,23 +1233,20 @@ msgid "Direct connection to the Internet" msgstr "Tilkoblet Internett direkte" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "Bak NAT / Brannmur (spesifiser gateway IP under)" +msgstr "" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Bak NAT / Brannmur (bruk STUN for å avgjøre)" #: ../gtk/parameters.ui.h:32 -#, fuzzy msgid "Behind NAT / Firewall (use ICE)" -msgstr "Bak NAT / Brannmur (bruk STUN for å avgjøre)" +msgstr "" #: ../gtk/parameters.ui.h:33 -#, fuzzy msgid "Behind NAT / Firewall (use uPnP)" -msgstr "Bak NAT / Brannmur (bruk STUN for å avgjøre)" +msgstr "" #: ../gtk/parameters.ui.h:34 msgid "Public IP address:" @@ -1380,9 +1301,8 @@ msgid "Prefered video resolution:" msgstr "Foretrukke video-oppløsning:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Videoenhet:" +msgstr "" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1503,29 +1423,22 @@ msgid "User interface" msgstr "Brukergrensesnitt" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "SIP Adress" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Autorisering kreves" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "etikett" +msgid "LDAP Account setup" +msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Proxy kontoer" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "Ferdig" @@ -1550,42 +1463,36 @@ msgid "Please wait" msgstr "Vennligst vent" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Innstillinger" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" msgstr "" #: ../gtk/dscp_settings.ui.h:3 -#, fuzzy msgid "Audio RTP stream" -msgstr "Lydomformer" +msgstr "" #: ../gtk/dscp_settings.ui.h:4 -#, fuzzy msgid "Video RTP stream" -msgstr "Video RTP/UDP:" +msgstr "" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" msgstr "" #: ../gtk/call_statistics.ui.h:1 -#, fuzzy msgid "Call statistics" -msgstr "Ringer %s" +msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" -msgstr "Lyd kodek" +msgstr "" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" -msgstr "Video kodek" +msgstr "" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1612,24 +1519,20 @@ msgid "Video resolution received" msgstr "" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "Foretrukke video-oppløsning:" +msgstr "" #: ../gtk/call_statistics.ui.h:11 -#, fuzzy msgid "RTP profile" -msgstr "RTP inn-filter" +msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "Kontaktinformasjon" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 -#, fuzzy msgid "Configure VoIP tunnel" -msgstr "Konfigurer en SIP konto" +msgstr "" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" @@ -1647,70 +1550,9 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "D" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "B" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "A" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Innstillinger" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" @@ -1721,9 +1563,8 @@ msgid "Not yet available" msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Kodeker" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1738,9 +1579,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Lyd" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1756,18 +1596,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "SIP Adress" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Søk noen" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1782,9 +1620,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Video" +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1815,86 +1652,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Tilknytter..." +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Klar" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Bekreftelse" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Ser etter telefonnummer for destinasjonen..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Kan ikke tilkoble dette nummeret." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Tilknytter" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "Kunne ikke ringe" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Beklager, du har nådd maksimalt antall samtidige samtaler" -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "Kontakter deg." -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr " og ba om autosvar." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "." - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "Endrer ringeparametre..." -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Tilkoblet" -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "Samtale avbrutt" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "Kunne ikke pause samtalen" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "Pauser nåværende samtale" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "STUN oppslag pågår..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1943,15 +1770,14 @@ msgid "Pending" msgstr "Pågående" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Varighet" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Ukjent feil" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1959,7 +1785,7 @@ msgstr "" "SIP proxy adressen du har angitt er ugyldig, den må begynne med \"sip:\" " "etterfult av vertsnavn." -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1967,617 +1793,159 @@ msgstr "" "SIP adressen du har angitt er feil. Adressen bør se ut som sip: " "brukernavn@domenenavn, f.eks sip:ola@eksempel.no" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "Ikke ikke logge inn som %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "Ringer hos motparten." -#: ../coreapi/callbacks.c:373 -#, fuzzy +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." -msgstr "Ringer hos motparten." +msgstr "" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "Tidlig media" -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "Samtalen med %s er pauset." -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "Samtale besvart av %s - på vent." -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "Samtale gjenopptatt." -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "Samtale besvart av %s." -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 -#, fuzzy -msgid "We have been resumed." -msgstr "Vi har blitt gjenopptatt..." +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" -#: ../coreapi/callbacks.c:521 +#: ../coreapi/callbacks.c:560 +msgid "We have been resumed." +msgstr "" + +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Samtale avsluttet." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Brukeren er opptatt." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Brukeren er midlertidig ikke tilgjengelig." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "Brukeren vil ikke bli forstyrret." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Samtale avvist." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "Omdirigert" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "" - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "Samtale feilet." -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Registrering hos %s lykkes." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "Avregistrering hos %s lykkes." -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "ingen svar innen angitt tid" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrering hos %s mislykkes: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "Autorisering kreves" +msgstr "" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "Du har %i ubesvarte anrop." msgstr[1] "Du har %i missade samtal" -#~ msgid "aborted" -#~ msgstr "avbrutt" - -#~ msgid "completed" -#~ msgstr "Fullført" - -#~ msgid "missed" -#~ msgstr "ubesvart" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s på %s\n" -#~ "Fra: %s\n" -#~ "Til: %s\n" -#~ "Status: %s\n" -#~ "Lengde: %i min %i sek\n" - -#~ msgid "Outgoing call" -#~ msgstr "Utgående samtale" - -#~ msgid "No response." -#~ msgstr "Ikke noe svar." - -#~ msgid "Protocol error." -#~ msgstr "Protokollfeil." - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Klarer ikke å tolke angitt SIP-adresse. En SIP-adresse er vanligvis ut " -#~ "som sip: brukernavn@domenenavn" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Din datamaskin ser ut til å bruke ALSA drivere for lyd.\n" -#~ "Dette er det beste alternativet. Det ser ut til at pcm oss " -#~ "emulasjonsmodulen\n" -#~ "mangler og linphone trenger den. Vennligst kjør\n" -#~ "'modprobe snd-pcm-oss' som root for å laste den." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Din datamaskin ser ut til å bruke ALSA drivere for lyd.\n" -#~ "Dette er det beste alternativet. Det ser ut til at mixermodulen for oss " -#~ "emulering\n" -#~ "mangler og linphone trenger den. Vennligst kjør\n" -#~ "'modprobe snd-mixer-oss' som root for å laste den." - -#~ msgid "Keypad" -#~ msgstr "Tastatur" - -#~ msgid "Chat with %s" -#~ msgstr "Chat med %s" - -#~ msgid "Please choose a username:" -#~ msgstr "Velg ett brukernavn:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "Sjekker om %s' er tilgjengelig..." - -#~ msgid "Please wait..." -#~ msgstr "Vennligst vent..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "Beklager, brukernavnet er allerede tatt. Forsøk ett annet." - -#~ msgid "Ok !" -#~ msgstr "Ok !" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "Kommunikasjonsproblem, forsøk igjen senere." - -#~ msgid "Choosing a username" -#~ msgstr "Velg ett brukernavn" - -#~ msgid "Verifying" -#~ msgstr "Verifiserer" - -#~ msgid "Creating your account" -#~ msgstr "Lager brukerkontoen din" - -#~ msgid "Now ready !" -#~ msgstr "Klar nå!" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "På" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "Skriv inn brukernavn, telefonnummer eller full SIP-addresse" - -#~ msgid "Lookup:" -#~ msgstr "Slå opp:" - -#~ msgid "in" -#~ msgstr "i" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "Registrer hos FONICS\n" -#~ "virtuelle nettverk !" - -#~ msgid "We are being paused..." -#~ msgstr "Vi er satt på vent..." - -#~ msgid "No common codecs" -#~ msgstr "Ingen felles kodek" - -#~ msgid "Windows" -#~ msgstr "Vinduer" - -#~ msgid "" -#~ "Pause all calls\n" -#~ "and answer" -#~ msgstr "" -#~ "Pauser alle samtaler\n" -#~ "og svarer" - -#~ msgid "Unmute" -#~ msgstr "Skru mikrofonen på" - -#~ msgid "Contact list" -#~ msgstr "Kontaktliste" - -#~ msgid "Audio & video" -#~ msgstr "Lyd og Video" - -#~ msgid "Audio only" -#~ msgstr "Kun lyd" - -#~ msgid "Duration:" -#~ msgstr "Varighet:" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "Samtalehistorikk" - -#~ msgid "_Linphone" -#~ msgstr "_Linphone" - -#~ msgid "gtk-cancel" -#~ msgstr "gtk-avbryt" - -#~ msgid "gtk-ok" -#~ msgstr "gtk-ok" - -#~ msgid "Register at startup" -#~ msgstr "Registrer ved oppstart" - -#~ msgid "gtk-close" -#~ msgstr "gtk-lukk" - -#~ msgid "Sorry, you have to pause or stop the current call first !" -#~ msgstr "Beklager, du må pause eller avslutte den nåværende samtalen først !" - -#~ msgid "There is already a call in process, pause or stop it first." -#~ msgstr "Det er allerede en samtale igang, pause eller avslutt den først." - -#~ msgid "ITU-G.711 alaw encoder" -#~ msgstr "ITU-G.711 alaw enkoder" - -#~ msgid "ITU-G.711 alaw decoder" -#~ msgstr "ITU-G.711 alaw dekoder" - -#~ msgid "Alsa sound source" -#~ msgstr "Alasa lydkilde" - -#~ msgid "Alsa sound output" -#~ msgstr "alsa lydutgang" - -#~ msgid "Sound capture filter for MacOS X Audio Queue Service" -#~ msgstr "Lydfangefilter for MacOS X Audio Queue Service" - -#~ msgid "Sound playback filter for MacOS X Audio Queue Service" -#~ msgstr "Lydavspillingsfilter for MacOS X Audio Queue Service" - -#~ msgid "DTMF generator" -#~ msgstr "DTMF generator" - -#~ msgid "The GSM full-rate codec" -#~ msgstr "Høyhastighets GSM kodek" - -#~ msgid "The GSM codec" -#~ msgstr "GSM kodek" - -#, fuzzy -#~ msgid "Sound capture filter for MacOS X Audio Unit" -#~ msgstr "Lydfangefilter for MacOS X Core Audio drivere" - -#, fuzzy -#~ msgid "Sound playback filter for MacOS X Audio Unit" -#~ msgstr "Lydavspillingsfilter for MacOS X Core Audio drivere" - -#~ msgid "A filter to make conferencing" -#~ msgstr "Ett filter for telekonferanser" - -#~ msgid "Raw files and wav reader" -#~ msgstr "Få filer og wav leser" - -#~ msgid "Wav file recorder" -#~ msgstr "WAV filopptaker" - -#~ msgid "A filter that send several inputs to one output." -#~ msgstr "Ett filer for å sende flere inn-kilder til en utgang" - -#~ msgid "RTP output filter" -#~ msgstr "RTP ut-filter" - -#~ msgid "The free and wonderful speex codec" -#~ msgstr "En fri og fantatisk speex kodek" - -#~ msgid "A filter that controls and measure sound volume" -#~ msgstr "Ett filer som kontrollerer og måler lydvolumet" - -#~ msgid "A video4linux compatible source filter to stream pictures." -#~ msgstr "Ett video4linux kompatiblet kildefilter for bildestrømmer." - -#~ msgid "A filter to grab pictures from Video4Linux2-powered cameras" -#~ msgstr "Ett filter for å fange bilder fra Video4Linux2-støttede kameraer" - -#~ msgid "A filter that outputs a static image." -#~ msgstr "En filter som sender ett statisk bilde." - -#~ msgid "A pixel format converter" -#~ msgstr "En pixel format omformer" - -#~ msgid "A video size converter" -#~ msgstr "En videostørrelsesomformer" - -#~ msgid "a small video size converter" -#~ msgstr "En liten video størrelsesomformer" - -#~ msgid "Echo canceller using speex library" -#~ msgstr "Ekko fjerning ved hjelp av speex" - -#~ msgid "A filter that reads from input and copy to its multiple outputs." -#~ msgstr "Ett filter som leser innkoder og kopierer det til flere utganger" - -#~ msgid "The theora video encoder from xiph.org" -#~ msgstr "En Theora videokoder fra xpih.org" - -#~ msgid "The open-source and royalty-free 'theora' video codec from xiph.org" -#~ msgstr "" -#~ "Et åpen kildekode og betalingsfritt 'theora' video kodek fra xpih.org" - -#~ msgid "The theora video decoder from xiph.org" -#~ msgstr "Theora video dekoder fra xiph.org" - -#~ msgid "ITU-G.711 ulaw encoder" -#~ msgstr "ITU-G.711 ulaw enkoder" - -#~ msgid "ITU-G.711 ulaw decoder" -#~ msgstr "ITU-G.711 ulaw dekoder" - -#~ msgid "A H.263 decoder using ffmpeg library" -#~ msgstr "En H.263 dekoder som bruker ffmpeg biblioteket" - -#~ msgid "A MPEG4 decoder using ffmpeg library" -#~ msgstr "En MPEG4 dekoder som bruker ffmpeg biblioteket" - -#~ msgid "A RTP/JPEG decoder using ffmpeg library" -#~ msgstr "En RTP/JPEG dekoder som bruker ffmpeg biblioteket" - -#~ msgid "A MJPEG decoder using ffmpeg library" -#~ msgstr "En MJPEG dekoder som bruker ffmpeg biblioteket" - -#~ msgid "A snow decoder using ffmpeg library" -#~ msgstr "En snow dekoder som bruker ffmpeg biblioteket" - -#~ msgid "A video H.263 encoder using ffmpeg library." -#~ msgstr "En H.263 videodekoder som bruker ffmpeg biblioteket" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library. It is compliant with old " -#~ "RFC2190 spec." -#~ msgstr "" -#~ "En H.263 enkoder som bruker ffmpeg biblioteket. Den følger den eldre " -#~ "RFC2190 spesifikasjonen." - -#~ msgid "A video MPEG4 encoder using ffmpeg library." -#~ msgstr "En video MPEG4 enkoder som bruker ffmpeg biblioteket." - -#~ msgid "A video snow encoder using ffmpeg library." -#~ msgstr "En show video enkoder som bruker ffmpeg biblioteket." - -#~ msgid "A RTP/MJPEG encoder using ffmpeg library." -#~ msgstr "En RTP/MJPEG enkoder som bruker ffmpeg biblioteket" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library, compliant with old RFC2190 " -#~ "spec." -#~ msgstr "" -#~ "En h.264 video enkoder som bruker ffmpeg biblioteket, kompatibelt med den " -#~ "eldre RFC2190 spesifikasjonen." - -#~ msgid "" -#~ "The snow codec is royalty-free and is open-source. \n" -#~ "It uses innovative techniques that makes it one of most promising video " -#~ "codec. It is implemented within the ffmpeg project.\n" -#~ "However it is under development, quite unstable and compatibility with " -#~ "other versions cannot be guaranteed." -#~ msgstr "" -#~ "Snow video-kodeksen har åpen kildekode og er vedelagsfri.\n" -#~ "Den bruker moderne teknikker som gjør den til en god video kodek. Den er " -#~ "implementert innen ffmpeg prosjektet.\n" -#~ "Den er under stadig utvikling, er ganske ustabil og kompatiblitet med " -#~ "andre utgaver kan ikke garanteres." - -#~ msgid "A MJPEG encoder using ffmpeg library." -#~ msgstr "En MJPEG enkoder som bruker ffmpeg biblioteket." - -#~ msgid "A SDL-based video display" -#~ msgstr "Ett SDL-basert video-bibliotek" - -#~ msgid "A video4windows compatible source filter to stream pictures." -#~ msgstr "Ett video4windows-kompatibelt kildefiler for bildestrømmer." - -#~ msgid "A video for windows (vfw.h) based source filter to grab pictures." -#~ msgstr "" -#~ "Ett video for vinduer (vfw.h) baserte kildefilter for å fange bilder" - -#~ msgid "" -#~ "A filter that trashes its input (useful for terminating some graphs)." -#~ msgstr "" -#~ "Ett filter som ødelegger input (nyttig for å terminere noen grafer)." - -#~ msgid "Parametric sound equalizer." -#~ msgstr "Parameterisk lyd-mixer" - -#~ msgid "A webcam grabber based on directshow." -#~ msgstr "En webcam-fanger basert på directshow." - -#~ msgid "A video display based on windows DrawDib api" -#~ msgstr "Videovisning basert på windows DrawDib api" - -#~ msgid "A filter that mixes down 16 bit sample audio streams" -#~ msgstr "Ett filter som mixer ned til 16 bits lydstrømmer" - -#~ msgid "A filter that converts from mono to stereo and vice versa." -#~ msgstr "Ett filter som konverterer fra mono til stereo og motsatt." - -#~ msgid "Inter ticker communication filter." -#~ msgstr "Inter ticker kommunikasjonsfilter." - -#~ msgid "A display filter sending the buffers to draw to the upper layer" -#~ msgstr "" -#~ "Et visningsfilter for å sende buffere for å tegne det oppdaterte nivået" - -#~ msgid "Sound capture filter for MacOS X Audio Unit Service" -#~ msgstr "Lydfangefilter for MacOS X Audio Unit Service" - -#~ msgid "Sound playback filter for MacOS X Audio Unit Service" -#~ msgstr "Lydavspillingsfilter for MacOS X Audio Unit Service" - -#~ msgid "A video display using X11+Xv" -#~ msgstr "En videovisning som bruker X11-Xv" - -#~ msgid "Sound capture filter for Android" -#~ msgstr "Lydfangefilter for Android" - -#~ msgid "Sound playback filter for Android" -#~ msgstr "Lydavspillingsfilter for Android" - -#~ msgid "A filter that captures Android video." -#~ msgstr "Ett filter som fanger Android video." - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "Din dator er tilkoblet ett IPv6 nettverk. Linphone bruker IPv6 som " -#~ "standard. Oppdater oppsettet om du vil bruke IPv6. " - -#~ msgid "Show debug messages" -#~ msgstr "Visa debugfönstret" - -#~ msgid "Start call" -#~ msgstr "Ring" - -#~ msgid "_Modes" -#~ msgstr "_Media" - -#~ msgid "Created by Simon Morlat\n" -#~ msgstr "Skapad av Simon Morlat\n" - -#~ msgid "Accept" -#~ msgstr "Godkänn" - -#~ msgid "Incoming call from" -#~ msgstr "Inkommande samtal från" - -#~ msgid "Linphone - Incoming call" -#~ msgstr "Linphone - Inkommande samtal" - -#~ msgid "default soundcard\n" -#~ msgstr "default ljudkort\n" - -#~ msgid "" -#~ "Remote end seems to have disconnected, the call is going to be closed." -#~ msgstr "" -#~ "Motparten verkar ha avbrutit samtalet, samtalet kommer att avslutas." - -#~ msgid "Sorry, having multiple simultaneous calls is not supported yet !" -#~ msgstr "Förlåt, men linphone stödjer inte flera samtliga samtal än!" - -#~ msgid "Could not reach destination." -#~ msgstr "Kunde inte nå motparten." - -#~ msgid "Request Cancelled." -#~ msgstr "Förfrågan avbruten." - -#~ msgid "Bad request" -#~ msgstr "Fel förfråga." - -#~ msgid "User cannot be found at given address." -#~ msgstr "Användaren kan inte hittas vid den angivna adressen." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "Motparten stödjer ingen av de föreslagna codecs." - -#~ msgid "Timeout." -#~ msgstr "time out." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Motparten hittades men ville inte ta emot samtalet." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "Användaren kan inte nås för tillfället men han/hon ber digatt kontakta " -#~ "honom/henna vid följande resurs:" - -#~ msgid "Digits" -#~ msgstr "Tangenter" - -#~ msgid "Main view" -#~ msgstr "Huvud vy" - -#~ msgid "No nat/firewall address supplied !" -#~ msgstr "Ingen NAT / brandväggs adress angiven!" - -#~ msgid "Invalid nat address '%s' : %s" -#~ msgstr "Fel NAT adress '%s': %s" - -#~ msgid "Gone" -#~ msgstr "Har gått" - -#~ msgid "Waiting for Approval" -#~ msgstr "Väntar för godkännandet" - -#~ msgid "Be Right Back" -#~ msgstr "Kommer strax tillbaka" - -#~ msgid "On The Phone" -#~ msgstr "På telefon" - -#~ msgid "Out To Lunch" -#~ msgstr "Lunchar" - -#~ msgid "Closed" -#~ msgstr "Stängt" - -#~ msgid "Unknown" -#~ msgstr "Okänd" - -#~ msgid "Bresilian" -#~ msgstr "Brasiliansk" - -#~ msgid "_View" -#~ msgstr "_Vy" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/nl.po b/po/nl.po index b650efb95..8ea8053c2 100644 --- a/po/nl.po +++ b/po/nl.po @@ -1,28 +1,27 @@ -# translation of nl.po to Nederlands -# Dutch translation of linphone. -# Copyright (C) 2005 THE PACKAGE'S COPYRIGHT HOLDER -# This file is distributed under the same license as the linphone package. -# Taco Witte , 2005. -# Hendrik-Jan Heins , 2005. -# Hendrik-Jan Heins , 2007. -# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: nl\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2007-09-05 10:40+0200\n" -"Last-Translator: Hendrik-Jan Heins \n" -"Language-Team: Nederlands \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Dutch (http://www.transifex.com/projects/p/linphone-gtk/" +"language/nl/)\n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 -#, fuzzy, c-format +#, c-format msgid "Call %s" -msgstr "Oproepgeschiedenis" +msgstr "" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:975 #, c-format @@ -30,28 +29,25 @@ msgid "Send text to %s" msgstr "" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "Contactlijst" +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "afgebroken" +msgstr "" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "gemist" +msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "lijn" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -67,11 +63,6 @@ msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -79,11 +70,9 @@ msgid "" "%s\t%s\t" msgstr "" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -99,7 +88,7 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Kon pixmap bestand %s niet vinden" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "" @@ -134,20 +123,14 @@ msgid "" msgstr "" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Informatie" +msgstr "" #: ../gtk/main.c:163 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:590 -#, fuzzy, c-format -msgid "Call with %s" -msgstr "Chat met %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -156,82 +139,78 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1260 +#: ../gtk/main.c:1162 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "Linphone - Oproepgeschiedenis" +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Oproep beeindigd" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Inkomende oproep" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 -#, fuzzy +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" -msgstr "lijn" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "afgebroken" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "Contactlijst" +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "Een Vrije SIP video-telefoon" #: ../gtk/friendlist.c:505 -#, fuzzy msgid "Add to addressbook" -msgstr "Adresboek" +msgstr "" #: ../gtk/friendlist.c:691 msgid "Presence status" @@ -242,14 +221,12 @@ msgid "Name" msgstr "Naam" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "Oproepgeschiedenis" +msgstr "" #: ../gtk/friendlist.c:726 -#, fuzzy msgid "Chat" -msgstr "Chat box" +msgstr "" #: ../gtk/friendlist.c:756 #, c-format @@ -257,9 +234,9 @@ msgid "Search in %s directory" msgstr "" #: ../gtk/friendlist.c:976 -#, fuzzy, c-format +#, c-format msgid "Edit contact '%s'" -msgstr "Bewerk contactgegevens" +msgstr "" #: ../gtk/friendlist.c:977 #, c-format @@ -285,9 +262,8 @@ msgid "Status" msgstr "Status" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Minimale bitrate (kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -305,92 +281,92 @@ msgstr "Uit" msgid "Account" msgstr "Account" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "Geen" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -414,14 +390,12 @@ msgid "Error communicating with server." msgstr "" #: ../gtk/buddylookup.c:164 -#, fuzzy msgid "Connecting..." -msgstr "Verbinden" +msgstr "" #: ../gtk/buddylookup.c:168 -#, fuzzy msgid "Connected" -msgstr "Verbonden." +msgstr "" #: ../gtk/buddylookup.c:172 msgid "Receiving data..." @@ -436,7 +410,7 @@ msgstr[1] "" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" @@ -461,28 +435,24 @@ msgid "Enter your linphone.org username" msgstr "" #: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4 -#, fuzzy msgid "Username:" -msgstr "gebruikersnaam:" +msgstr "" #: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 -#, fuzzy msgid "Password:" -msgstr "wachtwoord:" +msgstr "" #: ../gtk/setupwizard.c:124 msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "gebruikersnaam:" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "wachtwoord:" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -497,14 +467,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "gebruikersnaam:" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "wachtwoord:" +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -535,46 +503,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "Oproepgeschiedenis" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -590,9 +558,8 @@ msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "Oproep geannuleerd." +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -603,9 +570,8 @@ msgid "Going through one or more NATs" msgstr "" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "Doorgeschakeld naar %s..." +msgstr "" #: ../gtk/incall_view.c:231 msgid "Through a relay server" @@ -616,23 +582,20 @@ msgid "uPnP not activated" msgstr "" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "STUN adres wordt opgezocht..." +msgstr "" #: ../gtk/incall_view.c:243 -#, fuzzy msgid "uPnp not available" -msgstr "Geen informatie beschikbaar" +msgstr "" #: ../gtk/incall_view.c:245 msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "Oproep geannuleerd." +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -655,118 +618,107 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 -#, fuzzy +#: ../gtk/incall_view.c:511 msgid "Calling..." -msgstr "Contactlijst" +msgstr "" -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "" -#: ../gtk/incall_view.c:515 -#, fuzzy +#: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "Inkomende oproep" +msgstr "" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 -#, fuzzy +#: ../gtk/incall_view.c:722 msgid "In call" -msgstr "Contactlijst" - -#: ../gtk/incall_view.c:738 -#, fuzzy -msgid "Paused call" -msgstr "Contactlijst" - -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" msgstr "" -#: ../gtk/incall_view.c:772 -#, fuzzy -msgid "Call ended." -msgstr "Oproep beeindigd" +#: ../gtk/incall_view.c:758 +msgid "Paused call" +msgstr "" -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:794 +msgid "Call ended." +msgstr "" + +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "Oproep geannuleerd." +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "" @@ -776,9 +728,9 @@ msgid "Please enter login information for %s" msgstr "" #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "Inkomende oproep" +msgstr "" #: ../gtk/config-fetching.c:73 #, c-format @@ -803,28 +755,25 @@ msgstr "" #: ../gtk/audio_assistant.c:318 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Geluidsapparaat gebruiken:" +msgstr "" #: ../gtk/audio_assistant.c:329 -#, fuzzy msgid "Recorded volume" -msgstr "Bron voor opname:" +msgstr "" #: ../gtk/audio_assistant.c:333 msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Geluidsapparaat gebruiken:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -863,14 +812,12 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "Oproep beeindigd" +msgstr "" #: ../gtk/main.ui.h:2 -#, fuzzy msgid "Send" -msgstr "Geluid" +msgstr "" #: ../gtk/main.ui.h:3 msgid "End conference" @@ -893,14 +840,12 @@ msgid "Transfer" msgstr "" #: ../gtk/main.ui.h:14 -#, fuzzy msgid "In call" -msgstr "Inkomende oproep" +msgstr "" #: ../gtk/main.ui.h:15 -#, fuzzy msgid "Duration" -msgstr "Informatie" +msgstr "" #: ../gtk/main.ui.h:16 msgid "Call quality rating" @@ -911,9 +856,8 @@ msgid "All users" msgstr "" #: ../gtk/main.ui.h:18 -#, fuzzy msgid "Online users" -msgstr "Aanwezig" +msgstr "" #: ../gtk/main.ui.h:19 msgid "ADSL" @@ -924,32 +868,28 @@ msgid "Fiber Channel" msgstr "" #: ../gtk/main.ui.h:21 -#, fuzzy msgid "Default" -msgstr "SIP-identiteit:" +msgstr "" #: ../gtk/main.ui.h:22 msgid "_Options" msgstr "" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Proxy/registratieserver registratieveld" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" msgstr "" #: ../gtk/main.ui.h:25 -#, fuzzy msgid "Enable self-view" -msgstr "Video aan" +msgstr "" #: ../gtk/main.ui.h:26 -#, fuzzy msgid "_Help" -msgstr "Help" +msgstr "" #: ../gtk/main.ui.h:27 msgid "Show debug window" @@ -968,87 +908,75 @@ msgid "Account assistant" msgstr "" #: ../gtk/main.ui.h:32 -#, fuzzy msgid "SIP address or phone number:" -msgstr "Geef het SIP adres of telefoonnummer in" +msgstr "" #: ../gtk/main.ui.h:33 msgid "Initiate a new call" msgstr "" #: ../gtk/main.ui.h:34 -#, fuzzy msgid "Contacts" -msgstr "Verbinden" +msgstr "" #: ../gtk/main.ui.h:35 msgid "Search" msgstr "" #: ../gtk/main.ui.h:36 -#, fuzzy msgid "Add contacts from directory" -msgstr "Contact informatie" +msgstr "" #: ../gtk/main.ui.h:37 -#, fuzzy msgid "Add contact" -msgstr "Bewerk contactgegevens" +msgstr "" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "Inkomende oproep" +msgstr "" #: ../gtk/main.ui.h:39 -#, fuzzy msgid "My current identity:" -msgstr "SIP-identiteit:" +msgstr "" #: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7 -#, fuzzy msgid "Username" -msgstr "gebruikersnaam:" +msgstr "" #: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8 -#, fuzzy msgid "Password" -msgstr "wachtwoord:" +msgstr "" #: ../gtk/main.ui.h:42 msgid "Internet connection:" msgstr "" #: ../gtk/main.ui.h:43 -#, fuzzy msgid "Automatically log me in" -msgstr "Automatisch een geldige hostnaam raden" +msgstr "" #: ../gtk/main.ui.h:44 ../gtk/password.ui.h:3 msgid "UserID" msgstr "" #: ../gtk/main.ui.h:45 -#, fuzzy msgid "Login information" -msgstr "Contact informatie" +msgstr "" #: ../gtk/main.ui.h:46 -#, fuzzy -msgid "Welcome !" -msgstr "Contactlijst" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -#, fuzzy -msgid "About linphone" -msgstr "linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" msgstr "" #: ../gtk/about.ui.h:4 @@ -1072,9 +1000,8 @@ msgid "" msgstr "" #: ../gtk/contact.ui.h:2 -#, fuzzy msgid "SIP Address" -msgstr "Adres" +msgstr "" #: ../gtk/contact.ui.h:3 msgid "Show this contact presence status" @@ -1085,9 +1012,8 @@ msgid "Allow this contact to see my presence status" msgstr "" #: ../gtk/contact.ui.h:5 -#, fuzzy msgid "Contact information" -msgstr "Contact informatie" +msgstr "" #: ../gtk/log.ui.h:1 msgid "Linphone debug window" @@ -1098,36 +1024,32 @@ msgid "Scroll to end" msgstr "" #: ../gtk/password.ui.h:1 -#, fuzzy msgid "Linphone - Authentication required" -msgstr "Authorisatie gevraagd" +msgstr "" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" msgstr "" #: ../gtk/call_logs.ui.h:1 -#, fuzzy msgid "Call history" -msgstr "Linphone - Oproepgeschiedenis" +msgstr "" #: ../gtk/call_logs.ui.h:2 msgid "Clear all" msgstr "" #: ../gtk/call_logs.ui.h:3 -#, fuzzy msgid "Call back" -msgstr "Oproepgeschiedenis" +msgstr "" #: ../gtk/sip_account.ui.h:1 msgid "Linphone - Configure a SIP account" msgstr "" #: ../gtk/sip_account.ui.h:2 -#, fuzzy msgid "Your SIP identity:" -msgstr "SIP-identiteit:" +msgstr "" #: ../gtk/sip_account.ui.h:3 msgid "Looks like sip:@" @@ -1138,23 +1060,20 @@ msgid "sip:" msgstr "sip:" #: ../gtk/sip_account.ui.h:5 -#, fuzzy msgid "SIP Proxy address:" -msgstr "SIP-proxy:" +msgstr "" #: ../gtk/sip_account.ui.h:6 msgid "Looks like sip:" msgstr "" #: ../gtk/sip_account.ui.h:7 -#, fuzzy msgid "Registration duration (sec):" -msgstr "Registratieperiode:" +msgstr "" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Route (optioneel):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1165,23 +1084,20 @@ msgid "Route (optional):" msgstr "Route (optioneel):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Contactlijst" +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" msgstr "" #: ../gtk/sip_account.ui.h:13 -#, fuzzy msgid "Publish presence information" -msgstr "Toon informatie over aanwezigheid:" +msgstr "" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Aan" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1216,16 +1132,14 @@ msgid "CIF" msgstr "" #: ../gtk/parameters.ui.h:8 -#, fuzzy msgid "Audio codecs" -msgstr "Video codecs" +msgstr "" #: ../gtk/parameters.ui.h:9 -#, fuzzy msgid "Video codecs" -msgstr "Video codecs" +msgstr "" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "" @@ -1258,9 +1172,8 @@ msgid "Use IPv6 instead of IPv4" msgstr "" #: ../gtk/parameters.ui.h:18 -#, fuzzy msgid "Transport" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:19 msgid "Media encryption type" @@ -1291,14 +1204,12 @@ msgid "DSCP fields" msgstr "" #: ../gtk/parameters.ui.h:26 -#, fuzzy msgid "SIP/TCP port" -msgstr "SIP-poort" +msgstr "" #: ../gtk/parameters.ui.h:27 -#, fuzzy msgid "SIP/UDP port" -msgstr "SIP-poort" +msgstr "" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1325,76 +1236,64 @@ msgid "Behind NAT / Firewall (use uPnP)" msgstr "" #: ../gtk/parameters.ui.h:34 -#, fuzzy msgid "Public IP address:" -msgstr "SIP-adres:" +msgstr "" #: ../gtk/parameters.ui.h:35 -#, fuzzy msgid "Stun server:" -msgstr "Geluidsapparaat" +msgstr "" #: ../gtk/parameters.ui.h:36 -#, fuzzy msgid "NAT and Firewall" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:37 -#, fuzzy msgid "Network settings" -msgstr "Netwerk" +msgstr "" #: ../gtk/parameters.ui.h:38 -#, fuzzy msgid "Ring sound:" -msgstr "Belgeluid:" +msgstr "" #: ../gtk/parameters.ui.h:39 msgid "ALSA special device (optional):" msgstr "" #: ../gtk/parameters.ui.h:40 -#, fuzzy msgid "Capture device:" -msgstr "Geluidsapparaat gebruiken:" +msgstr "" #: ../gtk/parameters.ui.h:41 -#, fuzzy msgid "Ring device:" -msgstr "Geluidsapparaat gebruiken:" +msgstr "" #: ../gtk/parameters.ui.h:42 -#, fuzzy msgid "Playback device:" -msgstr "Geluidsapparaat gebruiken:" +msgstr "" #: ../gtk/parameters.ui.h:43 msgid "Enable echo cancellation" msgstr "" #: ../gtk/parameters.ui.h:44 -#, fuzzy msgid "Audio" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:45 -#, fuzzy msgid "Video input device:" -msgstr "Geluidsapparaat" +msgstr "" #: ../gtk/parameters.ui.h:46 msgid "Prefered video resolution:" msgstr "" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Geluidsapparaat" +msgstr "" #: ../gtk/parameters.ui.h:48 -#, fuzzy msgid "Video" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:49 msgid "Multimedia settings" @@ -1409,28 +1308,24 @@ msgid "Your display name (eg: John Doe):" msgstr "" #: ../gtk/parameters.ui.h:52 -#, fuzzy msgid "Your username:" -msgstr "gebruikersnaam:" +msgstr "" #: ../gtk/parameters.ui.h:53 -#, fuzzy msgid "Your resulting SIP address:" -msgstr "Uw SIP-adres:" +msgstr "" #: ../gtk/parameters.ui.h:54 -#, fuzzy msgid "Default identity" -msgstr "SIP-identiteit:" +msgstr "" #: ../gtk/parameters.ui.h:55 msgid "Wizard" msgstr "" #: ../gtk/parameters.ui.h:56 -#, fuzzy msgid "Add" -msgstr "Adres" +msgstr "" #: ../gtk/parameters.ui.h:57 msgid "Edit" @@ -1441,18 +1336,16 @@ msgid "Remove" msgstr "Verwijderen" #: ../gtk/parameters.ui.h:59 -#, fuzzy msgid "Proxy accounts" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:60 msgid "Erase all passwords" msgstr "" #: ../gtk/parameters.ui.h:61 -#, fuzzy msgid "Privacy" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:62 msgid "Manage SIP Accounts" @@ -1467,23 +1360,20 @@ msgid "Disable" msgstr "Uit" #: ../gtk/parameters.ui.h:65 -#, fuzzy msgid "Codecs" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:66 msgid "0 stands for \"unlimited\"" msgstr "" #: ../gtk/parameters.ui.h:67 -#, fuzzy msgid "Upload speed limit in Kbit/sec:" -msgstr "Upload bandbreedte (kbit/sec):" +msgstr "" #: ../gtk/parameters.ui.h:68 -#, fuzzy msgid "Download speed limit in Kbit/sec:" -msgstr "Download bandbreedte (kbit/sec):" +msgstr "" #: ../gtk/parameters.ui.h:69 msgid "Enable adaptive rate control" @@ -1500,84 +1390,68 @@ msgid "Bandwidth control" msgstr "" #: ../gtk/parameters.ui.h:72 -#, fuzzy msgid "Codecs" -msgstr "Codecs" +msgstr "" #: ../gtk/parameters.ui.h:73 -#, fuzzy msgid "Language" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:74 msgid "Show advanced settings" msgstr "" #: ../gtk/parameters.ui.h:75 -#, fuzzy msgid "Level" -msgstr "Contactlijst" +msgstr "" #: ../gtk/parameters.ui.h:76 -#, fuzzy msgid "User interface" -msgstr "gebruikersnaam:" +msgstr "" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Serveradres" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Authorisatie gegevens" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" +msgid "LDAP Account setup" msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Contactlijst" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 -#, fuzzy +#: ../gtk/parameters.ui.h:82 msgid "Done" -msgstr "Weg" +msgstr "" #: ../gtk/buddylookup.ui.h:1 -#, fuzzy msgid "Search contacts in directory" -msgstr "Contact informatie" +msgstr "" #: ../gtk/buddylookup.ui.h:2 msgid "Add to my list" msgstr "" #: ../gtk/buddylookup.ui.h:3 -#, fuzzy msgid "Search somebody" -msgstr "Contactlijst" +msgstr "" #: ../gtk/waiting.ui.h:1 -#, fuzzy msgid "Linphone" -msgstr "linphone" +msgstr "" #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Netwerk" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" @@ -1596,19 +1470,16 @@ msgid "Set DSCP values (in hexadecimal)" msgstr "" #: ../gtk/call_statistics.ui.h:1 -#, fuzzy msgid "Call statistics" -msgstr "Oproepgeschiedenis" +msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" -msgstr "Video codecs" +msgstr "" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" -msgstr "Video codecs" +msgstr "" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1627,9 +1498,8 @@ msgid "Video Media connectivity" msgstr "" #: ../gtk/call_statistics.ui.h:8 -#, fuzzy msgid "Round trip time" -msgstr "Geluidseigenschappen" +msgstr "" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" @@ -1644,9 +1514,8 @@ msgid "RTP profile" msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "Contact informatie" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 msgid "Configure VoIP tunnel" @@ -1668,84 +1537,21 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Netwerk" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" msgstr "" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "Geen informatie beschikbaar" +msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Contactlijst" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1756,14 +1562,12 @@ msgid "Authname" msgstr "" #: ../gtk/ldap.ui.h:11 -#, fuzzy msgid "Realm" -msgstr "gebied:" +msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Contactlijst" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1779,18 +1583,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "Adres" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Contactlijst" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1805,9 +1607,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Contactlijst" +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1838,91 +1639,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Verbinden" +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Gereed." -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Informatie" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Zoekt de lokatie van het telefoonnummer..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Kon dit nummer niet vinden." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Verbinden" -#: ../coreapi/linphonecore.c:2425 -#, fuzzy +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" -msgstr "Kon niet oproepen" +msgstr "" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:2745 -#, fuzzy +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" -msgstr "belt u." +msgstr "" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Verbonden." -#: ../coreapi/linphonecore.c:3220 -#, fuzzy +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" -msgstr "afgebroken" +msgstr "" -#: ../coreapi/linphonecore.c:3412 -#, fuzzy +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" -msgstr "Kon niet oproepen" +msgstr "" -#: ../coreapi/linphonecore.c:3417 -#, fuzzy +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." -msgstr "Kon niet oproepen" +msgstr "" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "STUN adres wordt opgezocht..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1935,789 +1721,214 @@ msgid "Busy" msgstr "Bezet" #: ../coreapi/friend.c:39 -#, fuzzy msgid "Be right back" -msgstr "Kom zo terug" +msgstr "" #: ../coreapi/friend.c:42 msgid "Away" msgstr "Afwezig" #: ../coreapi/friend.c:45 -#, fuzzy msgid "On the phone" -msgstr "Aan de telefoon" +msgstr "" #: ../coreapi/friend.c:48 -#, fuzzy msgid "Out to lunch" -msgstr "Aan het lunchen" +msgstr "" #: ../coreapi/friend.c:51 msgid "Do not disturb" msgstr "Niet storen" #: ../coreapi/friend.c:54 -#, fuzzy msgid "Moved" -msgstr "Codecs" +msgstr "" #: ../coreapi/friend.c:57 msgid "Using another messaging service" msgstr "" #: ../coreapi/friend.c:60 -#, fuzzy msgid "Offline" -msgstr "Aanwezig" +msgstr "" #: ../coreapi/friend.c:63 msgid "Pending" msgstr "" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Informatie" - -#: ../coreapi/friend.c:68 -msgid "Unknown-bug" msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/friend.c:68 +msgid "Unknown status" +msgstr "" + +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1369 -#, fuzzy, c-format +#: ../coreapi/proxy.c:1377 +#, c-format msgid "Could not login as %s" -msgstr "Kon pixmap bestand %s niet vinden" +msgstr "" -#: ../coreapi/callbacks.c:355 -#, fuzzy +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." -msgstr "Externe diensten" +msgstr "" -#: ../coreapi/callbacks.c:373 -#, fuzzy +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." -msgstr "Externe diensten" +msgstr "" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:435 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:475 +#, c-format msgid "Call with %s is paused." -msgstr "Chat met %s" +msgstr "" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:459 -#, fuzzy +#: ../coreapi/callbacks.c:498 msgid "Call resumed." -msgstr "Oproep beeindigd" +msgstr "" -#: ../coreapi/callbacks.c:464 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:502 +#, c-format msgid "Call answered by %s." msgstr "" -"Oproepen of\n" -"beantwoorden" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "" -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Oproep beeindigd." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Gebruiker is bezet." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Gebruiker is tijdelijk niet beschikbaar." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "De gebruiker wenst niet gestoord te worden." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Oproep geweigerd." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 -#, fuzzy +#: ../coreapi/callbacks.c:780 msgid "Redirected" -msgstr "Doorgeschakeld naar %s..." - -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:798 -#, fuzzy +#: ../coreapi/callbacks.c:835 msgid "Call failed." -msgstr "Oproep geannuleerd." +msgstr "" -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Registratie op %s gelukt." -#: ../coreapi/callbacks.c:879 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:914 +#, c-format msgid "Unregistration on %s done." -msgstr "Registratie op %s gelukt." +msgstr "" -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:900 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:935 +#, c-format msgid "Registration on %s failed: %s" -msgstr "Registratie op %s mislukt (time-out)." +msgstr "" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "Authorisatie gegevens" +msgstr "" -#: ../coreapi/linphonecall.c:2932 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:3020 +#, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." -msgstr[0] "U heeft %i oproep(en) gemist." -msgstr[1] "U heeft %i oproep(en) gemist." - -#~ msgid "aborted" -#~ msgstr "afgebroken" - -#~ msgid "completed" -#~ msgstr "voltooid" - -#~ msgid "missed" -#~ msgstr "gemist" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s op %s\n" -#~ "Van: %s\n" -#~ "Aan: %s\n" -#~ "Status: %s\n" -#~ "Tijdsduur: %i mins %i secs\n" - -#~ msgid "Outgoing call" -#~ msgstr "Uitgaande oproep" - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Slecht geformuleerd SIP-adres. Een SIP-adres ziet er uit als sip:" -#~ "gebruikersnaam@domeinnaam" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Uw computer maakt schijnbaar gebruik van ALSA geluidsdrivers.\n" -#~ "Dit is de beste keuze. Maar de pcm oss emulatie module mist\n" -#~ "en linphone heeft deze nodig. Geeft u alstublieft het commando\n" -#~ "'modprobe snd-pcm-oss' als root om de module te laden." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Uw computer maakt schijnbaar gebruik van ALSA geluidsdrivers.\n" -#~ "Dit is de beste keuze. Maar de mixer oss emulatie module mist\n" -#~ "en linphone heeft deze nodig. Geeft u alstublieft het commando\n" -#~ "'modprobe snd-mixer-oss' als root om de module te laden." - -#~ msgid "Chat with %s" -#~ msgstr "Chat met %s" - -#, fuzzy -#~ msgid "Choosing a username" -#~ msgstr "gebruikersnaam:" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "Aan" - -#, fuzzy -#~ msgid "Unmute" -#~ msgstr "Ongelimiteerd" - -#, fuzzy -#~ msgid "Contact list" -#~ msgstr "Contactlijst" - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "Audio codecs" - -#, fuzzy -#~ msgid "Audio only" -#~ msgstr "Audio codecs" - -#, fuzzy -#~ msgid "Duration:" -#~ msgstr "Informatie" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "Linphone - Oproepgeschiedenis" - -#, fuzzy -#~ msgid "_Linphone" -#~ msgstr "linphone" - -#, fuzzy -#~ msgid "gtk-cancel" -#~ msgstr "Verbonden." - -#, fuzzy -#~ msgid "gtk-ok" -#~ msgstr "Verwijderen" - -#, fuzzy -#~ msgid "gtk-close" -#~ msgstr "Verbonden." - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "Uw machine lijkt verbonden te zijn met een IPv6 netwerk. Standaard " -#~ "gebruikt linphone altijd IPv4. Wijzig uw configuratie wanneer u IPv6 wilt " -#~ "gebruiken." - -#, fuzzy -#~ msgid "_Modes" -#~ msgstr "Codecs" - -#~ msgid "Accept" -#~ msgstr "Accepteren" - -#, fuzzy -#~ msgid "Incoming call from" -#~ msgstr "Inkomende oproep" - -#, fuzzy -#~ msgid "Linphone - Incoming call" -#~ msgstr "Inkomende oproep" - -#, fuzzy -#~ msgid "" -#~ "Audio codecs\n" -#~ "Video codecs" -#~ msgstr "Audio en video codecs" - -#~ msgid "Sorry, having multiple simultaneous calls is not supported yet !" -#~ msgstr "" -#~ "Helaas, meerdere gelijktijdige gesprekken wordt nog niet ondersteund!" - -#~ msgid "Could not reach destination." -#~ msgstr "Kon bestemming niet bereiken." - -#~ msgid "Request Cancelled." -#~ msgstr "Verzoek geannuleerd." - -#~ msgid "Bad request" -#~ msgstr "Slecht geformuleerd verzoek" - -#~ msgid "User cannot be found at given address." -#~ msgstr "Gebruiker kan niet worden gevonden bij opgegeven adres." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "De externe gebruiker ondersteunt geen van de voorgestelde codecs." - -#~ msgid "Timeout." -#~ msgstr "Time-out." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Externe machine is gevonden, maar verbinding is geweigerd." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "De gebruiker is op dit moment niet bereikbaar, maar hij nodigt u uit om\n" -#~ "op de volgende, alternatieve, manier contact met hem op te nemen:" - -#~ msgid "No nat/firewall address supplied !" -#~ msgstr "Geen NAT/firewall adres opgegeven" - -#~ msgid "Invalid nat address '%s' : %s" -#~ msgstr "Ongeldig NAT adres '%s' : %s" - -#~ msgid "Gone" -#~ msgstr "Weg" - -#~ msgid "Waiting for Approval" -#~ msgstr "Wachten op accoord" - -#~ msgid "Be Right Back" -#~ msgstr "Kom zo terug" - -#~ msgid "On The Phone" -#~ msgstr "Aan de telefoon" - -#~ msgid "Out To Lunch" -#~ msgstr "Aan het lunchen" - -#~ msgid "Closed" -#~ msgstr "Gesloten" - -#, fuzzy -#~ msgid "_View" -#~ msgstr "Video" - -#, fuzzy -#~ msgid "_Properties" -#~ msgstr "RTP-eigenschappen" - -#, fuzzy -#~ msgid "Show logs" -#~ msgstr "Oproepen weergeven" - -#, fuzzy -#~ msgid "_About" -#~ msgstr "Account" - -#, fuzzy -#~ msgid "Proxy in use" -#~ msgstr "Te gebruiken proxy:" - -#~ msgid "Sound" -#~ msgstr "Geluid" - -#, fuzzy -#~ msgid "Proxy accounts" -#~ msgstr "Te gebruiken proxy:" - -#~ msgid "Go" -#~ msgstr "Ga" - -#~ msgid "Exit" -#~ msgstr "Einde" - -#~ msgid "Shows the address book" -#~ msgstr "Het adresboek weergeven" - -#~ msgid "..." -#~ msgstr "..." - -#~ msgid "" -#~ "Hangup\n" -#~ "or refuse" -#~ msgstr "" -#~ "Ophangen\n" -#~ "of weigeren" - -#~ msgid "Or chat !" -#~ msgstr "Of chat!" - -#~ msgid "Show more..." -#~ msgstr "Meer weergeven..." - -#~ msgid "Playback level:" -#~ msgstr "Geluidssterkte afspelen:" - -#~ msgid "Recording level:" -#~ msgstr "Geluidssterkte opname:" - -#, fuzzy -#~ msgid "Ring level:" -#~ msgstr "Geluidssterkte opname:" - -#~ msgid "Controls" -#~ msgstr "Functies" - -#~ msgid "Reachable" -#~ msgstr "Bereikbaar" - -#~ msgid "Busy, I'll be back in " -#~ msgstr "Bezig; ik ben terug over " - -#~ msgid "The other party will be informed that you'll be back in X minutes" -#~ msgstr "" -#~ "De andere partij zal worden geïnformeerd dat u over X minuten terug bent" - -#~ msgid "mn" -#~ msgstr "min" - -#~ msgid "Moved temporarily" -#~ msgstr "Tijdelijk verplaatst" - -#~ msgid "Alternative service" -#~ msgstr "Alternatieve dienst" - -#~ msgid "URL:" -#~ msgstr "URL:" - -#~ msgid "Presence" -#~ msgstr "Aanwezigheid" - -#~ msgid "Press digits to send DTMFs." -#~ msgstr "Druk op de cijfers om DTMF's te sturen" - -#~ msgid "" -#~ " 3\n" -#~ "def" -#~ msgstr "" -#~ " 3\n" -#~ "def" - -#~ msgid "" -#~ " 2\n" -#~ "abc" -#~ msgstr "" -#~ " 2\n" -#~ "abc" - -#~ msgid "" -#~ " 4\n" -#~ "ghi" -#~ msgstr "" -#~ " 4\n" -#~ "ghi" - -#~ msgid "" -#~ " 5\n" -#~ "jkl" -#~ msgstr "" -#~ " 5\n" -#~ "jkl" - -#~ msgid "" -#~ " 6\n" -#~ "mno" -#~ msgstr "" -#~ " 6\n" -#~ "mno" - -#~ msgid "" -#~ " 7\n" -#~ "pqrs" -#~ msgstr "" -#~ " 7\n" -#~ "pqrs" - -#~ msgid "" -#~ " 8\n" -#~ "tuv" -#~ msgstr "" -#~ " 8\n" -#~ "tuv" - -#~ msgid "" -#~ " 9\n" -#~ "wxyz" -#~ msgstr "" -#~ " 9\n" -#~ "wxyz" - -#~ msgid "DTMF" -#~ msgstr "DTMF" - -#~ msgid "My online friends" -#~ msgstr "Mijn online vrienden" - -#~ msgid "" -#~ "C: 2001\n" -#~ "Made in Old Europe" -#~ msgstr "" -#~ "C: 2001\n" -#~ "Gemaakt in antiek Europa" - -#~ msgid "" -#~ "Linphone is a web-phone.\n" -#~ "It is compatible with SIP and RTP protocols." -#~ msgstr "" -#~ "Linphone is een webtelefoon.\n" -#~ "Het werkt met de SIP- en RTP-protocollen." - -#~ msgid "http://www.linphone.org" -#~ msgstr "http://www.linphone.org" - -#~ msgid "Use IPv6 network (if available)" -#~ msgstr "Gebruik IPv6 netwerk (wanneer het beschikbaar is)" - -#~ msgid "" -#~ "Toggle this if you are on an ipv6 network and you wish linphone to use it." -#~ msgstr "" -#~ "Wijzig dit wanneer u op een IPv6 netwerk zit en linphone daarop wilt " -#~ "gebruiken." - -#~ msgid "Global" -#~ msgstr "Globaal" - -#~ msgid "" -#~ "These options is only for users in a private network, behind a gateway. " -#~ "If you are not in this situation, then leave this empty." -#~ msgstr "" -#~ "Deze optie is alleen voor gebruikers in een lokaal netwerk, achter een " -#~ "gateway: Wanneer u niet in deze situatie zit, laat dit dan leeg." - -#~ msgid "No firewall" -#~ msgstr "Geen firewall" - -#~ msgid "Use this STUN server to guess firewall address :" -#~ msgstr "Gebruik deze STUN server om het firewall adres te achterhalen" - -#~ msgid "Specify firewall address manually:" -#~ msgstr "Geef het firewall adres handmatig op" - -#~ msgid "NAT traversal options (experimental)" -#~ msgstr "NAT-doorstuur opties (experimenteel)" - -#~ msgid "Number of buffered miliseconds (jitter compensation):" -#~ msgstr "Aantal gebufferde miliseconden (jitter compensatie):" - -#~ msgid "RTP port used for audio:" -#~ msgstr "RTP-poort voor geluid:" - -#~ msgid "Use SIP INFO message instead of RTP rfc2833 for DTMF transmitting" -#~ msgstr "" -#~ "Gebruik SIP INFO bericht in plaats van RTP rfc2833 voor DTMF berichten" - -#~ msgid "RTP-RFC2833 is the recommended way." -#~ msgstr "RTP-RFC2833 is de aanbevolen manier." - -#~ msgid "Other" -#~ msgstr "Overige" - -#~ msgid "micro" -#~ msgstr "microfoon" - -#~ msgid "Enable echo-canceler (cancels the echo heard by the remote party)" -#~ msgstr "" -#~ "Activeer de echo-onderdrukking (onderdrukt de echo die de andere partij " -#~ "hoort)" - -#~ msgid "Choose file" -#~ msgstr "Kies bestand" - -#~ msgid "Listen" -#~ msgstr "Luisteren" - -#~ msgid "Run sip user agent on port:" -#~ msgstr "Start SIP gebruikerssysteem op poort:" - -#~ msgid "It is strongly recommended to use port 5060." -#~ msgstr "Het wordt sterk aangeraden om poort 5060 te gebruiken." - -#~ msgid "@" -#~ msgstr "@" - -#~ msgid "Identity" -#~ msgstr "Identiteit" - -#~ msgid "Add proxy/registrar" -#~ msgstr "Voeg proxy/registratieserver toe" - -#~ msgid "Clear all stored authentication information (username,password...)" -#~ msgstr "" -#~ "Schoon alle opgeslagen authorisatie gegevens op (gebruikersnaam, " -#~ "wachtwoord...)" - -#~ msgid "List of audio codecs, in order of preference:" -#~ msgstr "Lijst met audio codecs, in volgorde van voorkeur:" - -#~ msgid "" -#~ "Note: Codecs in red are not usable regarding to your connection type to " -#~ "the internet." -#~ msgstr "" -#~ "Opmerking: Met rood weergegeven codecs zijn niet bruikbaar vanwege het " -#~ "soort internetverbinding dat u heeft" - -#~ msgid "Codec information" -#~ msgstr "Codec informatie" - -#~ msgid "Address Book" -#~ msgstr "Adresboek" - -#~ msgid "Select" -#~ msgstr "Kiezen" - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you to contact him " -#~ "using the following alternate ressource:" -#~ msgstr "" -#~ "De gebruiker is op dit moment niet bereikbaar, maar hij nodigt u uit op " -#~ "de volgende, alternatieve, manier contact met hem op te nemen:" - -#~ msgid "None." -#~ msgstr "Geen." - -#~ msgid "Send registration:" -#~ msgstr "Verstruur registratie:" - -#~ msgid "Name:" -#~ msgstr "Naam:" - -#~ msgid "Subscribe policy:" -#~ msgstr "Aanmeldbeleid:" - -#~ msgid "Send subscription (see person's online status)" -#~ msgstr "Verstruur aanmelding (bekijk de online status van een persoon)" - -#~ msgid "New incoming subscription" -#~ msgstr "Nieuwe inkomende aanmelding" - -#~ msgid "You have received a new subscription..." -#~ msgstr "U heeft een nieuwe aanmelding ontvangen..." - -#~ msgid "Refuse" -#~ msgstr "Weigeren" - -#~ msgid "Authentication required for realm" -#~ msgstr "Authorisatie benodigd voor gebied" - -#~ msgid "userid:" -#~ msgstr "gebruikersID:" - -#~ msgid "Text:" -#~ msgstr "Tekst:" - -#~ msgid "The caller asks for resource reservation. Do you agree ?" -#~ msgstr "De beller vraagt om reservering van bronnen. Gaat u accoord?" - -#~ msgid "" -#~ "The caller doesn't use resource reservation. \t\t\t\t\tDo you wish to " -#~ "continue anyway ?" -#~ msgstr "" -#~ "De beller gebruikt geen bron reservatie. \t\t\t\t\tWilt u toch doorgaan?" - -#~ msgid "linphone - receiving call from %s" -#~ msgstr "Linphone - binnenkomend gesprek van %s" - -#~ msgid "" -#~ "You have received a subscription from %s.This means that this person " -#~ "wishes to be notified of your presence information (online, busy, " -#~ "away...).\n" -#~ "Do you agree ?" -#~ msgstr "" -#~ "U heeft een aanmelding ontvangen van %s. Dit betekent dat deze persoon " -#~ "een melding wil ontvangen wat betreft uw status (online, bezig, weg...).\n" -#~ "Gaat u accoord?" - -#~ msgid "Authentication required for realm %s" -#~ msgstr "Authorisatie benodigd voor gebied %s" - -#~ msgid "Wait" -#~ msgstr "Wachten" - -#~ msgid "Deny" -#~ msgstr "Weigeren" - -#~ msgid "Bad sip address: a sip address looks like sip:user@domain" -#~ msgstr "" -#~ "Slecht geformuleerd SIP-adres. Een SIP-adres ziet er uit als sip:" -#~ "gebruikersnaam@domeinnaam" - -#~ msgid "Stun lookup done..." -#~ msgstr "STUN adres gevonden..." - -#~ msgid "User manual" -#~ msgstr "Handleiding" - -#~ msgid "Ring sound selection" -#~ msgstr "Belgeluid keuze" - -#~ msgid "Communication ended." -#~ msgstr "Communicatie beëindigd." - -#~ msgid "Firewall 's external ip address (in dot notations):" -#~ msgstr "Extern IP adres van de firewall (in x.x.x.x notatie):" - -#~ msgid "Index" -#~ msgstr "Index" - -#~ msgid "28k modem" -#~ msgstr "28k modem" - -#~ msgid "56k modem" -#~ msgstr "56k modem" - -#~ msgid "64k modem (numeris)" -#~ msgstr "64k modem (ISDN)" - -#~ msgid "ADSL or Cable modem" -#~ msgstr "ADSL- of kabelmodem" - -#~ msgid "Ethernet or equivalent" -#~ msgstr "Ethernet of vergelijkbaar" - -#~ msgid "Connection type:" -#~ msgstr "Soort verbinding:" - -#~ msgid "" -#~ "Linphone could not open audio device %s. Check if your sound card is " -#~ "fully configured and working." -#~ msgstr "" -#~ "Linphone kon het geluidsapparaat %s niet openen. Controleer of uw " -#~ "geluidskaart goed is ingesteld en werkt." - -#~ msgid "Type here the sip address of the person you want to call." -#~ msgstr "Geef hier het SIP-adres op van de persoon die u wilt bellen." - -#~ msgid "" -#~ "Release or\n" -#~ "Refuse" -#~ msgstr "" -#~ "Ophangen\n" -#~ "of weigeren" - -#~ msgid "%s. Retry after %i minute(s)." -#~ msgstr "%s. Opnieuw proberen na %i minu(u)t(en)." +msgstr[0] "" +msgstr[1] "" + +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/pl.po b/po/pl.po index 62e06d793..e2bcc91a4 100644 --- a/po/pl.po +++ b/po/pl.po @@ -1,19 +1,23 @@ -# SIP Telephony Application. -# Copyright (C) 2001, 2002 Free Software Foundation, Inc. -# Simon Morlat , 2001. -# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: linphone 0.7.1\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2003-08-22 12:50+0200\n" -"Last-Translator: Robert Nasiadek \n" -"Language-Team: Polski \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Polish (http://www.transifex.com/projects/p/linphone-gtk/" +"language/pl/)\n" +"Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" -"Content-Transfer-Encoding: 8-bit\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -26,27 +30,25 @@ msgid "Send text to %s" msgstr "" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "Połączenie odwołane." +msgstr "" #: ../gtk/calllogs.c:320 msgid "Missed" msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "linia" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -54,6 +56,7 @@ msgid "%i minute" msgid_plural "%i minutes" msgstr[0] "" msgstr[1] "" +msgstr[2] "" #: ../gtk/calllogs.c:332 #, c-format @@ -61,11 +64,7 @@ msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" - -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" +msgstr[2] "" #: ../gtk/calllogs.c:337 #, c-format @@ -74,11 +73,9 @@ msgid "" "%s\t%s\t" msgstr "" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -94,7 +91,7 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Nie można znaleźć pixmapy: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "" @@ -129,20 +126,14 @@ msgid "" msgstr "" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Informacja" +msgstr "" #: ../gtk/main.c:163 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -151,97 +142,90 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1260 +#: ../gtk/main.c:1162 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "Połączenie odwołane." +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 -#, fuzzy +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" -msgstr "Rozmowa odrzucona." +msgstr "" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 -#, fuzzy +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" -msgstr "linia" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "Połączenie odwołane." +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "Dzwonie do " +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "" #: ../gtk/friendlist.c:505 -#, fuzzy msgid "Add to addressbook" -msgstr "Książka adresowa" +msgstr "" #: ../gtk/friendlist.c:691 -#, fuzzy msgid "Presence status" -msgstr "Obecność" +msgstr "" #: ../gtk/friendlist.c:709 ../gtk/propertybox.c:552 ../gtk/contact.ui.h:1 msgid "Name" msgstr "Nazwa" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "Połączenie odwołane." +msgstr "" #: ../gtk/friendlist.c:726 msgid "Chat" @@ -253,9 +237,9 @@ msgid "Search in %s directory" msgstr "" #: ../gtk/friendlist.c:976 -#, fuzzy, c-format +#, c-format msgid "Edit contact '%s'" -msgstr "(Brak informacji kontaktowych !)" +msgstr "" #: ../gtk/friendlist.c:977 #, c-format @@ -281,9 +265,8 @@ msgid "Status" msgstr "Status" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Min przepustowość (kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -301,93 +284,92 @@ msgstr "Wyłączone" msgid "Account" msgstr "" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -#: ../gtk/propertybox.c:1225 -#, fuzzy +#: ../gtk/propertybox.c:1234 msgid "None" -msgstr "Brak." +msgstr "" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -411,14 +393,12 @@ msgid "Error communicating with server." msgstr "" #: ../gtk/buddylookup.c:164 -#, fuzzy msgid "Connecting..." -msgstr "Lącze" +msgstr "" #: ../gtk/buddylookup.c:168 -#, fuzzy msgid "Connected" -msgstr "Połączony" +msgstr "" #: ../gtk/buddylookup.c:172 msgid "Receiving data..." @@ -430,10 +410,11 @@ msgid "Found %i contact" msgid_plural "Found %i contacts" msgstr[0] "" msgstr[1] "" +msgstr[2] "" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" @@ -458,28 +439,24 @@ msgid "Enter your linphone.org username" msgstr "" #: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4 -#, fuzzy msgid "Username:" -msgstr "Podręcznik" +msgstr "" #: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 -#, fuzzy msgid "Password:" -msgstr "Twoje hasło:" +msgstr "" #: ../gtk/setupwizard.c:124 msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "Podręcznik" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "Twoje hasło:" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -494,14 +471,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "Podręcznik" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "Twoje hasło:" +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -532,46 +507,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "Połączenie odwołane." +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -587,9 +562,8 @@ msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "Połączenie odwołane." +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -616,18 +590,16 @@ msgid "uPnP in progress" msgstr "" #: ../gtk/incall_view.c:243 -#, fuzzy msgid "uPnp not available" -msgstr "Brak informacji" +msgstr "" #: ../gtk/incall_view.c:245 msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "Połączenie odwołane." +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -650,118 +622,107 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 -#, fuzzy +#: ../gtk/incall_view.c:511 msgid "Calling..." -msgstr "Dzwonie do " +msgstr "" -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "" -#: ../gtk/incall_view.c:515 -#, fuzzy +#: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "Dzwonie do " +msgstr "" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 -#, fuzzy +#: ../gtk/incall_view.c:722 msgid "In call" -msgstr "Dzwonie do " - -#: ../gtk/incall_view.c:738 -#, fuzzy -msgid "Paused call" -msgstr "Dzwonie do " - -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" msgstr "" -#: ../gtk/incall_view.c:772 -#, fuzzy -msgid "Call ended." -msgstr "Rozmowa odrzucona." +#: ../gtk/incall_view.c:758 +msgid "Paused call" +msgstr "" -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:794 +msgid "Call ended." +msgstr "" + +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "Połączenie odwołane." +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "" @@ -798,28 +759,25 @@ msgstr "" #: ../gtk/audio_assistant.c:318 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Użyj tego urządzenia dźwięku:" +msgstr "" #: ../gtk/audio_assistant.c:329 -#, fuzzy msgid "Recorded volume" -msgstr "Źródło nagrywania:" +msgstr "" #: ../gtk/audio_assistant.c:333 msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Użyj tego urządzenia dźwięku:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -858,14 +816,12 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "Rozmowa odrzucona." +msgstr "" #: ../gtk/main.ui.h:2 -#, fuzzy msgid "Send" -msgstr "Dźwięk" +msgstr "" #: ../gtk/main.ui.h:3 msgid "End conference" @@ -888,14 +844,12 @@ msgid "Transfer" msgstr "" #: ../gtk/main.ui.h:14 -#, fuzzy msgid "In call" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/main.ui.h:15 -#, fuzzy msgid "Duration" -msgstr "Informacja" +msgstr "" #: ../gtk/main.ui.h:16 msgid "Call quality rating" @@ -906,9 +860,8 @@ msgid "All users" msgstr "" #: ../gtk/main.ui.h:18 -#, fuzzy msgid "Online users" -msgstr "linia" +msgstr "" #: ../gtk/main.ui.h:19 msgid "ADSL" @@ -919,27 +872,24 @@ msgid "Fiber Channel" msgstr "" #: ../gtk/main.ui.h:21 -#, fuzzy msgid "Default" -msgstr "Tożsamość" +msgstr "" #: ../gtk/main.ui.h:22 msgid "_Options" msgstr "" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Informacja" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" msgstr "" #: ../gtk/main.ui.h:25 -#, fuzzy msgid "Enable self-view" -msgstr "Włączone" +msgstr "" #: ../gtk/main.ui.h:26 msgid "_Help" @@ -962,52 +912,44 @@ msgid "Account assistant" msgstr "" #: ../gtk/main.ui.h:32 -#, fuzzy msgid "SIP address or phone number:" -msgstr "Adres serwera rejestracji sip" +msgstr "" #: ../gtk/main.ui.h:33 msgid "Initiate a new call" msgstr "" #: ../gtk/main.ui.h:34 -#, fuzzy msgid "Contacts" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/main.ui.h:35 msgid "Search" msgstr "" #: ../gtk/main.ui.h:36 -#, fuzzy msgid "Add contacts from directory" -msgstr "Informacje o kodeku" +msgstr "" #: ../gtk/main.ui.h:37 -#, fuzzy msgid "Add contact" -msgstr "(Brak informacji kontaktowych !)" +msgstr "" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/main.ui.h:39 -#, fuzzy msgid "My current identity:" -msgstr "Tożsamość" +msgstr "" #: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7 -#, fuzzy msgid "Username" -msgstr "Podręcznik" +msgstr "" #: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8 -#, fuzzy msgid "Password" -msgstr "Twoje hasło:" +msgstr "" #: ../gtk/main.ui.h:42 msgid "Internet connection:" @@ -1022,26 +964,23 @@ msgid "UserID" msgstr "" #: ../gtk/main.ui.h:45 -#, fuzzy msgid "Login information" -msgstr "Informacje o kodeku" +msgstr "" #: ../gtk/main.ui.h:46 -#, fuzzy -msgid "Welcome !" -msgstr "Dzwonie do " +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -#, fuzzy -msgid "About linphone" -msgstr "linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" msgstr "" #: ../gtk/about.ui.h:4 @@ -1065,9 +1004,8 @@ msgid "" msgstr "" #: ../gtk/contact.ui.h:2 -#, fuzzy msgid "SIP Address" -msgstr "Adres" +msgstr "" #: ../gtk/contact.ui.h:3 msgid "Show this contact presence status" @@ -1078,9 +1016,8 @@ msgid "Allow this contact to see my presence status" msgstr "" #: ../gtk/contact.ui.h:5 -#, fuzzy msgid "Contact information" -msgstr "Informacje o kodeku" +msgstr "" #: ../gtk/log.ui.h:1 msgid "Linphone debug window" @@ -1091,9 +1028,8 @@ msgid "Scroll to end" msgstr "" #: ../gtk/password.ui.h:1 -#, fuzzy msgid "Linphone - Authentication required" -msgstr "Informacje o kodeku" +msgstr "" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" @@ -1116,9 +1052,8 @@ msgid "Linphone - Configure a SIP account" msgstr "" #: ../gtk/sip_account.ui.h:2 -#, fuzzy msgid "Your SIP identity:" -msgstr "Tożsamość" +msgstr "" #: ../gtk/sip_account.ui.h:3 msgid "Looks like sip:@" @@ -1129,18 +1064,16 @@ msgid "sip:" msgstr "sip:" #: ../gtk/sip_account.ui.h:5 -#, fuzzy msgid "SIP Proxy address:" -msgstr "Adres sip:" +msgstr "" #: ../gtk/sip_account.ui.h:6 msgid "Looks like sip:" msgstr "" #: ../gtk/sip_account.ui.h:7 -#, fuzzy msgid "Registration duration (sec):" -msgstr "Rejestracja powiodła się." +msgstr "" #: ../gtk/sip_account.ui.h:8 msgid "Contact params (optional):" @@ -1155,23 +1088,20 @@ msgid "Route (optional):" msgstr "" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" msgstr "" #: ../gtk/sip_account.ui.h:13 -#, fuzzy msgid "Publish presence information" -msgstr "Informacje o kodeku" +msgstr "" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Włączony" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1206,16 +1136,14 @@ msgid "CIF" msgstr "" #: ../gtk/parameters.ui.h:8 -#, fuzzy msgid "Audio codecs" -msgstr "Kodeki audio" +msgstr "" #: ../gtk/parameters.ui.h:9 -#, fuzzy msgid "Video codecs" -msgstr "Kodeki audio" +msgstr "" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "" @@ -1248,9 +1176,8 @@ msgid "Use IPv6 instead of IPv4" msgstr "" #: ../gtk/parameters.ui.h:18 -#, fuzzy msgid "Transport" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:19 msgid "Media encryption type" @@ -1281,14 +1208,12 @@ msgid "DSCP fields" msgstr "" #: ../gtk/parameters.ui.h:26 -#, fuzzy msgid "SIP/TCP port" -msgstr "Port SIP" +msgstr "" #: ../gtk/parameters.ui.h:27 -#, fuzzy msgid "SIP/UDP port" -msgstr "Port SIP" +msgstr "" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1315,76 +1240,64 @@ msgid "Behind NAT / Firewall (use uPnP)" msgstr "" #: ../gtk/parameters.ui.h:34 -#, fuzzy msgid "Public IP address:" -msgstr "Adres sip:" +msgstr "" #: ../gtk/parameters.ui.h:35 -#, fuzzy msgid "Stun server:" -msgstr "Dźwięk" +msgstr "" #: ../gtk/parameters.ui.h:36 -#, fuzzy msgid "NAT and Firewall" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:37 -#, fuzzy msgid "Network settings" -msgstr "Sieć" +msgstr "" #: ../gtk/parameters.ui.h:38 -#, fuzzy msgid "Ring sound:" -msgstr "Źródło nagrywania:" +msgstr "" #: ../gtk/parameters.ui.h:39 msgid "ALSA special device (optional):" msgstr "" #: ../gtk/parameters.ui.h:40 -#, fuzzy msgid "Capture device:" -msgstr "Użyj tego urządzenia dźwięku:" +msgstr "" #: ../gtk/parameters.ui.h:41 -#, fuzzy msgid "Ring device:" -msgstr "Użyj tego urządzenia dźwięku:" +msgstr "" #: ../gtk/parameters.ui.h:42 -#, fuzzy msgid "Playback device:" -msgstr "Użyj tego urządzenia dźwięku:" +msgstr "" #: ../gtk/parameters.ui.h:43 msgid "Enable echo cancellation" msgstr "" #: ../gtk/parameters.ui.h:44 -#, fuzzy msgid "Audio" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:45 -#, fuzzy msgid "Video input device:" -msgstr "Dźwięk" +msgstr "" #: ../gtk/parameters.ui.h:46 msgid "Prefered video resolution:" msgstr "" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Dźwięk" +msgstr "" #: ../gtk/parameters.ui.h:48 -#, fuzzy msgid "Video" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:49 msgid "Multimedia settings" @@ -1399,28 +1312,24 @@ msgid "Your display name (eg: John Doe):" msgstr "" #: ../gtk/parameters.ui.h:52 -#, fuzzy msgid "Your username:" -msgstr "Podręcznik" +msgstr "" #: ../gtk/parameters.ui.h:53 -#, fuzzy msgid "Your resulting SIP address:" -msgstr "Twój adres sip:" +msgstr "" #: ../gtk/parameters.ui.h:54 -#, fuzzy msgid "Default identity" -msgstr "Tożsamość" +msgstr "" #: ../gtk/parameters.ui.h:55 msgid "Wizard" msgstr "" #: ../gtk/parameters.ui.h:56 -#, fuzzy msgid "Add" -msgstr "Adres" +msgstr "" #: ../gtk/parameters.ui.h:57 msgid "Edit" @@ -1431,18 +1340,16 @@ msgid "Remove" msgstr "" #: ../gtk/parameters.ui.h:59 -#, fuzzy msgid "Proxy accounts" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:60 msgid "Erase all passwords" msgstr "" #: ../gtk/parameters.ui.h:61 -#, fuzzy msgid "Privacy" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:62 msgid "Manage SIP Accounts" @@ -1457,9 +1364,8 @@ msgid "Disable" msgstr "Wyłącz" #: ../gtk/parameters.ui.h:65 -#, fuzzy msgid "Codecs" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:66 msgid "0 stands for \"unlimited\"" @@ -1488,84 +1394,68 @@ msgid "Bandwidth control" msgstr "" #: ../gtk/parameters.ui.h:72 -#, fuzzy msgid "Codecs" -msgstr "Kodeki" +msgstr "" #: ../gtk/parameters.ui.h:73 -#, fuzzy msgid "Language" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:74 msgid "Show advanced settings" msgstr "" #: ../gtk/parameters.ui.h:75 -#, fuzzy msgid "Level" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/parameters.ui.h:76 -#, fuzzy msgid "User interface" -msgstr "Podręcznik" +msgstr "" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Adres serwera:" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Informacje o kodeku" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" +msgid "LDAP Account setup" msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Dzwonie do " - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 -#, fuzzy +#: ../gtk/parameters.ui.h:82 msgid "Done" -msgstr "Brak." +msgstr "" #: ../gtk/buddylookup.ui.h:1 -#, fuzzy msgid "Search contacts in directory" -msgstr "Informacje o kodeku" +msgstr "" #: ../gtk/buddylookup.ui.h:2 msgid "Add to my list" msgstr "" #: ../gtk/buddylookup.ui.h:3 -#, fuzzy msgid "Search somebody" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/waiting.ui.h:1 -#, fuzzy msgid "Linphone" -msgstr "linphone" +msgstr "" #: ../gtk/waiting.ui.h:2 msgid "Please wait" msgstr "" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Sieć" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" @@ -1588,14 +1478,12 @@ msgid "Call statistics" msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" -msgstr "Kodeki audio" +msgstr "" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" -msgstr "Kodeki audio" +msgstr "" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1614,9 +1502,8 @@ msgid "Video Media connectivity" msgstr "" #: ../gtk/call_statistics.ui.h:8 -#, fuzzy msgid "Round trip time" -msgstr "Właściwości dźwięku" +msgstr "" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" @@ -1631,9 +1518,8 @@ msgid "RTP profile" msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "Informacje o kodeku" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 msgid "Configure VoIP tunnel" @@ -1655,84 +1541,21 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Sieć" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" msgstr "" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "Brak informacji" +msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1747,9 +1570,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1765,18 +1587,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "Adres" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1791,9 +1611,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Dzwonie do " +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1824,98 +1643,82 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Lącze" +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 -#, fuzzy +#: ../coreapi/linphonecore.c:1510 msgid "Ready" -msgstr "Gotowy." +msgstr "" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Informacja" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "" -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "" #. must be known at that time -#: ../coreapi/linphonecore.c:2418 -#, fuzzy +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" -msgstr "Dzwonie do " +msgstr "" -#: ../coreapi/linphonecore.c:2425 -#, fuzzy +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" -msgstr "Nie można znaleźć pixmapy: %s" +msgstr "" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:2745 -#, fuzzy +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" -msgstr "dzwoni do Ciebie." +msgstr "" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Połączony" -#: ../coreapi/linphonecore.c:3220 -#, fuzzy +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" -msgstr "Połączenie odwołane." +msgstr "" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "" -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" #: ../coreapi/friend.c:33 -#, fuzzy msgid "Online" -msgstr "linia" +msgstr "" #: ../coreapi/friend.c:36 msgid "Busy" @@ -1930,9 +1733,8 @@ msgid "Away" msgstr "Zajęty" #: ../coreapi/friend.c:45 -#, fuzzy msgid "On the phone" -msgstr "linphone" +msgstr "" #: ../coreapi/friend.c:48 msgid "Out to lunch" @@ -1943,507 +1745,195 @@ msgid "Do not disturb" msgstr "Nie przeszkadzać" #: ../coreapi/friend.c:54 -#, fuzzy msgid "Moved" -msgstr "Kodeki" +msgstr "" #: ../coreapi/friend.c:57 msgid "Using another messaging service" msgstr "" #: ../coreapi/friend.c:60 -#, fuzzy msgid "Offline" -msgstr "linia" +msgstr "" #: ../coreapi/friend.c:63 msgid "Pending" msgstr "" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Informacja" - -#: ../coreapi/friend.c:68 -msgid "Unknown-bug" msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/friend.c:68 +msgid "Unknown status" +msgstr "" + +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1369 -#, fuzzy, c-format +#: ../coreapi/proxy.c:1377 +#, c-format msgid "Could not login as %s" -msgstr "Nie można znaleźć pixmapy: %s" +msgstr "" -#: ../coreapi/callbacks.c:355 -#, fuzzy +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." -msgstr "Rejestruje..." +msgstr "" -#: ../coreapi/callbacks.c:373 -#, fuzzy +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." -msgstr "Rejestruje..." +msgstr "" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:459 -#, fuzzy +#: ../coreapi/callbacks.c:498 msgid "Call resumed." -msgstr "Rozmowa odrzucona." +msgstr "" -#: ../coreapi/callbacks.c:464 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:502 +#, c-format msgid "Call answered by %s." msgstr "" -"Zadzwoń lub\n" -"Odpowiedz" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "" -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:658 -#, fuzzy +#: ../coreapi/callbacks.c:705 msgid "Call terminated." -msgstr "Rozmowa odrzucona." +msgstr "" -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Osoba jest zajęta." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Osoba jest tymczasowo niedostępna." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "Osoba nie chce, aby jej przeszkadzać." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Rozmowa odrzucona." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." +#: ../coreapi/callbacks.c:835 +msgid "Call failed." msgstr "" -#: ../coreapi/callbacks.c:798 -#, fuzzy -msgid "Call failed." -msgstr "Połączenie odwołane." - -#: ../coreapi/callbacks.c:878 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:913 +#, c-format msgid "Registration on %s successful." -msgstr "Rejestracja powiodła się." +msgstr "" -#: ../coreapi/callbacks.c:879 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:914 +#, c-format msgid "Unregistration on %s done." -msgstr "Rejestracja powiodła się." +msgstr "" -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:900 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:935 +#, c-format msgid "Registration on %s failed: %s" -msgstr "Rejestracja powiodła się." +msgstr "" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "Informacje o kodeku" +msgstr "" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "" msgstr[1] "" - -#, fuzzy -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "Nie poprawny adres sip. Adres sip wygląda tak " - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Używasz sterowników ALSA do dźwięku.\n" -#~ "To jest najlepszy wybór. Jednak brakuje modułu emulacji pcm oss,\n" -#~ "a Linphone go wymaga. Uruchom 'modprobe snd-pcm-oss' jako root,\n" -#~ "aby go załadować" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Używasz sterowników ALSA do dźwięku.\n" -#~ "To jest najlepszy wybór. Jednak brakuje modułu emulacji mixera oss,\n" -#~ "a Linphone go wymaga. Uruchom 'modprobe snd-mixer-oss' jako root,\n" -#~ "aby go załadować" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "Włączone" - -#, fuzzy -#~ msgid "Contact list" -#~ msgstr "Dzwonie do " - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "Kodeki audio" - -#, fuzzy -#~ msgid "Audio only" -#~ msgstr "Kodeki audio" - -#, fuzzy -#~ msgid "Duration:" -#~ msgstr "Informacja" - -#, fuzzy -#~ msgid "_Linphone" -#~ msgstr "linphone" - -#, fuzzy -#~ msgid "gtk-cancel" -#~ msgstr "Połączony" - -#, fuzzy -#~ msgid "gtk-close" -#~ msgstr "Połączony" - -#, fuzzy -#~ msgid "_Modes" -#~ msgstr "Kodeki" - -#, fuzzy -#~ msgid "" -#~ "Audio codecs\n" -#~ "Video codecs" -#~ msgstr "Kodeki audio" - -#, fuzzy -#~ msgid "Request Cancelled." -#~ msgstr "Połączenie odwołane." - -#~ msgid "User cannot be found at given address." -#~ msgstr "Osoba nie istnieje pod tym adresem." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "Osoba nie posiada żadnych zaproponowanych kodeków." - -#~ msgid "Timeout." -#~ msgstr "Upłynął limit czasu." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Serwer istnieje, ale odrzucił połączenie." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "Użytkownik nie jest dostępny, ale proponuje kontakt poprzez alternatywny " -#~ "adres:" - -#, fuzzy -#~ msgid "Gone" -#~ msgstr "Brak." - -#, fuzzy -#~ msgid "Display filters" -#~ msgstr "Wyświetlana nazwa:" - -#, fuzzy -#~ msgid "_Properties" -#~ msgstr "Właściwości RTP" - -#~ msgid "Sound" -#~ msgstr "Dźwięk" - -#~ msgid "Address book" -#~ msgstr "Książka adresowa" - -#~ msgid "Shows the address book" -#~ msgstr "Pokazuje książkę adresową" - -#~ msgid "..." -#~ msgstr "..." - -#~ msgid "Show more..." -#~ msgstr "Pokaż więcej" - -#~ msgid "Playback level:" -#~ msgstr "Poziom odtwarzania:" - -#~ msgid "Recording level:" -#~ msgstr "Poziom nagrywania:" - -#, fuzzy -#~ msgid "Ring level:" -#~ msgstr "Poziom nagrywania:" - -#~ msgid "Reachable" -#~ msgstr "Dostępny" - -#~ msgid "Busy, I'll be back in " -#~ msgstr "Zajęty, wrócę za " - -#~ msgid "The other party will be informed that you'll be back in X minutes" -#~ msgstr "Osoba zostanie powiadomiona, że wrócisz za X minut." - -#~ msgid "mn" -#~ msgstr "mn" - -#~ msgid "Moved temporarily" -#~ msgstr "Tymczasowo niedostępny" - -#~ msgid "Alternative service" -#~ msgstr "Alternatywny adres" - -#~ msgid "URL:" -#~ msgstr "URL:" - -#~ msgid "Presence" -#~ msgstr "Obecność" - -#~ msgid "Press digits to send DTMFs." -#~ msgstr "Nacisnij cyfry, aby wysłać DTMFy." - -#~ msgid "DTMF" -#~ msgstr "DTMF" - -#~ msgid "" -#~ "Linphone is a web-phone.\n" -#~ "It is compatible with SIP and RTP protocols." -#~ msgstr "" -#~ "Linphone jest telefonem internetowym.\n" -#~ "Jest kompatybilny z protokolami SIP i RTP." - -#, fuzzy -#~ msgid "Use IPv6 network (if available)" -#~ msgstr "Osoba jest tymczasowo niedostępna." - -#, fuzzy -#~ msgid "" -#~ "These options is only for users in a private network, behind a gateway. " -#~ "If you are not in this situation, then leave this empty." -#~ msgstr "" -#~ "Ta opcja jest tylko dla osób w sieci prywatnej, znajdujących się za " -#~ "firewallem. Jeżeli nie jesteś w takiej sytuacji, nie zmieniaj tej opcji." - -#~ msgid "NAT traversal options (experimental)" -#~ msgstr "Opcje NAT traversal (eksperymentalne)" - -#, fuzzy -#~ msgid "Number of buffered miliseconds (jitter compensation):" -#~ msgstr "Czas bufora w milisekundach (kompensacja jitter):" - -#~ msgid "RTP port used for audio:" -#~ msgstr "Port RTP dla dźwięku:" - -#~ msgid "micro" -#~ msgstr "mikrofon" - -#~ msgid "Run sip user agent on port:" -#~ msgstr "Uruchom agenta sip na porcie:" - -#~ msgid "It is strongly recommended to use port 5060." -#~ msgstr "Rekomendowane jest użycie portu 5060." - -#~ msgid "@" -#~ msgstr "@" - -#~ msgid "Identity" -#~ msgstr "Tożsamość" - -#, fuzzy -#~ msgid "Add proxy/registrar" -#~ msgstr "Użyj rejestracji sip" - -#~ msgid "Remote services" -#~ msgstr "Zdalne usługi" - -#~ msgid "List of audio codecs, in order of preference:" -#~ msgstr "Lista kodeków audio, w kolejności preferencji:" - -#~ msgid "" -#~ "Note: Codecs in red are not usable regarding to your connection type to " -#~ "the internet." -#~ msgstr "" -#~ "Uwaga: Czerwone kodeki nie mogą być użyte, ze względu na typTwojego " -#~ "połącznia z internetem." - -#~ msgid "Codec information" -#~ msgstr "Informacje o kodeku" - -#~ msgid "Address Book" -#~ msgstr "Książka adresowa" - -#~ msgid "Select" -#~ msgstr "Wybierz" - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you to contact him " -#~ "using the following alternate ressource:" -#~ msgstr "" -#~ "Użytkownik nie jest dostępny, ale proponuje kontakt poprzez alternatywny " -#~ "adres:" - -#~ msgid "None." -#~ msgstr "Brak." - -#, fuzzy -#~ msgid "Name:" -#~ msgstr "Nazwa" - -#, fuzzy -#~ msgid "Bad sip address: a sip address looks like sip:user@domain" -#~ msgstr "Nie poprawny adres sip. Adres sip wygląda tak " - -#~ msgid "Communication ended." -#~ msgstr "Komunikacja zakończona." - -#, fuzzy -#~ msgid "Firewall 's external ip address (in dot notations):" -#~ msgstr "Adres IP firewall'u (w notacji kropkowej):" - -#~ msgid "Index" -#~ msgstr "Indeks" - -#~ msgid "28k modem" -#~ msgstr "Modem 28K" - -#~ msgid "56k modem" -#~ msgstr "Modem 56K" - -#~ msgid "64k modem (numeris)" -#~ msgstr "Modem ISDN 64K" - -#~ msgid "ADSL or Cable modem" -#~ msgstr "ADSL lub połączenie kablowe" - -#~ msgid "Ethernet or equivalent" -#~ msgstr "LAN lub podobne" - -#~ msgid "Connection type:" -#~ msgstr "Typ połączenia:" - -#, fuzzy -#~ msgid "" -#~ "Linphone could not open audio device %s. Check if your sound card is " -#~ "fully configured and working." -#~ msgstr "" -#~ "Linphone nie mógł otworzyć urządzenia dźwięku. Sprawdź czy Twoja karta " -#~ "jest dobrze skonfigurowana." - -#~ msgid "Type here the sip address of the person you want to call." -#~ msgstr "Tutaj wpisz adres sip osoby, do której chcesz zadzwonić" - -#~ msgid "" -#~ "Release or\n" -#~ "Refuse" -#~ msgstr "" -#~ "Rozłącz lub\n" -#~ "Odmów" - -#~ msgid "%s. Retry after %i minute(s)." -#~ msgstr "%s. Spróbuj za %i minut." - -#, fuzzy -#~ msgid "Timeout..." -#~ msgstr "Upłynął limit czasu." - -#~ msgid "Toggle this if you want to be registered on a remote server." -#~ msgstr "Włącz to, jeżeli chcesz się zarejestrować na zdalnym serwerze." - -#~ msgid "Address of record:" -#~ msgstr "Adres do rejestracji:" - -#~ msgid "" -#~ "The password used for registration. On some servers it is not necessary" -#~ msgstr "Hasło do rejestracji. Na niektórych serwerach nie jest wymagane" - -#~ msgid "Use this registrar server as outbound proxy." -#~ msgstr "Użyj tego serwera rejestracji jako zewnętrznego proxy" - -#~ msgid "sip address:" -#~ msgstr "Adres SIP:" - -#~ msgid "Modify" -#~ msgstr "Zmień" - -#~ msgid "" -#~ "You are currently using the i810_audio driver.\n" -#~ "This driver is buggy and so does not work with Linphone.\n" -#~ "We suggest that you replace it by its equivalent ALSA driver,\n" -#~ "either with packages from your distribution, or by downloading\n" -#~ "ALSA drivers at http://www.alsa-project.org." -#~ msgstr "" -#~ "Używasz sterownika i810_audio.\n" -#~ "Ten sterownik ma błędy i nie działa z Linphone\n" -#~ "Sugerujemy zmiane sterowników na ich odpowiedniki ALSA z pakietów Twojej " -#~ "dystrybucji,\n" -#~ "lub ze strony http://www.alsa-project.org/." - -#~ msgid "Unregistration successfull." -#~ msgstr "Derejestracja powiodła się." +msgstr[2] "" + +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/pt_BR.po b/po/pt_BR.po index c30d3787a..26581a852 100644 --- a/po/pt_BR.po +++ b/po/pt_BR.po @@ -1,26 +1,27 @@ -# Portuguese translations for gnomebaker package. -# Copyright (C) 2005 THE linphone COPYRIGHT HOLDER -# This file is distributed under the same license as the linphone package. -# Rafael Caesar Lenzi , 2005. -# -#, fuzzy +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: linphone-1.1.0\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2006-07-11 23:30+0200\n" -"Last-Translator: Rafael Caesar Lenzi \n" -"Language-Team: pt_BR \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Portuguese (Brazil) (http://www.transifex.com/projects/p/" +"linphone-gtk/language/pt_BR/)\n" +"Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n > 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 -#, fuzzy, c-format +#, c-format msgid "Call %s" -msgstr "Histórico de chamadas" +msgstr "" #: ../gtk/calllogs.c:149 ../gtk/friendlist.c:975 #, c-format @@ -28,28 +29,25 @@ msgid "Send text to %s" msgstr "" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "Contatando " +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "Abortado" +msgstr "" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "Perdido" +msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "linha" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -65,11 +63,6 @@ msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -77,11 +70,9 @@ msgid "" "%s\t%s\t" msgstr "" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -97,7 +88,7 @@ msgstr "" msgid "Couldn't find pixmap file: %s" msgstr "Não é possível achar arquivo pixmap: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "" @@ -132,20 +123,14 @@ msgid "" msgstr "" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Informações" +msgstr "" #: ../gtk/main.c:163 msgid "Run the audio assistant" msgstr "" -#: ../gtk/main.c:590 -#, fuzzy, c-format -msgid "Call with %s" -msgstr "Bate-papo com %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -154,83 +139,78 @@ msgid "" "If you answer no, this person will be temporarily blacklisted." msgstr "" -#: ../gtk/main.c:1260 +#: ../gtk/main.c:1162 #, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "Linphone - Histórico de chamadas" +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 -#, fuzzy +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" -msgstr "Chamada cancelada." +msgstr "" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Camadas recebidas" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 -#, fuzzy +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" -msgstr "linha" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "Abortado" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "Contatando " +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "" #: ../gtk/friendlist.c:505 -#, fuzzy msgid "Add to addressbook" -msgstr "Catálogo de endereços" +msgstr "" #: ../gtk/friendlist.c:691 msgid "Presence status" @@ -241,14 +221,12 @@ msgid "Name" msgstr "Nome" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "Histórico de chamadas" +msgstr "" #: ../gtk/friendlist.c:726 -#, fuzzy msgid "Chat" -msgstr "Sala de bate-papo" +msgstr "" #: ../gtk/friendlist.c:756 #, c-format @@ -256,9 +234,9 @@ msgid "Search in %s directory" msgstr "" #: ../gtk/friendlist.c:976 -#, fuzzy, c-format +#, c-format msgid "Edit contact '%s'" -msgstr "Edicar informação de contato" +msgstr "" #: ../gtk/friendlist.c:977 #, c-format @@ -284,9 +262,8 @@ msgid "Status" msgstr "" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Bitrate mínimo (kbits/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -301,96 +278,95 @@ msgid "Disabled" msgstr "Desativado" #: ../gtk/propertybox.c:809 -#, fuzzy msgid "Account" -msgstr "Aceitar" - -#: ../gtk/propertybox.c:1063 -msgid "English" -msgstr "" - -#: ../gtk/propertybox.c:1064 -msgid "French" -msgstr "" - -#: ../gtk/propertybox.c:1065 -msgid "Swedish" -msgstr "" - -#: ../gtk/propertybox.c:1066 -msgid "Italian" -msgstr "" - -#: ../gtk/propertybox.c:1067 -msgid "Spanish" -msgstr "" - -#: ../gtk/propertybox.c:1068 -msgid "Brazilian Portugese" -msgstr "" - -#: ../gtk/propertybox.c:1069 -msgid "Polish" -msgstr "" - -#: ../gtk/propertybox.c:1070 -msgid "German" -msgstr "" - -#: ../gtk/propertybox.c:1071 -msgid "Russian" msgstr "" #: ../gtk/propertybox.c:1072 -msgid "Japanese" +msgid "English" msgstr "" #: ../gtk/propertybox.c:1073 -msgid "Dutch" +msgid "French" msgstr "" #: ../gtk/propertybox.c:1074 -msgid "Hungarian" +msgid "Swedish" msgstr "" #: ../gtk/propertybox.c:1075 -msgid "Czech" +msgid "Italian" msgstr "" #: ../gtk/propertybox.c:1076 -msgid "Chinese" +msgid "Spanish" msgstr "" #: ../gtk/propertybox.c:1077 -msgid "Traditional Chinese" +msgid "Brazilian Portugese" msgstr "" #: ../gtk/propertybox.c:1078 -msgid "Norwegian" +msgid "Polish" msgstr "" #: ../gtk/propertybox.c:1079 -msgid "Hebrew" +msgid "German" msgstr "" #: ../gtk/propertybox.c:1080 +msgid "Russian" +msgstr "" + +#: ../gtk/propertybox.c:1081 +msgid "Japanese" +msgstr "" + +#: ../gtk/propertybox.c:1082 +msgid "Dutch" +msgstr "" + +#: ../gtk/propertybox.c:1083 +msgid "Hungarian" +msgstr "" + +#: ../gtk/propertybox.c:1084 +msgid "Czech" +msgstr "" + +#: ../gtk/propertybox.c:1085 +msgid "Chinese" +msgstr "" + +#: ../gtk/propertybox.c:1086 +msgid "Traditional Chinese" +msgstr "" + +#: ../gtk/propertybox.c:1087 +msgid "Norwegian" +msgstr "" + +#: ../gtk/propertybox.c:1088 +msgid "Hebrew" +msgstr "" + +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "Nenhum" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -414,14 +390,12 @@ msgid "Error communicating with server." msgstr "" #: ../gtk/buddylookup.c:164 -#, fuzzy msgid "Connecting..." -msgstr "Contatando " +msgstr "" #: ../gtk/buddylookup.c:168 -#, fuzzy msgid "Connected" -msgstr "Conectado." +msgstr "" #: ../gtk/buddylookup.c:172 msgid "Receiving data..." @@ -436,7 +410,7 @@ msgstr[1] "" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" @@ -461,28 +435,24 @@ msgid "Enter your linphone.org username" msgstr "" #: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4 -#, fuzzy msgid "Username:" -msgstr "Usuário" +msgstr "" #: ../gtk/setupwizard.c:104 ../gtk/password.ui.h:4 ../gtk/ldap.ui.h:5 -#, fuzzy msgid "Password:" -msgstr "Senha:" +msgstr "" #: ../gtk/setupwizard.c:124 msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "Usuário" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "Senha:" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -497,14 +467,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "Usuário" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "Senha:" +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -535,46 +503,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "" -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "Histórico de chamadas" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -590,9 +558,8 @@ msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "Histórico de chamadas" +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -603,9 +570,8 @@ msgid "Going through one or more NATs" msgstr "" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "Redirecionado para %s..." +msgstr "" #: ../gtk/incall_view.c:231 msgid "Through a relay server" @@ -620,18 +586,16 @@ msgid "uPnP in progress" msgstr "" #: ../gtk/incall_view.c:243 -#, fuzzy msgid "uPnp not available" -msgstr "Informações não disponíveis" +msgstr "" #: ../gtk/incall_view.c:245 msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "Histórico de chamadas" +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -654,118 +618,107 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 -#, fuzzy +#: ../gtk/incall_view.c:511 msgid "Calling..." -msgstr "Contatando " +msgstr "" -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "" -#: ../gtk/incall_view.c:515 -#, fuzzy +#: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "Camadas recebidas" +msgstr "" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 -#, fuzzy +#: ../gtk/incall_view.c:722 msgid "In call" -msgstr "Contatando " - -#: ../gtk/incall_view.c:738 -#, fuzzy -msgid "Paused call" -msgstr "Contatando " - -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" msgstr "" -#: ../gtk/incall_view.c:772 -#, fuzzy -msgid "Call ended." -msgstr "Chamada cancelada." +#: ../gtk/incall_view.c:758 +msgid "Paused call" +msgstr "" -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:794 +msgid "Call ended." +msgstr "" + +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "Histórico de chamadas" +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "" @@ -775,9 +728,9 @@ msgid "Please enter login information for %s" msgstr "" #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "Camadas recebidas" +msgstr "" #: ../gtk/config-fetching.c:73 #, c-format @@ -802,28 +755,25 @@ msgstr "" #: ../gtk/audio_assistant.c:318 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Dispositivo de captura de som:" +msgstr "" #: ../gtk/audio_assistant.c:329 -#, fuzzy msgid "Recorded volume" -msgstr "Origem de gravação:" +msgstr "" #: ../gtk/audio_assistant.c:333 msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Dispositivo de som:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -862,14 +812,12 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "Chamada cancelada." +msgstr "" #: ../gtk/main.ui.h:2 -#, fuzzy msgid "Send" -msgstr "Som" +msgstr "" #: ../gtk/main.ui.h:3 msgid "End conference" @@ -892,14 +840,12 @@ msgid "Transfer" msgstr "" #: ../gtk/main.ui.h:14 -#, fuzzy msgid "In call" -msgstr "Camadas recebidas" +msgstr "" #: ../gtk/main.ui.h:15 -#, fuzzy msgid "Duration" -msgstr "Informações" +msgstr "" #: ../gtk/main.ui.h:16 msgid "Call quality rating" @@ -910,9 +856,8 @@ msgid "All users" msgstr "" #: ../gtk/main.ui.h:18 -#, fuzzy msgid "Online users" -msgstr "linha" +msgstr "" #: ../gtk/main.ui.h:19 msgid "ADSL" @@ -923,27 +868,24 @@ msgid "Fiber Channel" msgstr "" #: ../gtk/main.ui.h:21 -#, fuzzy msgid "Default" -msgstr "Identificação SIP:" +msgstr "" #: ../gtk/main.ui.h:22 msgid "_Options" msgstr "" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Configuração de proxy/registrador" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" msgstr "" #: ../gtk/main.ui.h:25 -#, fuzzy msgid "Enable self-view" -msgstr "Ativado" +msgstr "" #: ../gtk/main.ui.h:26 msgid "_Help" @@ -974,77 +916,67 @@ msgid "Initiate a new call" msgstr "" #: ../gtk/main.ui.h:34 -#, fuzzy msgid "Contacts" -msgstr "Contatando " +msgstr "" #: ../gtk/main.ui.h:35 msgid "Search" msgstr "" #: ../gtk/main.ui.h:36 -#, fuzzy msgid "Add contacts from directory" -msgstr "Informação de contato" +msgstr "" #: ../gtk/main.ui.h:37 -#, fuzzy msgid "Add contact" -msgstr "Edicar informação de contato" +msgstr "" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "Camadas recebidas" +msgstr "" #: ../gtk/main.ui.h:39 -#, fuzzy msgid "My current identity:" -msgstr "Identificação SIP:" +msgstr "" #: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7 -#, fuzzy msgid "Username" -msgstr "Usuário" +msgstr "" #: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8 -#, fuzzy msgid "Password" -msgstr "Senha:" +msgstr "" #: ../gtk/main.ui.h:42 msgid "Internet connection:" msgstr "" #: ../gtk/main.ui.h:43 -#, fuzzy msgid "Automatically log me in" -msgstr "Adquirir automaticamente um nome de servidor válido." +msgstr "" #: ../gtk/main.ui.h:44 ../gtk/password.ui.h:3 msgid "UserID" msgstr "" #: ../gtk/main.ui.h:45 -#, fuzzy msgid "Login information" -msgstr "Informação de contato" +msgstr "" #: ../gtk/main.ui.h:46 -#, fuzzy -msgid "Welcome !" -msgstr "Contatando " +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -msgid "About linphone" +msgid "About Linphone" msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" msgstr "" #: ../gtk/about.ui.h:4 @@ -1068,9 +1000,8 @@ msgid "" msgstr "" #: ../gtk/contact.ui.h:2 -#, fuzzy msgid "SIP Address" -msgstr "Endereço" +msgstr "" #: ../gtk/contact.ui.h:3 msgid "Show this contact presence status" @@ -1081,9 +1012,8 @@ msgid "Allow this contact to see my presence status" msgstr "" #: ../gtk/contact.ui.h:5 -#, fuzzy msgid "Contact information" -msgstr "Informação de contato" +msgstr "" #: ../gtk/log.ui.h:1 msgid "Linphone debug window" @@ -1094,36 +1024,32 @@ msgid "Scroll to end" msgstr "" #: ../gtk/password.ui.h:1 -#, fuzzy msgid "Linphone - Authentication required" -msgstr "Autenticação requerida" +msgstr "" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" msgstr "" #: ../gtk/call_logs.ui.h:1 -#, fuzzy msgid "Call history" -msgstr "Linphone - Histórico de chamadas" +msgstr "" #: ../gtk/call_logs.ui.h:2 msgid "Clear all" msgstr "" #: ../gtk/call_logs.ui.h:3 -#, fuzzy msgid "Call back" -msgstr "Histórico de chamadas" +msgstr "" #: ../gtk/sip_account.ui.h:1 msgid "Linphone - Configure a SIP account" msgstr "" #: ../gtk/sip_account.ui.h:2 -#, fuzzy msgid "Your SIP identity:" -msgstr "Identificação SIP:" +msgstr "" #: ../gtk/sip_account.ui.h:3 msgid "Looks like sip:@" @@ -1134,23 +1060,20 @@ msgid "sip:" msgstr "" #: ../gtk/sip_account.ui.h:5 -#, fuzzy msgid "SIP Proxy address:" -msgstr "Proxy SIP:" +msgstr "" #: ../gtk/sip_account.ui.h:6 msgid "Looks like sip:" msgstr "" #: ../gtk/sip_account.ui.h:7 -#, fuzzy msgid "Registration duration (sec):" -msgstr "Período do registo:" +msgstr "" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Rota (opcional):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1161,23 +1084,20 @@ msgid "Route (optional):" msgstr "Rota (opcional):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Contatando " +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" msgstr "" #: ../gtk/sip_account.ui.h:13 -#, fuzzy msgid "Publish presence information" -msgstr "Informar informação de presença" +msgstr "" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Ativado" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1212,16 +1132,14 @@ msgid "CIF" msgstr "" #: ../gtk/parameters.ui.h:8 -#, fuzzy msgid "Audio codecs" -msgstr "Codec's de áudio" +msgstr "" #: ../gtk/parameters.ui.h:9 -#, fuzzy msgid "Video codecs" -msgstr "Codec's de áudio" +msgstr "" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "" @@ -1254,9 +1172,8 @@ msgid "Use IPv6 instead of IPv4" msgstr "" #: ../gtk/parameters.ui.h:18 -#, fuzzy msgid "Transport" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:19 msgid "Media encryption type" @@ -1287,14 +1204,12 @@ msgid "DSCP fields" msgstr "" #: ../gtk/parameters.ui.h:26 -#, fuzzy msgid "SIP/TCP port" -msgstr "Porta SIP" +msgstr "" #: ../gtk/parameters.ui.h:27 -#, fuzzy msgid "SIP/UDP port" -msgstr "Porta SIP" +msgstr "" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1321,76 +1236,64 @@ msgid "Behind NAT / Firewall (use uPnP)" msgstr "" #: ../gtk/parameters.ui.h:34 -#, fuzzy msgid "Public IP address:" -msgstr "Endereço sip:" +msgstr "" #: ../gtk/parameters.ui.h:35 -#, fuzzy msgid "Stun server:" -msgstr "Dispositivo de som" +msgstr "" #: ../gtk/parameters.ui.h:36 -#, fuzzy msgid "NAT and Firewall" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:37 -#, fuzzy msgid "Network settings" -msgstr "Rede" +msgstr "" #: ../gtk/parameters.ui.h:38 -#, fuzzy msgid "Ring sound:" -msgstr "Som do toque:" +msgstr "" #: ../gtk/parameters.ui.h:39 msgid "ALSA special device (optional):" msgstr "" #: ../gtk/parameters.ui.h:40 -#, fuzzy msgid "Capture device:" -msgstr "Dispositivo de captura de som:" +msgstr "" #: ../gtk/parameters.ui.h:41 -#, fuzzy msgid "Ring device:" -msgstr "Dispositivo de som" +msgstr "" #: ../gtk/parameters.ui.h:42 -#, fuzzy msgid "Playback device:" -msgstr "Dispositivo de som:" +msgstr "" #: ../gtk/parameters.ui.h:43 msgid "Enable echo cancellation" msgstr "" #: ../gtk/parameters.ui.h:44 -#, fuzzy msgid "Audio" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:45 -#, fuzzy msgid "Video input device:" -msgstr "Dispositivo de som" +msgstr "" #: ../gtk/parameters.ui.h:46 msgid "Prefered video resolution:" msgstr "" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Dispositivo de som" +msgstr "" #: ../gtk/parameters.ui.h:48 -#, fuzzy msgid "Video" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:49 msgid "Multimedia settings" @@ -1405,28 +1308,24 @@ msgid "Your display name (eg: John Doe):" msgstr "" #: ../gtk/parameters.ui.h:52 -#, fuzzy msgid "Your username:" -msgstr "Usuário" +msgstr "" #: ../gtk/parameters.ui.h:53 -#, fuzzy msgid "Your resulting SIP address:" -msgstr "Seu endereço SIP:" +msgstr "" #: ../gtk/parameters.ui.h:54 -#, fuzzy msgid "Default identity" -msgstr "Identificação SIP:" +msgstr "" #: ../gtk/parameters.ui.h:55 msgid "Wizard" msgstr "" #: ../gtk/parameters.ui.h:56 -#, fuzzy msgid "Add" -msgstr "Endereço" +msgstr "" #: ../gtk/parameters.ui.h:57 msgid "Edit" @@ -1437,18 +1336,16 @@ msgid "Remove" msgstr "Remover" #: ../gtk/parameters.ui.h:59 -#, fuzzy msgid "Proxy accounts" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:60 msgid "Erase all passwords" msgstr "" #: ../gtk/parameters.ui.h:61 -#, fuzzy msgid "Privacy" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:62 msgid "Manage SIP Accounts" @@ -1463,9 +1360,8 @@ msgid "Disable" msgstr "Desativar" #: ../gtk/parameters.ui.h:65 -#, fuzzy msgid "Codecs" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:66 msgid "0 stands for \"unlimited\"" @@ -1494,70 +1390,56 @@ msgid "Bandwidth control" msgstr "" #: ../gtk/parameters.ui.h:72 -#, fuzzy msgid "Codecs" -msgstr "Codec's de áudio" +msgstr "" #: ../gtk/parameters.ui.h:73 -#, fuzzy msgid "Language" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:74 msgid "Show advanced settings" msgstr "" #: ../gtk/parameters.ui.h:75 -#, fuzzy msgid "Level" -msgstr "Contatando " +msgstr "" #: ../gtk/parameters.ui.h:76 -#, fuzzy msgid "User interface" -msgstr "Usuário" +msgstr "" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Endereço do servidor" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Informações de autenticação" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" +msgid "LDAP Account setup" msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Contatando " - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 -#, fuzzy +#: ../gtk/parameters.ui.h:82 msgid "Done" -msgstr "Nenhum" +msgstr "" #: ../gtk/buddylookup.ui.h:1 -#, fuzzy msgid "Search contacts in directory" -msgstr "Informação de contato" +msgstr "" #: ../gtk/buddylookup.ui.h:2 msgid "Add to my list" msgstr "" #: ../gtk/buddylookup.ui.h:3 -#, fuzzy msgid "Search somebody" -msgstr "Contatando " +msgstr "" #: ../gtk/waiting.ui.h:1 msgid "Linphone" @@ -1568,9 +1450,8 @@ msgid "Please wait" msgstr "" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Rede" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" @@ -1589,19 +1470,16 @@ msgid "Set DSCP values (in hexadecimal)" msgstr "" #: ../gtk/call_statistics.ui.h:1 -#, fuzzy msgid "Call statistics" -msgstr "Histórico de chamadas" +msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" -msgstr "Codec's de áudio" +msgstr "" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" -msgstr "Codec's de áudio" +msgstr "" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1620,9 +1498,8 @@ msgid "Video Media connectivity" msgstr "" #: ../gtk/call_statistics.ui.h:8 -#, fuzzy msgid "Round trip time" -msgstr "Propriedades de som" +msgstr "" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" @@ -1637,9 +1514,8 @@ msgid "RTP profile" msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "Informação de contato" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 msgid "Configure VoIP tunnel" @@ -1661,84 +1537,21 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Rede" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" msgstr "" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "Informações não disponíveis" +msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Contatando " +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1753,9 +1566,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Contatando " +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1771,18 +1583,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "Endereço" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Contatando " +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1797,9 +1607,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Contatando " +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1830,98 +1639,82 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Contatando " +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 -#, fuzzy +#: ../coreapi/linphonecore.c:1510 msgid "Ready" -msgstr "Pronto." +msgstr "" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Informações" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Procurando por telefone de destino..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Não foi possível encontrar este número." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 -#, fuzzy +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" -msgstr "Contatando " +msgstr "" -#: ../coreapi/linphonecore.c:2425 -#, fuzzy +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" -msgstr "Não é possível achar arquivo pixmap: %s" +msgstr "" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:2745 -#, fuzzy +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" -msgstr "está chamado você." +msgstr "" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Conectado." -#: ../coreapi/linphonecore.c:3220 -#, fuzzy +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" -msgstr "Abortado" +msgstr "" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "" -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" #: ../coreapi/friend.c:33 -#, fuzzy msgid "Online" -msgstr "linha" +msgstr "" #: ../coreapi/friend.c:36 msgid "Busy" @@ -1956,484 +1749,186 @@ msgid "Using another messaging service" msgstr "" #: ../coreapi/friend.c:60 -#, fuzzy msgid "Offline" -msgstr "linha" +msgstr "" #: ../coreapi/friend.c:63 msgid "Pending" msgstr "" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Informações" - -#: ../coreapi/friend.c:68 -msgid "Unknown-bug" msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/friend.c:68 +msgid "Unknown status" +msgstr "" + +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" msgstr "" -#: ../coreapi/proxy.c:1369 -#, fuzzy, c-format +#: ../coreapi/proxy.c:1377 +#, c-format msgid "Could not login as %s" -msgstr "Não é possível achar arquivo pixmap: %s" +msgstr "" -#: ../coreapi/callbacks.c:355 -#, fuzzy +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." -msgstr "Serviços remotos" +msgstr "" -#: ../coreapi/callbacks.c:373 -#, fuzzy +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." -msgstr "Serviços remotos" +msgstr "" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:435 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:475 +#, c-format msgid "Call with %s is paused." -msgstr "Bate-papo com %s" +msgstr "" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:459 -#, fuzzy +#: ../coreapi/callbacks.c:498 msgid "Call resumed." -msgstr "Chamada cancelada." +msgstr "" -#: ../coreapi/callbacks.c:464 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:502 +#, c-format msgid "Call answered by %s." msgstr "" -"Ligar ou\n" -"atender" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "" -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "" -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Usuário está ocupado." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Usuário está temporáriamente indisponível." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "" -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "" -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 -#, fuzzy +#: ../coreapi/callbacks.c:780 msgid "Redirected" -msgstr "Redirecionado para %s..." - -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:798 -#, fuzzy +#: ../coreapi/callbacks.c:835 msgid "Call failed." -msgstr "Histórico de chamadas" +msgstr "" -#: ../coreapi/callbacks.c:878 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:913 +#, c-format msgid "Registration on %s successful." -msgstr "Registro em %s efetuado." +msgstr "" -#: ../coreapi/callbacks.c:879 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:914 +#, c-format msgid "Unregistration on %s done." -msgstr "Registro em %s efetuado." +msgstr "" -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "" -#: ../coreapi/callbacks.c:900 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:935 +#, c-format msgid "Registration on %s failed: %s" -msgstr "Registro falhou (tempo esgotado)." +msgstr "" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "Informações de autenticação" +msgstr "" -#: ../coreapi/linphonecall.c:2932 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:3020 +#, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." -msgstr[0] "Você perdeu %i ligação(ões)." -msgstr[1] "Você perdeu %i ligação(ões)." - -#~ msgid "aborted" -#~ msgstr "Abortado" - -#~ msgid "completed" -#~ msgstr "Competado" - -#~ msgid "missed" -#~ msgstr "Perdido" - -#, fuzzy -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s em %sDe: %s\n" -#~ "Para: %s\n" -#~ "Status: %s\n" -#~ "Duração: %i min %i seg\n" - -#~ msgid "Outgoing call" -#~ msgstr "Chamadas efetuadas" - -#~ msgid "Chat with %s" -#~ msgstr "Bate-papo com %s" - -#, fuzzy -#~ msgid "Choosing a username" -#~ msgstr "Usuário" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "Ativado" - -#, fuzzy -#~ msgid "Contact list" -#~ msgstr "Contatando " - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "Codec's de áudio" - -#, fuzzy -#~ msgid "Audio only" -#~ msgstr "Codec's de áudio" - -#, fuzzy -#~ msgid "Duration:" -#~ msgstr "Informações" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "Linphone - Histórico de chamadas" - -#, fuzzy -#~ msgid "gtk-cancel" -#~ msgstr "Conectado." - -#, fuzzy -#~ msgid "gtk-ok" -#~ msgstr "Remover" - -#, fuzzy -#~ msgid "gtk-close" -#~ msgstr "Conectado." - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "Sua máquina aparentemente está conectada em uma rede IPv6. Por padrão o " -#~ "linphone sempre usa IPv4. Por favor atualize sua configuração se deseja " -#~ "usar IPv6" - -#~ msgid "Accept" -#~ msgstr "Aceitar" - -#, fuzzy -#~ msgid "Incoming call from" -#~ msgstr "Camadas recebidas" - -#, fuzzy -#~ msgid "Linphone - Incoming call" -#~ msgstr "Camadas recebidas" - -#~ msgid "Could not reach destination." -#~ msgstr "Não foi possível alcançar o detino." - -#~ msgid "Request Cancelled." -#~ msgstr "Pedido cancelado." - -#~ msgid "User cannot be found at given address." -#~ msgstr "Usuário não pode ser encontrado no endereço especificado." - -#~ msgid "Timeout." -#~ msgstr "Tempo esgotado." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Servidor de destino encontrado, porém recusou a conexão." - -#, fuzzy -#~ msgid "Gone" -#~ msgstr "Nenhum" - -#, fuzzy -#~ msgid "_Properties" -#~ msgstr "Propriedades RTP:" - -#, fuzzy -#~ msgid "Show logs" -#~ msgstr "Exibir chamadas" - -#, fuzzy -#~ msgid "_About" -#~ msgstr "Aceitar" - -#, fuzzy -#~ msgid "Proxy in use" -#~ msgstr "Proxy à usar:" - -#~ msgid "Sound" -#~ msgstr "Som" - -#, fuzzy -#~ msgid "Proxy accounts" -#~ msgstr "Proxy à usar:" - -#~ msgid "Go" -#~ msgstr "Ir" - -#, fuzzy -#~ msgid "Exit" -#~ msgstr "Editar" - -#~ msgid "Shows the address book" -#~ msgstr "Exibe o catálogo de endereços" - -#~ msgid "" -#~ "Hangup\n" -#~ "or refuse" -#~ msgstr "" -#~ "Desligar\n" -#~ "ou recusar" - -#~ msgid "Or chat !" -#~ msgstr "Ou bate-papo!" - -#~ msgid "Show more..." -#~ msgstr "Exibir mais..." - -#~ msgid "Playback level:" -#~ msgstr "Volume do auto-falante:" - -#~ msgid "Recording level:" -#~ msgstr "Volume do microfone:" - -#, fuzzy -#~ msgid "Ring level:" -#~ msgstr "Volume do microfone:" - -#~ msgid "Busy, I'll be back in " -#~ msgstr "Ocupado, volto em " - -#~ msgid "mn" -#~ msgstr "min" - -#~ msgid "Moved temporarily" -#~ msgstr "Movido temporáriamente" - -#~ msgid "Alternative service" -#~ msgstr "Serviço alternativo" - -#~ msgid "Presence" -#~ msgstr "Presença" - -#~ msgid "My online friends" -#~ msgstr "Meus amigos online" - -#~ msgid "" -#~ "Linphone is a web-phone.\n" -#~ "It is compatible with SIP and RTP protocols." -#~ msgstr "" -#~ "Linphone é um web-fone.\n" -#~ "Ele é compatível com os protocolos SIP e RTP." - -#~ msgid "Use IPv6 network (if available)" -#~ msgstr "Usar rede IPv6 (se disponível)" - -#~ msgid "" -#~ "Toggle this if you are on an ipv6 network and you wish linphone to use it." -#~ msgstr "" -#~ "Marque isto se você estiver em uma rede IPv6, e deseja que o linphone " -#~ "este protocolo." - -#, fuzzy -#~ msgid "" -#~ "These options is only for users in a private network, behind a gateway. " -#~ "If you are not in this situation, then leave this empty." -#~ msgstr "" -#~ "Esta opção é somente para usuários de uma rede privada, atrás de um " -#~ "gateway. Se você não está nesta situação, deixe isto em braco." - -#~ msgid "NAT traversal options (experimental)" -#~ msgstr "Opções de NAT(Experimental)" - -#~ msgid "Number of buffered miliseconds (jitter compensation):" -#~ msgstr "Número de segundos em bueffer:" - -#~ msgid "RTP port used for audio:" -#~ msgstr "Porta RTP usada para audio:" - -#~ msgid "Use SIP INFO message instead of RTP rfc2833 for DTMF transmitting" -#~ msgstr "" -#~ "Usar mensagem SIP INFO em vez de RTP rfc2833 para transmissão de DTMF" - -#~ msgid "RTP-RFC2833 is the recommended way." -#~ msgstr "RTP-RFC2833 é a maneira recomendada." - -#~ msgid "Other" -#~ msgstr "Outro" - -#~ msgid "micro" -#~ msgstr "microfone" - -#~ msgid "Listen" -#~ msgstr "Escutar" - -#~ msgid "Run sip user agent on port:" -#~ msgstr "Executar agente sip na porta:" - -#~ msgid "It is strongly recommended to use port 5060." -#~ msgstr "É altamente recomendavel usar a porta 5060." - -#~ msgid "Identity" -#~ msgstr "Identificação" - -#~ msgid "Add proxy/registrar" -#~ msgstr "Adicionar proxy/registrador" - -#~ msgid "Clear all stored authentication information (username,password...)" -#~ msgstr "" -#~ "Limpar todas as informações de autenticação (nomes de usuário, senha...)" - -#~ msgid "List of audio codecs, in order of preference:" -#~ msgstr "Lista de codecs de audio, em ordem de preferência:" - -#~ msgid "Codec information" -#~ msgstr "Informações sobre o codec" - -#~ msgid "Address Book" -#~ msgstr "Catálogo de endereços" - -#~ msgid "Select" -#~ msgstr "Selecionar" - -#~ msgid "None." -#~ msgstr "Nenhum" - -#~ msgid "Send registration:" -#~ msgstr "Enviar registro:" - -#~ msgid "Name:" -#~ msgstr "Nome:" - -#~ msgid "Refuse" -#~ msgstr "Recusar" - -#~ msgid "userid:" -#~ msgstr "Identificação:" - -#~ msgid "Text:" -#~ msgstr "Texto:" - -#~ msgid "linphone - receiving call from %s" -#~ msgstr "Linphone - Recebendo chamada de %s" - -#~ msgid "User manual" -#~ msgstr "Manual do usuário" - -#~ msgid "Ring sound selection" -#~ msgstr "Seleção de toque" - -#~ msgid "Communication ended." -#~ msgstr "Comunicação encerrada." - -#~ msgid "Firewall 's external ip address (in dot notations):" -#~ msgstr "Endereço externo do firewall:" - -#~ msgid "Index" -#~ msgstr "Índice" - -#~ msgid "28k modem" -#~ msgstr "Modem 28k" - -#~ msgid "56k modem" -#~ msgstr "Modem 56l" - -#~ msgid "64k modem (numeris)" -#~ msgstr "Modem 64k" - -#~ msgid "ADSL or Cable modem" -#~ msgstr "ADSL ou Cable modem" - -#~ msgid "Ethernet or equivalent" -#~ msgstr "Ethernet ou equivalente" - -#~ msgid "Connection type:" -#~ msgstr "Tipo de conexão:" - -#~ msgid "" -#~ "Linphone could not open audio device %s. Check if your sound card is " -#~ "fully configured and working." -#~ msgstr "" -#~ "Linphone não pode abrir dispositivo de áudio %s. Verifique se sua placa " -#~ "de som está configurada e funcionando." - -#~ msgid "Type here the sip address of the person you want to call." -#~ msgstr "Escreva aqui o endereço sip da pessoa que você quer ligar." +msgstr[0] "" +msgstr[1] "" + +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/ru.po b/po/ru.po index 6e916a63c..850f002c0 100644 --- a/po/ru.po +++ b/po/ru.po @@ -1,17 +1,21 @@ -# SIP Telephony Application. -# Copyright (C) 2001-2014 Free Software Foundation, Inc. -# Simon Morlat , 2001. -# Maxim Prokopyev , 2010. -# Alexey Loginov , 2014. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. # +# Translators: +# a , 2014 +# a , 2014 +# Maxim Prokopyev , 2010 +# Simon Morlat , 2001 msgid "" msgstr "" -"Project-Id-Version: \n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2014-09-10 01:32+0300\n" -"Last-Translator: AlexL \n" -"Language-Team: Russian \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Russian (http://www.transifex.com/projects/p/linphone-gtk/" +"language/ru/)\n" "Language: ru\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" @@ -66,11 +70,6 @@ msgstr[0] "%i секунда" msgstr[1] "%i секунды" msgstr[2] "%i секунд" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "%s\t%s" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -80,14 +79,10 @@ msgstr "" "%s\tКачество: %s\n" "%s\t%s\t" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" -msgstr "" -"%s\t\n" -"%s" +msgid "%s\t%s" +msgstr "%s\t%s" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" @@ -102,7 +97,7 @@ msgstr "Мне" msgid "Couldn't find pixmap file: %s" msgstr "Невозможно найти графический файл: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "Неверный sip контакт!" @@ -148,12 +143,7 @@ msgstr "Файл конфигурации" msgid "Run the audio assistant" msgstr "Запустить помощника аудио" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Звонок с %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -166,7 +156,7 @@ msgstr "" "контактный лист?\n" "Если вы ответите Нет, эта персона будет временно в чёрном списке." -#: ../gtk/main.c:1260 +#: ../gtk/main.c:1162 #, c-format msgid "" "Please enter your password for username %s\n" @@ -175,59 +165,59 @@ msgstr "" "Пожалуйста, введите пароль для пользователя %s\n" " для реалм (рилм) %s:" -#: ../gtk/main.c:1376 +#: ../gtk/main.c:1283 msgid "Call error" msgstr "Ошибка звонка" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Звонок окончен" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Входящий звонок" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Ответ" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Отклонить" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 msgid "Call paused" msgstr "Звонок приостановлен" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 #, c-format msgid "by %s" msgstr "%s" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "%s предложил запустить видео. Вы принимаете?" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Домашняя страница" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - интернет видео телефон" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (по умолчанию)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "Мы передали в %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -235,7 +225,7 @@ msgstr "" "Звуковые карты не были обнаружены на этом компьютере.\n" "Вы не сможете отправлять или получать аудио звонки." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "Свободный SIP видео-телефон" @@ -312,94 +302,94 @@ msgstr "Не разрешён" msgid "Account" msgstr "Учётная запись" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "Английский" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Французский" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Шведский" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Итальянский" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Испанский" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "Бразильский португальский" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Польский" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Немецкий" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Русский" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "Японский" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Датский" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Венгерский" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Чешский" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "Китайский" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "Традиционный китайский" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "Норвежский" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "Иврит" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "Сербский" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" "Вы должны перезагрузить linphone для того, чтобы языковые настройки вступили " "в силу." -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "Нет" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "SRTP" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "ZRTP" @@ -446,11 +436,9 @@ msgstr[2] "Найдено %i контактов" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Добро пожаловать!\n" -"Этот помощник поможет вам использовать учётную запись SIP для ваших звонков." #: ../gtk/setupwizard.c:43 msgid "Create an account on linphone.org" @@ -549,39 +537,39 @@ msgstr "" "что получили по электронной почте. Затем вернитесь сюда и нажмите кнопку " "Далее." -#: ../gtk/setupwizard.c:600 +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" msgstr "Помощник настройки учётной записи SIP" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "Добро пожаловать в помощник настройки учётной записи" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Помощник настройки учётной записи" -#: ../gtk/setupwizard.c:629 +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" msgstr "Настроить вашу учётную запись (шаг 1/1)" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "Введите ваше sip имя пользователя (шаг 1/1)" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "Введите информацию об учётной записи (шаг 1/2)" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "Подтверждение (шаг 2/2)" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "Ошибка" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "Прерывание" @@ -666,105 +654,100 @@ msgstr "%ix%i @ %f кадр/сек" msgid "%.3f seconds" msgstr "%.3f секунд" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "Повесить трубку" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "Звоним..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00::00::00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "Входящий звонок" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "хороший" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "средний" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "плохой" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "очень плохой" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "совсем плохой" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "недоступен" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "Защищённые с помощью SRTP" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Защищённые с помощью ZRTP - [знак аутентификации: %s]" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "Установить непроверенный" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "Установить проверенный" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "В конференции" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "Звоним" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "Звонок приостановлен" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i::%02i::%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Звонок закончен." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "Передача в прогрессе" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "Передача завершена." -#: ../gtk/incall_view.c:809 +#: ../gtk/incall_view.c:831 msgid "Transfer failed." msgstr "Передача неудачна." -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "Продолжить" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "Пауза" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" @@ -773,7 +756,7 @@ msgstr "" "Записывается в\n" "%s %s" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "(Пауза)" @@ -810,11 +793,9 @@ msgstr "Слишком громко" #: ../gtk/audio_assistant.c:318 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"Добро пожаловать!\n" -"Этот помощник поможет вам сконфигурировать настройки аудио для linphone" #: ../gtk/audio_assistant.c:328 msgid "Capture device" @@ -1021,20 +1002,20 @@ msgid "Login information" msgstr "Информация для входа" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "Добро пожаловать!" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "Удалить" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "Про linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." @@ -1208,7 +1189,7 @@ msgstr "Аудио кодеки" msgid "Video codecs" msgstr "Видео кодеки" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "C" @@ -1491,18 +1472,14 @@ msgid "Authentication method:" msgstr "Метод аутентификации:" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "метка" - -#: ../gtk/parameters.ui.h:81 msgid "LDAP Account setup" msgstr "Установка учётной записи LDAP" -#: ../gtk/parameters.ui.h:82 +#: ../gtk/parameters.ui.h:81 msgid "LDAP" msgstr "LDAP" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "Готово" @@ -1614,66 +1591,6 @@ msgstr "Конфигурировать тунель" msgid "Configure http proxy (optional)" msgstr "Конфигурировать http прокси (опционально)" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "D" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "B" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "A" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 msgid "LDAP Settings" msgstr "Настройки LDAP" @@ -1781,10 +1698,6 @@ msgstr "" "linphone автоматически перезагрузится чтобы получить и учесть новую " "конфигурацию в учётной записи." -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "https://" - #: ../gtk/provisioning-fetch.ui.h:1 msgid "Configuring..." msgstr "Конфигурирование..." @@ -1793,73 +1706,69 @@ msgstr "Конфигурирование..." msgid "Please wait while fetching configuration from server..." msgstr "Пожалуйста, подождите пока получается конфигурация с сервера..." -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Готов" -#: ../coreapi/linphonecore.c:1967 +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" msgstr "Конфигурирование" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Поиск назначения для телефонного номера.." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Не получилось принять решение по этому номеру." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Соединение" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "Невозможно позвонить" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" "К сожалению, мы достигли максимального количества одновременных звонков" -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "контактирует с вами" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "и спросил автоматический ответ." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "." - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "Изменение параметров звонка..." -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Соединён." -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "Звонок отменён" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "Невозможно приостановить звонок" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "Приостановка текущего звонка..." -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "Идет поиск STUN..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "Сбор локальных кандидатов ICE в прогрессе..." @@ -1912,10 +1821,10 @@ msgid "Vacation" msgstr "Отдых" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Неизвестная ошибка" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1923,7 +1832,7 @@ msgstr "" "Введённый SIP-адрес прокси является недействительным, он должен начинаться с " "\"sip:имя_хоста\"" -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1932,124 +1841,126 @@ msgstr "" "Должно выглядеть как sip:имя_пользователя@домен_прокси, как например, sip:" "alice@example.net" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "Невозможно зайти как: %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "Дистанционный звонок." -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "Дистанционный звонок..." -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "Предответное проключение." -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "Звонок с %s приостановлен." -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "На звонок ответил %s - на удержании." -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "Звонок возобновлён." -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "На звонок ответил %s." -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "Несовместимость, проверьте кодеки или параметры безопасности..." -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "Несовместимость медиа-параметров." + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "Мы возобновили." -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "Мы приостановлены другой стороной." -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "Звонок был дистанционно обновлён." -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Звонок прерван." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Пользователь занят." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Пользователь временно недоступен." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "Пользователь не хочет чтобы его беспокоили." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Звонок отклонён." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "Таймаут запроса." -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "Переадресован" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "Несовместимость медиа-параметров." - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "Звонок не удался." -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Регистрация на %s прошла успешно." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "Отмена регистрации на %s завершена." -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "время ожидания истекло" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "Регистрация на %s не удалась: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "Сервис недоступен, повтор" -#: ../coreapi/linphonecall.c:177 +#: ../coreapi/linphonecall.c:174 #, c-format msgid "Authentication token is %s" msgstr "Маркер проверки подлинности: %s" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." @@ -2057,190 +1968,33 @@ msgstr[0] "У вас %i пропущенный вызов." msgstr[1] "У вас %i пропущенных вызова." msgstr[2] "У вас %i пропущенных вызов." -#~ msgid "" -#~ "%s\t%s\tQuality: %s\n" -#~ "%s\t%s %s\t" -#~ msgstr "" -#~ "%s\t%s\tКачество: %s\n" -#~ "%s\t%s %s\t" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" -#~ msgid "Chat with %s" -#~ msgstr "Чат с %s" +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" -#~ msgid "" -#~ "Please enter your password for username %s\n" -#~ " at domain %s:" -#~ msgstr "" -#~ "Пожалуйста, введите пароль для пользователя %s\n" -#~ " для домена %s:" +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" -#~ msgid "by %s" -#~ msgstr "by %s" +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" -#~ msgid "Min bitrate (kbit/s)" -#~ msgstr "Минимальный битрейт (КБит/сек)" +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" -#~ msgid "Enable video" -#~ msgstr "Разрешить видео" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "Введите имя пользователя, номер телефона или полный sip адрес" - -#~ msgid "Lookup:" -#~ msgstr "Поиск:" - -#~ msgid "in" -#~ msgstr "в" - -#~ msgid "Keypad" -#~ msgstr "Клавиатура" - -#~ msgid "" -#~ "fr: Simon Morlat\n" -#~ "en: Simon Morlat and Delphine Perreau\n" -#~ "it: Alberto Zanoni \n" -#~ "de: Jean-Jacques Sarton \n" -#~ "sv: Daniel Nylander \n" -#~ "es: Jesus Benitez \n" -#~ "ja: YAMAGUCHI YOSHIYA \n" -#~ "pt_BR: Rafael Caesar Lenzi \n" -#~ "pl: Robert Nasiadek \n" -#~ "cs: Petr Pisar \n" -#~ "hu: anonymous\n" -#~ msgstr "" -#~ "fr: Simon Morlat\n" -#~ "en: Simon Morlat and Delphine Perreau\n" -#~ "it: Alberto Zanoni \n" -#~ "de: Jean-Jacques Sarton \n" -#~ "sv: Daniel Nylander \n" -#~ "es: Jesus Benitez \n" -#~ "ja: YAMAGUCHI YOSHIYA \n" -#~ "pt_BR: Rafael Caesar Lenzi \n" -#~ "pl: Robert Nasiadek \n" -#~ "cs: Petr Pisar \n" -#~ "hu: anonymous\n" - -#~ msgid "edit" -#~ msgstr "править" - -#~ msgid "Behind NAT / Firewall (specify gateway IP below)" -#~ msgstr "За NAT / брандмауэром (указать IP шлюза ниже)" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "Регистрация в \n" -#~ "виртуальной сети FONICS!" - -#~ msgid "aborted" -#~ msgstr "прервано" - -#~ msgid "completed" -#~ msgstr "завершён" - -#~ msgid "missed" -#~ msgstr "пропущено" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s в %s\n" -#~ "От: %s\n" -#~ "Кому: %s\n" -#~ "Статус: %s\n" -#~ "Длительность: %i мин. %i сек.\n" - -#~ msgid "Outgoing call" -#~ msgstr "Исходящий звонок" - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Не могу опознать sip адрес. Url для sip обычно выглядит как sip:" -#~ "пользователь@домен" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Ваш компьютер использует ALSA звуковые драйвера.\n" -#~ "Это лучший выбор. Однако, pcm oss модуль эмуляции\n" -#~ "не найден, а он нужен для linphone.\n" -#~ "Пожалуйста, выполните от пользователя root команду 'modprobe snd-pcm-oss' " -#~ "чтобы загрузить его." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Ваш компьютер использует ALSA звуковые драйвера.\n" -#~ "Это лучший выбор. Однако, mixer oss модуль эмуляции\n" -#~ "не найден, а он нужен для linphone.\n" -#~ "Пожалуйста, выполните от пользователя root команду 'modprobe snd-pcm-oss' " -#~ "чтобы загрузить его." - -#~ msgid "Incompatible, check codecs..." -#~ msgstr "Несовместимость, проверьте кодеки..." - -#~ msgid "We are being paused..." -#~ msgstr "Мы приостанавливаемся..." - -#~ msgid "We have been resumed..." -#~ msgstr "Мы возобновили..." - -#~ msgid "Call has been updated by remote..." -#~ msgstr "Звонок был дистанционно обновлён..." - -#~ msgid "No response." -#~ msgstr "Нет ответа." - -#~ msgid "Protocol error." -#~ msgstr "Ошибка протокола." - -#~ msgid "No common codecs" -#~ msgstr "Нет общих кодеков" - -#~ msgid "Authentication failure" -#~ msgstr "Неудача аутентификации" - -#~ msgid "Please choose a username:" -#~ msgstr "Пожалуйста, выберите имя пользователя:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "Проверка доступности для '%s'" - -#~ msgid "Please wait..." -#~ msgstr "Пожалуйста, подождите..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "" -#~ "Такое имя пользователя уже существует. Пожалуйста, попробуйте с другим " -#~ "именем." - -#~ msgid "Ok !" -#~ msgstr "ОК!" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "Проблемы со связью, пожалуйста, повторите попытку позже." - -#~ msgid "Choosing a username" -#~ msgstr "Выбор имени пользователя" - -#~ msgid "Verifying" -#~ msgstr "Проверка" - -#~ msgid "Creating your account" -#~ msgstr "Создание вашей учётной записи" - -#~ msgid "Now ready !" -#~ msgstr "Готово!" +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/sr.po b/po/sr.po index 2ec83343c..cc7879209 100644 --- a/po/sr.po +++ b/po/sr.po @@ -1,20 +1,24 @@ -# SIP Telephony Application. -# Copyright (C) 2001, 2002 Free Software Foundation, Inc. -# Мирослав Николић , 2013. +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: +# Мирослав Николић , 2014 msgid "" msgstr "" -"Project-Id-Version: linphone 0.7.1\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2013-02-11 19:03+0200\n" -"Last-Translator: Мирослав Николић \n" -"Language-Team: Serbian \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Serbian (http://www.transifex.com/projects/p/linphone-gtk/" +"language/sr/)\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"Plural-Forms: nplurals=4; plural=n==1? 3 : n%10==1 && n%100!=11 ? 0 : n" -"%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2;\n" +"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" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -27,28 +31,25 @@ msgid "Send text to %s" msgstr "Пошаљи текст за %s" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "У позиву" +msgstr "Недавни позиви (%i)" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "н/д" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "прекинути" +msgstr "Прекинут" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "пропуштени" +msgstr "Пропуштен" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "Одбиј" +msgstr "Одбијен" #: ../gtk/calllogs.c:329 #, c-format @@ -57,7 +58,6 @@ msgid_plural "%i minutes" msgstr[0] "%i минут" msgstr[1] "%i минута" msgstr[2] "%i минута" -msgstr[3] "Један минут" #: ../gtk/calllogs.c:332 #, c-format @@ -65,33 +65,21 @@ msgid "%i second" msgid_plural "%i seconds" msgstr[0] "%i секунда" msgstr[1] "%i секунде" -msgstr[2] "%i секунде" -msgstr[3] "Једна секунда" - -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, fuzzy, c-format -msgid "%s\t%s" -msgstr "" -"%s\t%s\tКвалитет: %s\n" -"%s\t%s %s\t" +msgstr[2] "%i секунди" #: ../gtk/calllogs.c:337 -#, fuzzy, c-format +#, c-format msgid "" "%s\tQuality: %s\n" "%s\t%s\t" msgstr "" -"%s\t%s\tКвалитет: %s\n" -"%s\t%s %s\t" +"%s\tКвалитет: %s\n" +"%s\t%s\t" -#: ../gtk/calllogs.c:343 -#, fuzzy, c-format -msgid "" -"%s\t\n" -"%s" -msgstr "" -"%s\t%s\tКвалитет: %s\n" -"%s\t%s %s\t" +#: ../gtk/calllogs.c:341 +#, c-format +msgid "%s\t%s" +msgstr "%s\t%s" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 msgid "Conference" @@ -106,21 +94,21 @@ msgstr "Ја" msgid "Couldn't find pixmap file: %s" msgstr "Не могу да пронађем датотеку сличице: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "Неисправан сип контакт !" #: ../gtk/main.c:107 msgid "log to stdout some debug information while running." -msgstr "бележи у стандардни излаз неке податке за уклањање грешака док ради." +msgstr "бележи на стандардни излаз неке податке прочишћавања док ради." #: ../gtk/main.c:114 msgid "path to a file to write logs into." -msgstr "путања до датотеке за уписивање бележака." +msgstr "путања до датотеке за уписивање дневника." #: ../gtk/main.c:121 msgid "Start linphone with video disabled." -msgstr "" +msgstr "Покреће линфон са искљученим видеом." #: ../gtk/main.c:128 msgid "Start only in the system tray, do not show the main interface." @@ -139,25 +127,18 @@ msgid "" "Specifiy a working directory (should be the base of the installation, eg: c:" "\\Program Files\\Linphone)" msgstr "" -"Наводи радни директоријум (треба да буде основа инсталације, нпр: c:" -"\\Program Files\\Linphone)" +"Наводи радни директоријум (треба да буде основа инсталације, нпр: „c:" +"\\Program Files\\Linphone“)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Потврђујем" +msgstr "Датотека подешавања" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "Помоћник подешавања налога" +msgstr "Покреће помоћника звука" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Позив са корисником %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -168,78 +149,79 @@ msgstr "" "%s жели да вас дода на списак пријатеља.\n" "Да ли желите да му допустите да види ваше стање присуства или да га додате " "на ваш списак пријатеља ?\n" -"Ако одговорите са не, ова особа ће привремено бити стављена на црни списак." +"Ако одговорите са не, ова особа ће привремено бити стављена на списак " +"забрана." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" "Унесите вашу лозинку за корисничко име %s\n" -" на домену %s:" +" на подручју %s:" -#: ../gtk/main.c:1376 +#: ../gtk/main.c:1283 msgid "Call error" msgstr "Грешка позива" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Позив је завршен" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Долазни позив" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "Јави се" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Одбиј" -#: ../gtk/main.c:1392 +#: ../gtk/main.c:1299 msgid "Call paused" msgstr "Позив је заустављен" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "Кодеци" +msgstr "од %s" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" -msgstr "" +msgstr "%s предлаже да започнете видео. Да ли прихватате ?" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Веза веб сајта" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Линфон — интернет телефон са снимком" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (основно)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "Преселили смо се на %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -"Ниједна звучна картица није откривен ана овом рачунару.\n" +"Ниједна звучна картица није откривена на овом рачунару.\n" "Нећете бити у могућности да шаљете или да примате звучне позиве." -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "Слободан СИП телефон са снимком" @@ -261,7 +243,7 @@ msgstr "Позови" #: ../gtk/friendlist.c:726 msgid "Chat" -msgstr "" +msgstr "Ћаскај" #: ../gtk/friendlist.c:756 #, c-format @@ -279,9 +261,9 @@ msgid "Delete contact '%s'" msgstr "Обришите контакт „%s“" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "Обришите контакт „%s“" +msgstr "Обришите историјат ћаскања за „%s“" #: ../gtk/friendlist.c:1029 #, c-format @@ -297,9 +279,8 @@ msgid "Status" msgstr "Стање" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Најмањи проток бита (kbit/s)" +msgstr "Проток бита ИП-а (kbit/s)" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -317,93 +298,93 @@ msgstr "Искључено" msgid "Account" msgstr "Налог" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "Енглески" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Француски" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Шведски" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Италијански" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Шпански" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "Бразилски португалски" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Пољски" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Немачки" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Руски" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "Јапански" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Холандски" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Мађарски" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Чешки" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "Кинески" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "Традиционални кинески" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "Норвешки" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" -msgstr "" +msgstr "Јеврејски" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" -msgstr "" +msgstr "Српски" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "" -"Трба поново да покренете линфон да би нови изабрани језик ступио на снагу." +"Треба поново да покренете линфон да би нови изабрани језик ступио у дејство." -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "Ништа" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "СРТП" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "ЗРТП" @@ -414,7 +395,7 @@ msgid "" "Would you like to open a browser to download it ?" msgstr "" "Новије издање је доступно са „%s“.\n" -"Да ли желите да отворите прегледник да га преузмете ?" +"Да ли желите да отворите прегледник и да га преузмете ?" #: ../gtk/update.c:91 msgid "You are running the lastest version." @@ -444,41 +425,37 @@ msgstr "Примам податке..." #, c-format msgid "Found %i contact" msgid_plural "Found %i contacts" -msgstr[0] "Нашао сам %i пријатеља" -msgstr[1] "Нашао сам %i пријатеља" -msgstr[2] "Нашао сам %i пријатеља" -msgstr[3] "Нашао сам једног пријатеља" +msgstr[0] "Нашао сам %i контакт" +msgstr[1] "Нашао сам %i контакта" +msgstr[2] "Нашао сам %i контаката" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Добродошли !\n" +"Добро дошли!\n" "Овај помоћник ће вам помоћи да користите СИП налог за ваше позиве." #: ../gtk/setupwizard.c:43 -#, fuzzy msgid "Create an account on linphone.org" -msgstr "Направите налог тако што ћете изабрати корисничко име" +msgstr "Направи налог на линфон.орг-у" #: ../gtk/setupwizard.c:44 -#, fuzzy msgid "I have already a linphone.org account and I just want to use it" -msgstr "Већ имам један налог и желим да га користим" +msgstr "Већ имам налог линфон.орг-а и желим да га користим" #: ../gtk/setupwizard.c:45 -#, fuzzy msgid "I have already a sip account and I just want to use it" -msgstr "Већ имам један налог и желим да га користим" +msgstr "Већ имам сип налог и желим да га користим" #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" -msgstr "" +msgstr "Желим да наведем удаљену путању подешавања" #: ../gtk/setupwizard.c:89 msgid "Enter your linphone.org username" -msgstr "" +msgstr "Унесите ваше корисничко име линфон.орг-а" #: ../gtk/setupwizard.c:102 ../gtk/parameters.ui.h:79 ../gtk/ldap.ui.h:4 msgid "Username:" @@ -490,57 +467,56 @@ msgstr "Лозинка:" #: ../gtk/setupwizard.c:124 msgid "Enter your account informations" -msgstr "" +msgstr "Унесите податке вашег налога" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "Корисничко име" +msgstr "Корисник*" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "Лозинка" +msgstr "Лозинка*" #: ../gtk/setupwizard.c:144 msgid "Domain*" -msgstr "" +msgstr "Домен*" #: ../gtk/setupwizard.c:145 msgid "Proxy" -msgstr "" +msgstr "Посредник" #: ../gtk/setupwizard.c:317 msgid "(*) Required fields" -msgstr "" +msgstr "(*) Обавезна поља" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "Корисничко име:" +msgstr "Корисник: (*)" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "Лозинка:" +msgstr "Лозинка: (*)" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" -msgstr "" +msgstr "Ел. пошта: (*)" #: ../gtk/setupwizard.c:324 msgid "Confirm your password: (*)" -msgstr "" +msgstr "Потврдите вашу лозинку: (*)" #: ../gtk/setupwizard.c:338 msgid "Keep me informed with linphone updates" -msgstr "" +msgstr "Обавештавај ме о ажурирањима линфона" #: ../gtk/setupwizard.c:394 msgid "" "Error, account not validated, username already used or server unreachable.\n" "Please go back and try again." msgstr "" +"Грешка, налог није потврђен, корисничко име је већ у употреби или је сервер " +"недоступан.\n" +"Вратите се назад и покушајте опет." #: ../gtk/setupwizard.c:405 msgid "Thank you. Your account is now configured and ready for use." @@ -552,49 +528,50 @@ msgid "" "email.\n" "Then come back here and press Next button." msgstr "" +"Потврдите ваш налог притиском на везу коју смо вам управо послали ел. " +"поштом.\n" +"Затим се вратите овде и притисните дугме „Напред“." -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "Помоћник подешавања налога" +msgstr "Помоћник подешавања СИП налога" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" -msgstr "Добродошли у помоћника подешавања налога" +msgstr "Добро дошли у помоћника подешавања налога" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Помоћник подешавања налога" -#: ../gtk/setupwizard.c:629 -#, fuzzy +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" -msgstr "Подесите СИП налог" +msgstr "Подесите ваш налог (корак 1/1)" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" -msgstr "" +msgstr "Унесите ваше корисничко име сип-а (корак 1/1)" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" -msgstr "" +msgstr "Унесите податке налога (корак 1/2)" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" -msgstr "" +msgstr "Потврђивање (корак 2/2)" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" -msgstr "" +msgstr "Грешка" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" -msgstr "" +msgstr "Завршавам" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 #, c-format msgid "Call #%i" -msgstr "Позови #%i" +msgstr "Позив бр. %i" #: ../gtk/incall_view.c:155 #, c-format @@ -602,62 +579,56 @@ msgid "Transfer to call #%i with %s" msgstr "Пребаци позив #%i са %s" #: ../gtk/incall_view.c:211 ../gtk/incall_view.c:214 -#, fuzzy msgid "Not used" -msgstr "Нисам нашао" +msgstr "Не користи се" #: ../gtk/incall_view.c:221 msgid "ICE not activated" -msgstr "" +msgstr "ИЦЕ није покренут" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "Позив није успео." +msgstr "ИЦЕ није успео" #: ../gtk/incall_view.c:225 msgid "ICE in progress" -msgstr "" +msgstr "ИЦЕ је у току" #: ../gtk/incall_view.c:227 msgid "Going through one or more NATs" -msgstr "" +msgstr "Пролазим кроз један или више НАТ-са" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "Преусмерен" +msgstr "Непосредно" #: ../gtk/incall_view.c:231 msgid "Through a relay server" -msgstr "" +msgstr "Преко преносног сервера" #: ../gtk/incall_view.c:239 msgid "uPnP not activated" -msgstr "" +msgstr "уПнП није покренут" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "У току је тражење стуна..." +msgstr "уПнП је у току" #: ../gtk/incall_view.c:243 -#, fuzzy msgid "uPnp not available" -msgstr "недоступно" +msgstr "уПнП није доступан" #: ../gtk/incall_view.c:245 msgid "uPnP is running" -msgstr "" +msgstr "уПнП ради" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "Позив није успео." +msgstr "уПнП није успео" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" -msgstr "" +msgstr "Непосредно или кроз сервер" #: ../gtk/incall_view.c:267 ../gtk/incall_view.c:279 #, c-format @@ -665,128 +636,124 @@ msgid "" "download: %f\n" "upload: %f (kbit/s)" msgstr "" +"преузимање: %f\n" +"отпремање: %f (kbit/s)" #: ../gtk/incall_view.c:272 ../gtk/incall_view.c:274 #, c-format msgid "%ix%i @ %f fps" -msgstr "" +msgstr "%ix%i @ %f к/с" #: ../gtk/incall_view.c:304 -#, fuzzy, c-format +#, c-format msgid "%.3f seconds" -msgstr "%i секунда" +msgstr "%.3f секунде" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" -msgstr "" +msgstr "Прекини" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "Позивам..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00::00::00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "Долазни позив" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "добро" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "просечно" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "оскудно" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "јадно" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "много лоше" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "недоступно" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "Осигурано СРТП-ом" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "Осигурано ЗРТП-ом [потврђивање идентитета: %s]" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "Непроверено подешавање" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "Проверено подешавање" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "На конференцији" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "У позиву" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "Заустављен позив" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i::%02i::%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Позив је завршен." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" -msgstr "" +msgstr "Пренос је у току" -#: ../gtk/incall_view.c:806 -#, fuzzy +#: ../gtk/incall_view.c:828 msgid "Transfer done." -msgstr "Пребаци" +msgstr "Пренос је обављен." -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "Пребаци" +msgstr "Пренос није успео." -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "Настави" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "Застани" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" +"Снимам у\n" +"%s %s" -#: ../gtk/incall_view.c:926 -#, fuzzy +#: ../gtk/incall_view.c:948 msgid "(Paused)" -msgstr "Застани" +msgstr "(Паузирано)" #: ../gtk/loginframe.c:88 #, c-format @@ -796,93 +763,88 @@ msgstr "Унесите податке пријављивања за %s" #: ../gtk/config-fetching.c:57 #, c-format msgid "fetching from %s" -msgstr "" +msgstr "довлачим са „%s“" #: ../gtk/config-fetching.c:73 #, c-format msgid "Downloading of remote configuration from %s failed." -msgstr "" +msgstr "Преузимање удаљеног подешавања са „%s“ није успело." #: ../gtk/audio_assistant.c:98 msgid "No voice detected" -msgstr "" +msgstr "Глас није откривен" #: ../gtk/audio_assistant.c:99 msgid "Too low" -msgstr "" +msgstr "Сувише низак" #: ../gtk/audio_assistant.c:100 msgid "Good" -msgstr "" +msgstr "Добар" #: ../gtk/audio_assistant.c:101 msgid "Too loud" -msgstr "" +msgstr "Сувише гласан" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"Добродошли !\n" -"Овај помоћник ће вам помоћи да користите СИП налог за ваше позиве." +"Добро дошли!\n" +"Овај помоћник ће вам помоћи да подесите поставке звука за Линфон" #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Уређај за снимање:" +msgstr "Уређај за снимање" #: ../gtk/audio_assistant.c:329 msgid "Recorded volume" -msgstr "" +msgstr "Снимљени волумен" #: ../gtk/audio_assistant.c:333 msgid "No voice" -msgstr "" +msgstr "Нема гласа" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Уређај за пуштање:" +msgstr "Уређај за пуштање" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" -msgstr "" +msgstr "Пусти три писка" #: ../gtk/audio_assistant.c:403 msgid "Press the record button and say some words" -msgstr "" +msgstr "Притисните дугме за снимање и реците нешто" #: ../gtk/audio_assistant.c:404 msgid "Listen to your record voice" -msgstr "" +msgstr "Слушајте ваш снимљени глас" #: ../gtk/audio_assistant.c:433 msgid "Let's start Linphone now" -msgstr "" +msgstr "Хајде сада да покренемо Линфон" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "Помоћник подешавања налога" +msgstr "Помоћник звука" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "Помоћник подешавања налога" +msgstr "Помоћник звука" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" -msgstr "" +msgstr "Дотеривање појачања микрофона" #: ../gtk/audio_assistant.c:517 msgid "Speaker volume calibration" -msgstr "" +msgstr "Дотеривање јачине звука звучника" #: ../gtk/audio_assistant.c:522 msgid "Record and Play" -msgstr "" +msgstr "Снимите и пустите" #: ../gtk/main.ui.h:1 msgid "Callee name" @@ -893,25 +855,24 @@ msgid "Send" msgstr "Пошаљи" #: ../gtk/main.ui.h:3 -#, fuzzy msgid "End conference" -msgstr "На конференцији" +msgstr "Заврши конференцију" #: ../gtk/main.ui.h:7 msgid "Record this call to an audio file" -msgstr "" +msgstr "Сними овај позив у звучну датотеку" #: ../gtk/main.ui.h:8 msgid "Video" -msgstr "" +msgstr "Видео" #: ../gtk/main.ui.h:10 msgid "Mute" -msgstr "" +msgstr "Утишај" #: ../gtk/main.ui.h:11 msgid "Transfer" -msgstr "Пребаци" +msgstr "Пренос" #: ../gtk/main.ui.h:14 msgid "In call" @@ -931,7 +892,7 @@ msgstr "Сви корисници" #: ../gtk/main.ui.h:18 msgid "Online users" -msgstr "Корисницима на мрежи" +msgstr "Корисници на мрежи" #: ../gtk/main.ui.h:19 msgid "ADSL" @@ -950,13 +911,12 @@ msgid "_Options" msgstr "_Могућности" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Потврђујем" +msgstr "Постави путању подешавања" #: ../gtk/main.ui.h:24 msgid "Always start video" -msgstr "" +msgstr "Увек покрени видео" #: ../gtk/main.ui.h:25 msgid "Enable self-view" @@ -979,9 +939,8 @@ msgid "Check _Updates" msgstr "Провери _ажурирања" #: ../gtk/main.ui.h:30 -#, fuzzy msgid "Account assistant" -msgstr "Помоћник подешавања налога" +msgstr "Помоћник налога" #: ../gtk/main.ui.h:32 msgid "SIP address or phone number:" @@ -1017,7 +976,7 @@ msgstr "Мој тренутни идентитет:" #: ../gtk/main.ui.h:40 ../gtk/tunnel_config.ui.h:7 msgid "Username" -msgstr "Корисничко име" +msgstr "Корисник" #: ../gtk/main.ui.h:41 ../gtk/tunnel_config.ui.h:8 msgid "Password" @@ -1040,28 +999,27 @@ msgid "Login information" msgstr "Подаци пријављивања" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "Добродошли !" +msgid "Welcome!" +msgstr "Добро дошли!" #: ../gtk/main.ui.h:47 msgid "Delete" -msgstr "" +msgstr "Обриши" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "О линфону" +msgid "About Linphone" +msgstr "О Линфону" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "(C) Беледон комуникације,2010\n" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "(C) Беледоне комуникације, 2010\n" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." msgstr "" -"Интернет телефон са снимком који користи уобичајени СИП (rfc3261) протокол." +"Интернет телефон са снимком који користи уобичајени СИП протокол (rfc3261)." #: ../gtk/about.ui.h:5 -#, fuzzy msgid "" "fr: Simon Morlat\n" "en: Simon Morlat and Delphine Perreau\n" @@ -1087,6 +1045,8 @@ msgstr "" "pl: Robert Nasiadek \n" "cs: Petr Pisar \n" "hu: anonymous\n" +"he: Eli Zaretskii \n" +"sr: Мирослав Николић \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1110,7 +1070,7 @@ msgstr "Линфоново прозорче прочишћавања" #: ../gtk/log.ui.h:2 msgid "Scroll to end" -msgstr "" +msgstr "Премакни на крај" #: ../gtk/password.ui.h:1 msgid "Linphone - Authentication required" @@ -1142,7 +1102,7 @@ msgstr "Ваш СИП идентитет:" #: ../gtk/sip_account.ui.h:3 msgid "Looks like sip:@" -msgstr "Изгледа као „sip:<корисничко-име>@<домен>" +msgstr "Изгледа као „sip:<корисничко-име>@<домен>“" #: ../gtk/sip_account.ui.h:4 msgid "sip:" @@ -1154,29 +1114,27 @@ msgstr "Адреса СИП посредника:" #: ../gtk/sip_account.ui.h:6 msgid "Looks like sip:" -msgstr "Изгледа као „sip:<назив посредника>" +msgstr "Изгледа као „sip:<назив посредника>“" #: ../gtk/sip_account.ui.h:7 msgid "Registration duration (sec):" msgstr "Трајање уписа (сек):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Рута (изборно):" +msgstr "Параметри пријатеља (изборно):" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" -msgstr "" +msgstr "АВПФ редован РТЦП интервал (сек):" #: ../gtk/sip_account.ui.h:10 msgid "Route (optional):" msgstr "Рута (изборно):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Пренос" +msgstr "Пренос" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1187,9 +1145,8 @@ msgid "Publish presence information" msgstr "Објави податке о присуству" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Укључи" +msgstr "Укључи АВПФ" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1197,15 +1154,15 @@ msgstr "Подесите СИП налог" #: ../gtk/parameters.ui.h:1 msgid "anonymous" -msgstr "" +msgstr "безимено" #: ../gtk/parameters.ui.h:2 msgid "GSSAPI" -msgstr "" +msgstr "ГССАПИ" #: ../gtk/parameters.ui.h:3 msgid "SASL" -msgstr "" +msgstr "САСЛ" #: ../gtk/parameters.ui.h:4 msgid "default soundcard" @@ -1217,7 +1174,7 @@ msgstr "звучна картица" #: ../gtk/parameters.ui.h:6 msgid "default camera" -msgstr "основна камера" +msgstr "основна камерица" #: ../gtk/parameters.ui.h:7 msgid "CIF" @@ -1225,13 +1182,13 @@ msgstr "ЦИФ" #: ../gtk/parameters.ui.h:8 msgid "Audio codecs" -msgstr "Звучни кодеци" +msgstr "Кодеци звука" #: ../gtk/parameters.ui.h:9 msgid "Video codecs" msgstr "Кодеци снимка" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "В" @@ -1281,28 +1238,27 @@ msgstr "РТП/УДП звука:" #: ../gtk/parameters.ui.h:22 msgid "Fixed" -msgstr "" +msgstr "Неизмењиво" #: ../gtk/parameters.ui.h:23 -#, fuzzy msgid "Media encryption is mandatory" -msgstr "Врста шифровања медија" +msgstr "Шифровање медија је обавезно" #: ../gtk/parameters.ui.h:24 msgid "Tunnel" -msgstr "" +msgstr "Тунел" #: ../gtk/parameters.ui.h:25 msgid "DSCP fields" -msgstr "" +msgstr "ДСЦП поља" #: ../gtk/parameters.ui.h:26 msgid "SIP/TCP port" -msgstr "" +msgstr "СИП/ТЦП прикључник" #: ../gtk/parameters.ui.h:27 msgid "SIP/UDP port" -msgstr "" +msgstr "СИП/УДП прикључник" #: ../gtk/parameters.ui.h:28 msgid "Network protocol and ports" @@ -1313,23 +1269,20 @@ msgid "Direct connection to the Internet" msgstr "Непосредна веза на Интернет" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "Иза НАТ-а / мрежне баријере (испод наведите ИП мрежног пролаза)" +msgstr "Иза НАТ-а / мрежне баријере (наведите ИП мрежног пролаза)" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Иза НАТ-а / мрежне баријере (користите СТУН за решавање)" #: ../gtk/parameters.ui.h:32 -#, fuzzy msgid "Behind NAT / Firewall (use ICE)" -msgstr "Иза НАТ-а / мрежне баријере (користите СТУН за решавање)" +msgstr "Иза НАТ-а / мрежне баријере (користите ИЦЕ)" #: ../gtk/parameters.ui.h:33 -#, fuzzy msgid "Behind NAT / Firewall (use uPnP)" -msgstr "Иза НАТ-а / мрежне баријере (користите СТУН за решавање)" +msgstr "Иза НАТ-а / мрежне баријере (користите уПнП)" #: ../gtk/parameters.ui.h:34 msgid "Public IP address:" @@ -1345,7 +1298,7 @@ msgstr "НАТ и мрежна баријера" #: ../gtk/parameters.ui.h:37 msgid "Network settings" -msgstr "Подешавања мреже" +msgstr "Мрежа" #: ../gtk/parameters.ui.h:38 msgid "Ring sound:" @@ -1384,9 +1337,8 @@ msgid "Prefered video resolution:" msgstr "Жељена резолуција снимка:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Улазни уређај снимка:" +msgstr "Начин излаза снимка:" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1394,7 +1346,7 @@ msgstr "Снимак" #: ../gtk/parameters.ui.h:49 msgid "Multimedia settings" -msgstr "Подешавања мултимедија" +msgstr "Мултимедија" #: ../gtk/parameters.ui.h:50 msgid "This section defines your SIP address when not using a SIP account" @@ -1418,7 +1370,7 @@ msgstr "Основни идентитет" #: ../gtk/parameters.ui.h:55 msgid "Wizard" -msgstr "" +msgstr "Чаробњак" #: ../gtk/parameters.ui.h:56 msgid "Add" @@ -1446,7 +1398,7 @@ msgstr "Приватност" #: ../gtk/parameters.ui.h:62 msgid "Manage SIP Accounts" -msgstr "Управљај СИП налозима" +msgstr "СИП налози" #: ../gtk/parameters.ui.h:63 ../gtk/tunnel_config.ui.h:4 msgid "Enable" @@ -1466,11 +1418,11 @@ msgstr "0 значи „неограничено“" #: ../gtk/parameters.ui.h:67 msgid "Upload speed limit in Kbit/sec:" -msgstr "Ограничење брзине слања у Kb/s:" +msgstr "Ограничи брзину слања на (Kb/s):" #: ../gtk/parameters.ui.h:68 msgid "Download speed limit in Kbit/sec:" -msgstr "Ограничење брзине преузимања у Kb/s:" +msgstr "Ограничи брзину преузимања на (Kb/s):" #: ../gtk/parameters.ui.h:69 msgid "Enable adaptive rate control" @@ -1509,29 +1461,22 @@ msgid "User interface" msgstr "Корисничко сучеље" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "Адреса СИП посредника:" +msgstr "Адреса сервера:" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Потврђивање идентитета није успело" +msgstr "Начин потврђивања идентитета:" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "натпис" +msgid "LDAP Account setup" +msgstr "Подешавања ЛДАП налога" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Посреднички налози" +msgid "LDAP" +msgstr "ЛДАП" #: ../gtk/parameters.ui.h:82 -msgid "LDAP" -msgstr "" - -#: ../gtk/parameters.ui.h:83 msgid "Done" msgstr "Готово" @@ -1553,263 +1498,188 @@ msgstr "Линфон" #: ../gtk/waiting.ui.h:2 msgid "Please wait" -msgstr "Молим сачекајте" +msgstr "Сачекајте мало" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Подешавања" +msgstr "ДСЦП подешавања" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" -msgstr "" +msgstr "СИП" #: ../gtk/dscp_settings.ui.h:3 -#, fuzzy msgid "Audio RTP stream" -msgstr "РТП/УДП звука:" +msgstr "РТП ток звука" #: ../gtk/dscp_settings.ui.h:4 -#, fuzzy msgid "Video RTP stream" -msgstr "РТП/УДП снимка:" +msgstr "РТП ток снимка" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" -msgstr "" +msgstr "Подесите ДСЦП вредности (хексадецимално)" #: ../gtk/call_statistics.ui.h:1 msgid "Call statistics" -msgstr "" +msgstr "Статистика позива" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" -msgstr "Звучни кодеци" +msgstr "Звучни кодек" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" -msgstr "Кодеци снимка" +msgstr "Видео кодек" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" -msgstr "" +msgstr "Искоришћеност ИП пропусног опсега звука" #: ../gtk/call_statistics.ui.h:5 msgid "Audio Media connectivity" -msgstr "" +msgstr "Повезивост медија звука" #: ../gtk/call_statistics.ui.h:6 msgid "Video IP bandwidth usage" -msgstr "" +msgstr "Искоришћеност ИП пропусног опсега снимка" #: ../gtk/call_statistics.ui.h:7 msgid "Video Media connectivity" -msgstr "" +msgstr "Повезивост медија снимка" #: ../gtk/call_statistics.ui.h:8 msgid "Round trip time" -msgstr "" +msgstr "Време повратног путовања" #: ../gtk/call_statistics.ui.h:9 msgid "Video resolution received" -msgstr "" +msgstr "Примљена резолуција снимка" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "Жељена резолуција снимка:" +msgstr "Послата резолуција снимка" #: ../gtk/call_statistics.ui.h:11 msgid "RTP profile" -msgstr "" +msgstr "РТП профил" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "Подаци о пријатељу" +msgstr "Статистика позива и подаци" #: ../gtk/tunnel_config.ui.h:1 -#, fuzzy msgid "Configure VoIP tunnel" -msgstr "Подесите СИП налог" +msgstr "Подесите ВоИП тунел" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" -msgstr "" +msgstr "Домаћин" #: ../gtk/tunnel_config.ui.h:3 msgid "Port" -msgstr "" +msgstr "Прикључник" #: ../gtk/tunnel_config.ui.h:6 msgid "Configure tunnel" -msgstr "" +msgstr "Подесите тунел" #: ../gtk/tunnel_config.ui.h:9 msgid "Configure http proxy (optional)" -msgstr "" - -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "Г" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "Б" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "А" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" +msgstr "Подесите хттп посредника (изборно)" #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Подешавања" +msgstr "ЛДАП подешавања" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" -msgstr "" +msgstr "Користи ТЛС везу" #: ../gtk/ldap.ui.h:7 -#, fuzzy msgid "Not yet available" -msgstr "недоступно" +msgstr "Још није доступно" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Кодеци" +msgstr "Веза" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" -msgstr "" +msgstr "Свежи назив домена" #: ../gtk/ldap.ui.h:10 msgid "Authname" -msgstr "" +msgstr "Назив потврђивања" #: ../gtk/ldap.ui.h:11 msgid "Realm" -msgstr "" +msgstr "Подручје" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Звук" +msgstr "САСЛ" #: ../gtk/ldap.ui.h:13 msgid "Base object:" -msgstr "" +msgstr "Предмет основе:" #: ../gtk/ldap.ui.h:15 #, no-c-format msgid "Filter (%s for name):" -msgstr "" +msgstr "Пропусник (%s за име):" #: ../gtk/ldap.ui.h:16 msgid "Name Attribute:" -msgstr "" +msgstr "Особине имена:" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "СИП адреса или број телефона:" +msgstr "Особине СИП адресе:" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" -msgstr "" +msgstr "Особине за пропитивање:" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Потражите неког" +msgstr "Потражите" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" -msgstr "" +msgstr "Време за претрагу:" #: ../gtk/ldap.ui.h:21 msgid "Max results:" -msgstr "" +msgstr "Највише резултата:" #: ../gtk/ldap.ui.h:22 msgid "Follow Aliases" -msgstr "" +msgstr "Прати надимке" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Снимак" +msgstr "Разно" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" -msgstr "" +msgstr "БЕЗИМЕНО" #: ../gtk/ldap.ui.h:25 msgid "SIMPLE" -msgstr "" +msgstr "ЈЕДНОСТАВНО" #: ../gtk/ldap.ui.h:26 msgid "DIGEST-MD5" -msgstr "" +msgstr "ДИГЕСТ-МД5" #: ../gtk/ldap.ui.h:27 msgid "NTLM" -msgstr "" +msgstr "НТЛМ" #: ../gtk/config-uri.ui.h:1 msgid "Specifying a remote configuration URI" -msgstr "" +msgstr "Наводим удаљену путању подешавања" #: ../gtk/config-uri.ui.h:2 msgid "" @@ -1819,89 +1689,84 @@ msgid "" "Linphone will restart automatically in order to fetch and take into account " "the new configuration. " msgstr "" - -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" +"Ово прозорче омогућава подешавање хттп или хттпс адресе када се подешавање " +"добавља на покретању.\n" +"Унесите или измените путању подешавања. Након што притиснете „У реду“, " +"Линфон ће се сам поново покренути како би довукао и унео у налог нова " +"подешавања. " #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Повезујем се..." +msgstr "Подешавам..." #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." -msgstr "" +msgstr "Сачекајте док довучем подешавања са сервера..." -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Спреман" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Потврђујем" +msgstr "Подешавам" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Тражим одредиште телефонског броја..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Не могу да решим овај број." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Ступам у везу" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "Не могу да позовем" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "Извините, достигли смо највећи број истовремених позива" -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "вам се обраћа" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr " и затражени само-одговор." -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "." - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "Мењам параметре позива..." -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Повезан сам." -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "Позив је прекинут" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "Не могу да зауставим позив" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "Заустављам тренутни позив..." -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "У току је тражење стуна..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." -msgstr "" +msgstr "Прикупљање месних ИЦЕ кандидата је у току..." #: ../coreapi/friend.c:33 msgid "Online" @@ -1948,15 +1813,14 @@ msgid "Pending" msgstr "На чекању" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Трајање" +msgstr "На одмору" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Непозната грешка" +msgid "Unknown status" +msgstr "Непознато стање" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1964,7 +1828,7 @@ msgstr "" "Адреса сип посредника коју сте унели је неисправна, мора почети на „sip:“ за " "којим следи назив домаћина." -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1973,254 +1837,160 @@ msgstr "" "Треба да изгледа као „sip:корисник@домен-посредника, као што је „sip:" "alice@example.net“" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "Не могу да се пријавим као %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "Удаљено звоњење." -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "Удаљено звоњење..." -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "Ранији медиј." -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "Позив са „%s“ је заустављен." -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "Позив на који је одговорио „%s“ — на чекању." -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "Позив је настављен." -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "На позив је одговорио „%s“." -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." -msgstr "" +msgstr "Несагласно, проверите кодеке или безбедносна подешавања..." -#: ../coreapi/callbacks.c:512 -#, fuzzy +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "Медијски параметри су несагласни." + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." -msgstr "Позив нам је настављен..." +msgstr "Наставили смо." -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." -msgstr "" +msgstr "Друга страна нас је паузирала." -#: ../coreapi/callbacks.c:556 -#, fuzzy +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." -msgstr "Позив је ажуриран удаљеним..." +msgstr "Позив је освежен удаљеним." -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Позив је завршен." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Корисник је заузет." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Корисник је привремено недоступан." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "Корисник не жели да буде узнемираван." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Позив је одбијен." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." -msgstr "" +msgstr "Истекло је време захтева." -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "Преусмерен" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "" - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "Позив није успео." -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Уписивање на „%s“ је успело." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "Исписивање са „%s“ је обављено." -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "нема ограничења одговора" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "Уписивање на „%s“ није успело: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" -msgstr "" +msgstr "Услуга није доступна, поново покушавам" -#: ../coreapi/linphonecall.c:177 +#: ../coreapi/linphonecall.c:174 #, c-format msgid "Authentication token is %s" msgstr "Симбол потврђивања идентитета је „%s“" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "Пропустили сте %i позив." msgstr[1] "Пропустили сте %i позива." msgstr[2] "Пропустили сте %i позива." -msgstr[3] "Пропустили сте један позив." -#~ msgid "aborted" -#~ msgstr "прекинути" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" -#~ msgid "completed" -#~ msgstr "завршени" +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" -#~ msgid "missed" -#~ msgstr "пропуштени" +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s у %s\n" -#~ "Позива: %s\n" -#~ "Прима: %s\n" -#~ "Стање: %s\n" -#~ "Трајање: %i мин %i сек\n" +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" -#~ msgid "Outgoing call" -#~ msgstr "Одлазни позив" +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" -#~ msgid "No response." -#~ msgstr "Нема одговора." - -#~ msgid "Protocol error." -#~ msgstr "Грешка у протоколу." - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Не могу да обрадим дату сип адресу. Сип адреса обично изгледа као „sip:" -#~ "корисник@домен“" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Изгледа да ваш рачунар користи АЛСА управљачке програме за звук.\n" -#~ "То је најбољи избор. Међутим недостаје пцм осс модул\n" -#~ "за емулацију а потребан је линфону. Молим извршите\n" -#~ "„modprobe snd-pcm-oss“ као администратор да га учитате." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Изгледа да ваш рачунар користи АЛСА управљачке програме за звук.\n" -#~ "То је најбољи избор. Међутим недостаје миксер осс модул\n" -#~ "за емулацију а потребан је линфону. Молим извршите\n" -#~ "„modprobe snd-mixer-oss“ као администратор да га учитате." - -#~ msgid "Chat with %s" -#~ msgstr "Ћаскајте са „%s“" - -#~ msgid "by %s" -#~ msgstr "од %s" - -#~ msgid "Please choose a username:" -#~ msgstr "Изаберите корисничко име:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "Проверавам да ли је „%s“ доступно..." - -#~ msgid "Please wait..." -#~ msgstr "Молим сачекајте..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "Извините ово корисничко име већ постоји. Покушајте неко друго." - -#~ msgid "Ok !" -#~ msgstr "У реду !" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "Проблем у комуникацији, касније покушајте опет." - -#~ msgid "Choosing a username" -#~ msgstr "Бирам корисничко име" - -#~ msgid "Verifying" -#~ msgstr "Проверавам" - -#~ msgid "Creating your account" -#~ msgstr "Правим ваш налог" - -#~ msgid "Now ready !" -#~ msgstr "Спремни смо сада !" - -#~ msgid "Enable video" -#~ msgstr "Укључи снимак" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "Унесите корисничко име, број телефона, или пуну сип адресу" - -#~ msgid "Keypad" -#~ msgstr "Тастатура" - -#~ msgid "Lookup:" -#~ msgstr "Потражи:" - -#~ msgid "in" -#~ msgstr "у" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "Упишите се на виртуелну\n" -#~ "мрежу ФОНИКС !" - -#~ msgid "We are being paused..." -#~ msgstr "Заустављени смо..." - -#~ msgid "No common codecs" -#~ msgstr "Нема познатих кодека" +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/sv.po b/po/sv.po index 59b307d05..9c326620c 100644 --- a/po/sv.po +++ b/po/sv.po @@ -1,20 +1,22 @@ -# SOME DESCRIPTIVE TITLE. -# Copyright (C) YEAR Free Software Foundation, Inc. -# This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. -# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: PACKAGE VERSION\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2009-02-17 15:22+0100\n" -"Last-Translator: Emmanuel Frécon \n" -"Language-Team: SWEDISH \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Swedish (http://www.transifex.com/projects/p/linphone-gtk/" +"language/sv/)\n" +"Language: sv\n" "MIME-Version: 1.0\n" -"Content-Type: text/plain; charset=utf-8\n" +"Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=(n != 1);\n" #: ../gtk/calllogs.c:148 ../gtk/friendlist.c:974 #, c-format @@ -27,28 +29,25 @@ msgid "Send text to %s" msgstr "Skicka text till %s" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "I samtal med" +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "avbrytade" +msgstr "" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "missade" +msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "Avböj" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -64,11 +63,6 @@ msgid_plural "%i seconds" msgstr[0] "" msgstr[1] "" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -76,11 +70,9 @@ msgid "" "%s\t%s\t" msgstr "" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -88,16 +80,15 @@ msgid "Conference" msgstr "" #: ../gtk/conference.c:46 -#, fuzzy msgid "Me" -msgstr "Mikrofon av" +msgstr "" #: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "Kunde inte hitta pixmap filen: %s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "ogiltig SIP kontakt!" @@ -134,21 +125,14 @@ msgstr "" "\\Program\\Linphone" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "Bekräftelse" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "Kontoinstallationsassistenten" +msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "Samtal med %s" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -161,76 +145,72 @@ msgstr "" "henne till din kontaktlista?\n" "Om du svarar nej, personen kommer att vara bannlyst." -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -"Mata in ditt lösenord för användaren %s\n" -"vid domänen %s:" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "Samtalshistorik" +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "Samtalet slut" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "Inkommande samtal" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "Avböj" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "avbrytade" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "Portar" +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "Webbsajt" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - en video Internet telefon" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (Default)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." msgstr "" -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "En gratis SIP video-telefon" @@ -247,9 +227,8 @@ msgid "Name" msgstr "Namn" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "Ringer %s" +msgstr "" #: ../gtk/friendlist.c:726 msgid "Chat" @@ -271,9 +250,9 @@ msgid "Delete contact '%s'" msgstr "Ta bort kontakt '%s'" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "Ta bort kontakt '%s'" +msgstr "" #: ../gtk/friendlist.c:1029 #, c-format @@ -289,9 +268,8 @@ msgid "Status" msgstr "Status" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "Min. datahastighet (kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -309,92 +287,92 @@ msgstr "Av" msgid "Account" msgstr "Konto" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "Engelska" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "Fransk" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "Svenska" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "Italiensk" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "Spanska" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "Portugisiska" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "Polska" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "Tyska" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "Ryska" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "Japanska" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "Nederländksa" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "Hungerska" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "Tjekiska" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "Kinesiska" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "Du behöver starta om programmet för att det nya språket ska synas." -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -440,26 +418,21 @@ msgstr[1] "Hittat kontakt %i" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"Välkommen!\n" -"Assistenten kommer att hjälpa dig använda ett SIP konto för dina samtal:" #: ../gtk/setupwizard.c:43 -#, fuzzy msgid "Create an account on linphone.org" -msgstr "Skapa ett konto genom att välja ett användarnamn" +msgstr "" #: ../gtk/setupwizard.c:44 -#, fuzzy msgid "I have already a linphone.org account and I just want to use it" -msgstr "Jag har redan ett konto och vill bara använda det." +msgstr "" #: ../gtk/setupwizard.c:45 -#, fuzzy msgid "I have already a sip account and I just want to use it" -msgstr "Jag har redan ett konto och vill bara använda det." +msgstr "" #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" @@ -482,14 +455,12 @@ msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "Användarnamn" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "Lösenord" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -504,14 +475,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "Användarnamn:" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "Lösenord:" +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -542,49 +511,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "Kontoinstallationsassistenten" +msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "Välkommen till kontoinstallationsassistenten" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "Kontoinstallationsassistenten" -#: ../gtk/setupwizard.c:629 -#, fuzzy +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" -msgstr "Konfigurera ett SIP konto" +msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 -#, fuzzy +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" -msgstr "Lägg på" +msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "Ringer %s" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -600,9 +566,8 @@ msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "Samtalet avböjdes." +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -613,9 +578,8 @@ msgid "Going through one or more NATs" msgstr "" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "Omdirigerat till %s..." +msgstr "" #: ../gtk/incall_view.c:231 msgid "Through a relay server" @@ -626,9 +590,8 @@ msgid "uPnP not activated" msgstr "" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "STUN uppslagning pågår..." +msgstr "" #: ../gtk/incall_view.c:243 msgid "uPnp not available" @@ -639,9 +602,8 @@ msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "Samtalet avböjdes." +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -664,116 +626,107 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "Ringer..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00:00:00" -#: ../gtk/incall_view.c:515 -#, fuzzy +#: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "Inkommande samtal" +msgstr "" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 -#, fuzzy +#: ../gtk/incall_view.c:722 msgid "In call" -msgstr "I samtal med" +msgstr "" -#: ../gtk/incall_view.c:738 -#, fuzzy +#: ../gtk/incall_view.c:758 msgid "Paused call" -msgstr "Lägg på" +msgstr "" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i:%02i:%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "Samtalet slut." -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "Samtalet avböjdes." +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "" @@ -783,9 +736,9 @@ msgid "Please enter login information for %s" msgstr "Mata in ditt lösenord för domänen %s:" #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "Inkommande samtal från %s" +msgstr "" #: ../gtk/config-fetching.c:73 #, c-format @@ -809,18 +762,14 @@ msgid "Too loud" msgstr "" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"Välkommen!\n" -"Assistenten kommer att hjälpa dig använda ett SIP konto för dina samtal:" #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "Mikrofon enhet:" +msgstr "" #: ../gtk/audio_assistant.c:329 msgid "Recorded volume" @@ -831,9 +780,8 @@ msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "Uppspelningsenhet:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -852,14 +800,12 @@ msgid "Let's start Linphone now" msgstr "" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "Assistent" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "Kontoinstallationsassistenten" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -874,9 +820,8 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "Samtalet slut." +msgstr "" #: ../gtk/main.ui.h:2 msgid "Send" @@ -919,36 +864,28 @@ msgid "All users" msgstr "" #: ../gtk/main.ui.h:18 -#, fuzzy msgid "Online users" msgstr "" -"Alla användare\n" -"Online användare" #: ../gtk/main.ui.h:19 msgid "ADSL" msgstr "" #: ../gtk/main.ui.h:20 -#, fuzzy msgid "Fiber Channel" msgstr "" -"ADSL\n" -"Fiber" #: ../gtk/main.ui.h:21 -#, fuzzy msgid "Default" -msgstr "%s (Default)" +msgstr "" #: ../gtk/main.ui.h:22 msgid "_Options" msgstr "" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "Bekräftelse" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -963,24 +900,20 @@ msgid "_Help" msgstr "" #: ../gtk/main.ui.h:27 -#, fuzzy msgid "Show debug window" -msgstr "Linphone debug fönster" +msgstr "" #: ../gtk/main.ui.h:28 -#, fuzzy msgid "_Homepage" -msgstr "Hemsidan" +msgstr "" #: ../gtk/main.ui.h:29 -#, fuzzy msgid "Check _Updates" -msgstr "Letar efter uppdateringar" +msgstr "" #: ../gtk/main.ui.h:30 -#, fuzzy msgid "Account assistant" -msgstr "Kontoinstallationsassistenten" +msgstr "" #: ../gtk/main.ui.h:32 msgid "SIP address or phone number:" @@ -991,9 +924,8 @@ msgid "Initiate a new call" msgstr "" #: ../gtk/main.ui.h:34 -#, fuzzy msgid "Contacts" -msgstr "Kontaktar" +msgstr "" #: ../gtk/main.ui.h:35 msgid "Search" @@ -1004,14 +936,12 @@ msgid "Add contacts from directory" msgstr "Lägg till kontakt ifrån katalogen" #: ../gtk/main.ui.h:37 -#, fuzzy msgid "Add contact" -msgstr "Hittat kontakt %i" +msgstr "" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "I samtal" +msgstr "" #: ../gtk/main.ui.h:39 msgid "My current identity:" @@ -1042,19 +972,19 @@ msgid "Login information" msgstr "Login information" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "Välkommen!" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "Apropå linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" msgstr "" #: ../gtk/about.ui.h:4 @@ -1102,9 +1032,8 @@ msgid "Scroll to end" msgstr "" #: ../gtk/password.ui.h:1 -#, fuzzy msgid "Linphone - Authentication required" -msgstr "Linphone - Autentisering krävs" +msgstr "" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" @@ -1119,9 +1048,8 @@ msgid "Clear all" msgstr "" #: ../gtk/call_logs.ui.h:3 -#, fuzzy msgid "Call back" -msgstr "Ringer %s" +msgstr "" #: ../gtk/sip_account.ui.h:1 msgid "Linphone - Configure a SIP account" @@ -1152,9 +1080,8 @@ msgid "Registration duration (sec):" msgstr "Registreringsfrekvens (sek.):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "Route (tillval):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1165,9 +1092,8 @@ msgid "Route (optional):" msgstr "Route (tillval):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "Transport" +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1178,9 +1104,8 @@ msgid "Publish presence information" msgstr "Publicera närvaro information" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "Möjliggör" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1203,9 +1128,8 @@ msgid "default soundcard" msgstr "default ljudkort" #: ../gtk/parameters.ui.h:5 -#, fuzzy msgid "a sound card" -msgstr "ett ljud kort\n" +msgstr "" #: ../gtk/parameters.ui.h:6 msgid "default camera" @@ -1216,20 +1140,14 @@ msgid "CIF" msgstr "" #: ../gtk/parameters.ui.h:8 -#, fuzzy msgid "Audio codecs" msgstr "" -"Audio codecs\n" -"Video codecs" #: ../gtk/parameters.ui.h:9 -#, fuzzy msgid "Video codecs" msgstr "" -"Audio codecs\n" -"Video codecs" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "" @@ -1310,23 +1228,20 @@ msgid "Direct connection to the Internet" msgstr "Direkt förbindelse till Internet" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "Bakom en NAT / brandvägg (specificera gatewap IP adress nedan)" +msgstr "" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "Bakom en NAT / brandvägg (använd STUN för att avgöra adressen)" #: ../gtk/parameters.ui.h:32 -#, fuzzy msgid "Behind NAT / Firewall (use ICE)" -msgstr "Bakom en NAT / brandvägg (använd STUN för att avgöra adressen)" +msgstr "" #: ../gtk/parameters.ui.h:33 -#, fuzzy msgid "Behind NAT / Firewall (use uPnP)" -msgstr "Bakom en NAT / brandvägg (använd STUN för att avgöra adressen)" +msgstr "" #: ../gtk/parameters.ui.h:34 msgid "Public IP address:" @@ -1381,9 +1296,8 @@ msgid "Prefered video resolution:" msgstr "Video upplösning:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "Video ingångsenhet:" +msgstr "" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1505,29 +1419,22 @@ msgid "User interface" msgstr "Användarinterface" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "SIP Adress" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Linphone - Autentisering krävs" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "etikett" +msgid "LDAP Account setup" +msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "Proxy konton" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "Klar" @@ -1552,9 +1459,8 @@ msgid "Please wait" msgstr "Vänta" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "Inställningar" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" @@ -1573,23 +1479,16 @@ msgid "Set DSCP values (in hexadecimal)" msgstr "" #: ../gtk/call_statistics.ui.h:1 -#, fuzzy msgid "Call statistics" -msgstr "Ringer %s" +msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" msgstr "" -"Audio codecs\n" -"Video codecs" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" msgstr "" -"Audio codecs\n" -"Video codecs" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1616,23 +1515,20 @@ msgid "Video resolution received" msgstr "" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "Video upplösning:" +msgstr "" #: ../gtk/call_statistics.ui.h:11 msgid "RTP profile" msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "Kontakt information" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 -#, fuzzy msgid "Configure VoIP tunnel" -msgstr "Konfigurera ett SIP konto" +msgstr "" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" @@ -1650,70 +1546,9 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "Inställningar" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" @@ -1724,9 +1559,8 @@ msgid "Not yet available" msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "Codecs" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1741,9 +1575,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "Audio" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1759,18 +1592,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "SIP Adress" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "Sök efter kontakter" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1785,9 +1616,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "Video" +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1818,91 +1648,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "Kontaktar" +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "Redo" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "Bekräftelse" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "Leta efter telefonnummer för destinationen..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "Kan inte nå dett nummer." #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "Kontaktar" -#: ../coreapi/linphonecore.c:2425 -#, fuzzy +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" -msgstr "Kunde inte ringa" +msgstr "" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:2745 -#, fuzzy +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" -msgstr "kontaktar dig." +msgstr "" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "" -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "" - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "Kopplad" -#: ../coreapi/linphonecore.c:3220 -#, fuzzy +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" -msgstr "avbrytade" +msgstr "" -#: ../coreapi/linphonecore.c:3412 -#, fuzzy +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" -msgstr "Kunde inte ringa" +msgstr "" -#: ../coreapi/linphonecore.c:3417 -#, fuzzy +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." -msgstr "Nuvarande samtal" +msgstr "" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "STUN uppslagning pågår..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1951,15 +1766,14 @@ msgid "Pending" msgstr "Pågående" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "Förlopp" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "Okänd bug" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." @@ -1967,7 +1781,7 @@ msgstr "" "SIP proxy adressen som du matade in är inte rätt, adressen måste starta med " "\"sip:\", följd av ett hostnamn" -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1975,564 +1789,159 @@ msgstr "" "SIP adressen som du matade in är inte rätt. Adressen borde se ut som sip:" "namn@domän, såsom sip:peter@exempel.se" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "Kunde inte logga in som %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "Ringer hos motparten." -#: ../coreapi/callbacks.c:373 -#, fuzzy +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." -msgstr "Ringer hos motparten." +msgstr "" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "Tidig media" -#: ../coreapi/callbacks.c:435 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:475 +#, c-format msgid "Call with %s is paused." -msgstr "Samtal med %s" +msgstr "" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:459 -#, fuzzy +#: ../coreapi/callbacks.c:498 msgid "Call resumed." -msgstr "Samtalet slut" +msgstr "" -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "" -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "Samtalet slut." -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "Användare upptagen." -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "Användaren temporärt inte tillgänglig." #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "Användaren vill inte bli störd." -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "Samtalet avböjdes." -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 -#, fuzzy +#: ../coreapi/callbacks.c:780 msgid "Redirected" -msgstr "Omdirigerat till %s..." - -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." msgstr "" -#: ../coreapi/callbacks.c:798 -#, fuzzy +#: ../coreapi/callbacks.c:835 msgid "Call failed." -msgstr "Samtalet avböjdes." +msgstr "" -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "Registrering hos %s lyckades." -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "Avregistrering hos %s lyckades." -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "Inget svar inom angiven tid" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "Registrering hos %s mislyckades: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "Linphone - Autentisering krävs" +msgstr "" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "Du har %i missat samtal" msgstr[1] "Du har %i missade samtal" -#~ msgid "aborted" -#~ msgstr "avbrytade" - -#~ msgid "completed" -#~ msgstr "avslutade" - -#~ msgid "missed" -#~ msgstr "missade" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s på %s\n" -#~ "Från: %s\n" -#~ "Till: %s\n" -#~ "Status: %s\n" -#~ "Längd: %i min %i sek\n" - -#~ msgid "Outgoing call" -#~ msgstr "Utgående samtal" - -#, fuzzy -#~ msgid "No response." -#~ msgstr "Inget svar inom angiven tid" - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "Kan inte förstå angiven SIP adress. En SIP adress vanligen ser ut som sip:" -#~ "användare@domänen" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "Din dator verkar använda ALSA drivrutiner för ljud.\n" -#~ "Detta är det bästa valet. Dock PCM OSS emuleringsmodulen\n" -#~ "saknas och linphone behöver ha det. Var god exekvera\n" -#~ "'modprobe snd-pcm-oss' som root för att ladda in den." - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "Din dator verkar använda ALSA drivrutiner för ljud.\n" -#~ "Detta är det bästa valet. Dock OSS mixer emuleringsmodulen\n" -#~ "saknas och linphone behöver ha det. Var god exekvera\n" -#~ "'modprobe snd-mixer-oss' som root för att ladda in den." - -#~ msgid "Chat with %s" -#~ msgstr "Chatta med %s" - -#~ msgid "Please choose a username:" -#~ msgstr "Välj ett användarnamn:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "Verifierar om '%s' är tillgänglig..." - -#~ msgid "Please wait..." -#~ msgstr "Var god dröj..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "Användarnamnet finns redan, försök med ett nytt namn." - -#~ msgid "Ok !" -#~ msgstr "Ok !" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "Kommunikationsproblem, prova igen senare." - -#~ msgid "Choosing a username" -#~ msgstr "Välj ditt användarnamn" - -#~ msgid "Verifying" -#~ msgstr "Verifierar" - -#~ msgid "Creating your account" -#~ msgstr "Skapar ditt konto" - -#~ msgid "Now ready !" -#~ msgstr "Klar nu!" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "På" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "Mata in användarnamn, telefonnummer eller SIP adress" - -#~ msgid "Lookup:" -#~ msgstr "Sök:" - -#~ msgid "in" -#~ msgstr "i" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "Registrera hos FONICS\n" -#~ "virtuella nätverk!" - -#~ msgid "Unmute" -#~ msgstr "Mikrofon på" - -#~ msgid "Contact list" -#~ msgstr "Kontaktlista" - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "Audio & Video" - -#~ msgid "Audio only" -#~ msgstr "Enbart audio" - -#~ msgid "Duration:" -#~ msgstr "Förlopp:" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "Samtalshistorik" - -#~ msgid "_Linphone" -#~ msgstr "_inphone" - -#, fuzzy -#~ msgid "gtk-cancel" -#~ msgstr "Kopplad" - -#~ msgid "Register at startup" -#~ msgstr "Registrera vid start" - -#, fuzzy -#~ msgid "gtk-close" -#~ msgstr "Kopplad" - -#~ msgid "Alsa sound source" -#~ msgstr "Alsa ljud ingång" - -#~ msgid "Alsa sound output" -#~ msgstr "Also ljud utgång" - -#~ msgid "DTMF generator" -#~ msgstr "DTMF generare" - -#~ msgid "The GSM full-rate codec" -#~ msgstr "Hög hastighet GSM codec" - -#~ msgid "The GSM codec" -#~ msgstr "GSM codec" - -#, fuzzy -#~ msgid "Sound capture filter for MacOS X Audio Unit" -#~ msgstr "Fånga ljud med OSS drivrutiner" - -#, fuzzy -#~ msgid "Sound playback filter for MacOS X Audio Unit" -#~ msgstr "Ljud utgång med OSS drivrutiner" - -#~ msgid "A filter to make conferencing" -#~ msgstr "Ett filter för konferens" - -#~ msgid "Raw files and wav reader" -#~ msgstr "Raw filer och WAV läsare" - -#~ msgid "Wav file recorder" -#~ msgstr "WAV fil inspelare" - -#~ msgid "A filter that send several inputs to one output." -#~ msgstr "En filter som skickar flera ingångar till en utgång" - -#~ msgid "The free and wonderful speex codec" -#~ msgstr "Den fria speex codec" - -#~ msgid "A filter that controls and measure sound volume" -#~ msgstr "Ett filter som kontrollerar och mäter ljudvolym" - -#~ msgid "A video4linux compatible source filter to stream pictures." -#~ msgstr "En video4linux kompatibel ingångsfilter för att strömma bilder" - -#~ msgid "A filter to grab pictures from Video4Linux2-powered cameras" -#~ msgstr "En filter för att fånga bilder från Video4Linux-2 capabla kameror" - -#~ msgid "A filter that outputs a static image." -#~ msgstr "En filter med statisk bild" - -#~ msgid "A pixel format converter" -#~ msgstr "En pixel format konverterare" - -#~ msgid "A video size converter" -#~ msgstr "En video storlek konverterare" - -#~ msgid "a small video size converter" -#~ msgstr "En liten video storlek konverterare" - -#~ msgid "Echo canceller using speex library" -#~ msgstr "Echo cancellering med hjälp av speex" - -#~ msgid "A filter that reads from input and copy to its multiple outputs." -#~ msgstr "" -#~ "En filter som läser från sin ingång och kopierar till multipla utgångar" - -#~ msgid "The theora video encoder from xiph.org" -#~ msgstr "Theora video encoder från xiph.org" - -#~ msgid "The open-source and royalty-free 'theora' video codec from xiph.org" -#~ msgstr "Theora video codec från xiph.org, öppen källkod och utan royalties" - -#~ msgid "The theora video decoder from xiph.org" -#~ msgstr "Theora video decoder från xiph.org" - -#~ msgid "A H.263 decoder using ffmpeg library" -#~ msgstr "En h.263 decoder via ffmpeg" - -#~ msgid "A MPEG4 decoder using ffmpeg library" -#~ msgstr "En MPEG4 decoder via ffmpeg" - -#~ msgid "A RTP/JPEG decoder using ffmpeg library" -#~ msgstr "En RTP/JPEG decoder via ffmpeg" - -#~ msgid "A MJPEG decoder using ffmpeg library" -#~ msgstr "En MJPEG decode via ffmpeg" - -#~ msgid "A snow decoder using ffmpeg library" -#~ msgstr "En snow decoder via ffmpeg" - -#~ msgid "A video H.263 encoder using ffmpeg library." -#~ msgstr "En video h.263 encoder via ffmpeg" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library. It is compliant with old " -#~ "RFC2190 spec." -#~ msgstr "" -#~ "En video h.263 encoder via ffmpeg, kompatibel med den gamla RFC2190 " -#~ "specificationen." - -#~ msgid "A video MPEG4 encoder using ffmpeg library." -#~ msgstr "En video MPEG4 encoder via ffmpeg" - -#~ msgid "A video snow encoder using ffmpeg library." -#~ msgstr "En video snow encoder via ffmpeg" - -#~ msgid "A RTP/MJPEG encoder using ffmpeg library." -#~ msgstr "En RTP/MJPEG encoder via ffmpeg" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library, compliant with old RFC2190 " -#~ "spec." -#~ msgstr "" -#~ "En video h.263 encoder via ffmpeg, kompatible med den gamla RFC2190 " -#~ "specifikationen." - -#~ msgid "" -#~ "The snow codec is royalty-free and is open-source. \n" -#~ "It uses innovative techniques that makes it one of most promising video " -#~ "codec. It is implemented within the ffmpeg project.\n" -#~ "However it is under development, quite unstable and compatibility with " -#~ "other versions cannot be guaranteed." -#~ msgstr "" -#~ "Snow codec:en är öppen källkod och utan royalties.\n" -#~ "Den använder sig av innovativa tekniker som gör den en av de bästa. Codec:" -#~ "en implementeras inom ffmpeg projektet.\n" -#~ "Dock, den är under utveckling och kompatibiliteten mellan versioner kan " -#~ "inte garanteras." - -#~ msgid "A MJPEG encoder using ffmpeg library." -#~ msgstr "En MJPEG encoder via ffmpeg" - -#, fuzzy -#~ msgid "A SDL-based video display" -#~ msgstr "En generisk video utgång" - -#~ msgid "A video4windows compatible source filter to stream pictures." -#~ msgstr "En video4windows kompatibel ingångsfilter för att strömma bilder." - -#~ msgid "A video for windows (vfw.h) based source filter to grab pictures." -#~ msgstr "En video för windows kompatibel ingångsfilter för att fånga bilder." - -#, fuzzy -#~ msgid "A video display based on windows DrawDib api" -#~ msgstr "En video utgångsfönster med SDL" - -#, fuzzy -#~ msgid "A filter that mixes down 16 bit sample audio streams" -#~ msgstr "En filter för att mäta nivåer på 16 bitars PCM audio strömmar" - -#, fuzzy -#~ msgid "A filter that converts from mono to stereo and vice versa." -#~ msgstr "Ett filter som kontrollerar och mäter ljudvolym" - -#, fuzzy -#~ msgid "Inter ticker communication filter." -#~ msgstr "Error med förbindelsen till servern." - -#, fuzzy -#~ msgid "Sound capture filter for MacOS X Audio Unit Service" -#~ msgstr "Fånga ljud med OSS drivrutiner" - -#, fuzzy -#~ msgid "Sound playback filter for MacOS X Audio Unit Service" -#~ msgstr "Ljud utgång med OSS drivrutiner" - -#, fuzzy -#~ msgid "A video display using X11+Xv" -#~ msgstr "En video utgångsfönster med SDL" - -#, fuzzy -#~ msgid "Sound capture filter for Android" -#~ msgstr "Fånga ljud med OSS drivrutiner" - -#, fuzzy -#~ msgid "Sound playback filter for Android" -#~ msgstr "Ljud utgång med OSS drivrutiner" - -#, fuzzy -#~ msgid "A filter that captures Android video." -#~ msgstr "Ett filter som kontrollerar och mäter ljudvolym" - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "Din dator verkar vara kopplad till ett IPv6 nätverk. Default, använder " -#~ "linphone IPv4. Uppdatera din konfiguration om du vill använda IPv6." - -#~ msgid "Show debug messages" -#~ msgstr "Visa debugfönstret" - -#~ msgid "Start call" -#~ msgstr "Ring" - -#~ msgid "_Modes" -#~ msgstr "_Media" - -#~ msgid "Created by Simon Morlat\n" -#~ msgstr "Skapad av Simon Morlat\n" - -#~ msgid "Accept" -#~ msgstr "Godkänn" - -#~ msgid "Incoming call from" -#~ msgstr "Inkommande samtal från" - -#~ msgid "Linphone - Incoming call" -#~ msgstr "Linphone - Inkommande samtal" - -#~ msgid "default soundcard\n" -#~ msgstr "default ljudkort\n" - -#~ msgid "" -#~ "Remote end seems to have disconnected, the call is going to be closed." -#~ msgstr "" -#~ "Motparten verkar ha avbrutit samtalet, samtalet kommer att avslutas." - -#~ msgid "Sorry, having multiple simultaneous calls is not supported yet !" -#~ msgstr "Förlåt, men linphone stödjer inte flera samtliga samtal än!" - -#~ msgid "Could not reach destination." -#~ msgstr "Kunde inte nå motparten." - -#~ msgid "Request Cancelled." -#~ msgstr "Förfrågan avbruten." - -#~ msgid "Bad request" -#~ msgstr "Fel förfråga." - -#~ msgid "User cannot be found at given address." -#~ msgstr "Användaren kan inte hittas vid den angivna adressen." - -#~ msgid "Remote user cannot support any of proposed codecs." -#~ msgstr "Motparten stödjer ingen av de föreslagna codecs." - -#~ msgid "Timeout." -#~ msgstr "time out." - -#~ msgid "Remote host was found but refused connection." -#~ msgstr "Motparten hittades men ville inte ta emot samtalet." - -#~ msgid "" -#~ "User is not reachable at the moment but he invites you\n" -#~ "to contact him using the following alternate resource:" -#~ msgstr "" -#~ "Användaren kan inte nås för tillfället men han/hon ber digatt kontakta " -#~ "honom/henna vid följande resurs:" - -#~ msgid "Digits" -#~ msgstr "Tangenter" - -#~ msgid "Main view" -#~ msgstr "Huvud vy" - -#~ msgid "No nat/firewall address supplied !" -#~ msgstr "Ingen NAT / brandväggs adress angiven!" - -#~ msgid "Invalid nat address '%s' : %s" -#~ msgstr "Fel NAT adress '%s': %s" - -#~ msgid "Gone" -#~ msgstr "Har gått" - -#~ msgid "Waiting for Approval" -#~ msgstr "Väntar för godkännandet" - -#~ msgid "Be Right Back" -#~ msgstr "Kommer strax tillbaka" - -#~ msgid "On The Phone" -#~ msgstr "På telefon" - -#~ msgid "Out To Lunch" -#~ msgstr "Lunchar" - -#~ msgid "Closed" -#~ msgstr "Stängt" - -#~ msgid "Unknown" -#~ msgstr "Okänd" - -#~ msgid "Bresilian" -#~ msgstr "Brasiliansk" - -#~ msgid "_View" -#~ msgstr "_Vy" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/zh_CN.po b/po/zh_CN.po index c0eab3db4..18a459c64 100644 --- a/po/zh_CN.po +++ b/po/zh_CN.po @@ -1,18 +1,18 @@ -# SIP Telephony Application. -# Copyright (C) 2001, 2002, 2011 Free Software Foundation, Inc. -# Simon Morlat , 2001. -# Jiang Honglei, 2002. -# Aron Xu , 2011. -# +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# +# Translators: msgid "" msgstr "" -"Project-Id-Version: linphone 3.3.2\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2011-01-08 23:51+0800\n" -"Last-Translator: Aron Xu \n" -"Language-Team: Chinese (simplified) \n" -"Language: zh\n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Chinese (China) (http://www.transifex.com/projects/p/linphone-" +"gtk/language/zh_CN/)\n" +"Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -29,28 +29,25 @@ msgid "Send text to %s" msgstr "发送消息给 %s" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "正在呼叫" +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "中断" +msgstr "" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "丢失" +msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "拒绝" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -64,11 +61,6 @@ msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -76,11 +68,9 @@ msgid "" "%s\t%s\t" msgstr "" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -88,16 +78,15 @@ msgid "Conference" msgstr "" #: ../gtk/conference.c:46 -#, fuzzy msgid "Me" -msgstr "静音" +msgstr "" #: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "无法打开位图文件:%s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "无效的 SIP 联系人!" @@ -132,21 +121,14 @@ msgid "" msgstr "指定工作目录(应为安装目录例如 C:\\Program Files\\Linphone)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "确认" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "帐户设置向导" +msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "与 %s 通话" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -158,68 +140,66 @@ msgstr "" "您是否允许他看到您的在线状态或者将它加为您的联系人允许?\n" "如果您回答否,则会将该人临时性的放入黑名单" -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" -msgstr "请输入 %s@%s 的密码:" +msgstr "" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "呼叫历史" +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "呼叫结束" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "呼入" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "拒绝" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "中断" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "端口" +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "网站" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - 互联网视频电话" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (默认)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -227,7 +207,7 @@ msgstr "" "未在此计算机上检测到声卡。\n" "您无法发送或接收音频呼叫。" -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "免费的 SIP 视频电话" @@ -244,9 +224,8 @@ msgid "Name" msgstr "名称" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "呼叫 %s" +msgstr "" #: ../gtk/friendlist.c:726 msgid "Chat" @@ -268,9 +247,9 @@ msgid "Delete contact '%s'" msgstr "删除联系人 %s" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "删除联系人 %s" +msgstr "" #: ../gtk/friendlist.c:1029 #, c-format @@ -286,9 +265,8 @@ msgid "Status" msgstr "状态" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "最小比特率(kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -306,92 +284,92 @@ msgstr "禁用" msgid "Account" msgstr "帐户" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "英语" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "法语" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "瑞典语" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "意大利语" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "西班牙语" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "巴西葡萄牙语" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "波兰语" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "德语" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "俄语" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "日语" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "荷兰语" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "匈牙利语" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "捷克语" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "中文" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "您需要重启 linphone 以使语言选择生效。" -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -436,26 +414,21 @@ msgstr[0] "找到 %i 联系方式" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"欢迎使用 Linphone!\n" -"设置向导将帮助您配置打网络电话的 SIP 帐户。" #: ../gtk/setupwizard.c:43 -#, fuzzy msgid "Create an account on linphone.org" -msgstr "通过选择一个用户名创建一个新的帐户" +msgstr "" #: ../gtk/setupwizard.c:44 -#, fuzzy msgid "I have already a linphone.org account and I just want to use it" -msgstr "我已经有一个帐户,并想使用原来的帐户" +msgstr "" #: ../gtk/setupwizard.c:45 -#, fuzzy msgid "I have already a sip account and I just want to use it" -msgstr "我已经有一个帐户,并想使用原来的帐户" +msgstr "" #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" @@ -478,14 +451,12 @@ msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "用户名" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "密码" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -500,14 +471,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "用户名:" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "密码:" +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -538,49 +507,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "帐户设置向导" +msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "欢迎使用帐户设置向导" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "帐户设置向导" -#: ../gtk/setupwizard.c:629 -#, fuzzy +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" -msgstr "配置 SIP 帐户" +msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 -#, fuzzy +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" -msgstr "终止呼叫" +msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "呼叫 %s" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -588,18 +554,16 @@ msgid "Transfer to call #%i with %s" msgstr "" #: ../gtk/incall_view.c:211 ../gtk/incall_view.c:214 -#, fuzzy msgid "Not used" -msgstr "未找到" +msgstr "" #: ../gtk/incall_view.c:221 msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "ICE 过滤器" +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -610,9 +574,8 @@ msgid "Going through one or more NATs" msgstr "" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "已重定向" +msgstr "" #: ../gtk/incall_view.c:231 msgid "Through a relay server" @@ -623,9 +586,8 @@ msgid "uPnP not activated" msgstr "" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "正在进行 Stun 查找..." +msgstr "" #: ../gtk/incall_view.c:243 msgid "uPnp not available" @@ -636,9 +598,8 @@ msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "ICE 过滤器" +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -661,116 +622,107 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "正在呼叫..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00::00::00" -#: ../gtk/incall_view.c:515 -#, fuzzy +#: ../gtk/incall_view.c:525 msgid "Incoming call" -msgstr "呼入" +msgstr "" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 -#, fuzzy +#: ../gtk/incall_view.c:722 msgid "In call" -msgstr "正在呼叫" +msgstr "" -#: ../gtk/incall_view.c:738 -#, fuzzy +#: ../gtk/incall_view.c:758 msgid "Paused call" -msgstr "正在呼叫" +msgstr "" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i::%02i::%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "通话结束。" -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 +#: ../gtk/incall_view.c:828 msgid "Transfer done." msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "呼叫失败。" +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 msgid "(Paused)" msgstr "" @@ -780,9 +732,9 @@ msgid "Please enter login information for %s" msgstr "请输入 %s 的登录信息" #: ../gtk/config-fetching.c:57 -#, fuzzy, c-format +#, c-format msgid "fetching from %s" -msgstr "来自 %s 的呼叫" +msgstr "" #: ../gtk/config-fetching.c:73 #, c-format @@ -806,18 +758,14 @@ msgid "Too loud" msgstr "" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"欢迎使用 Linphone!\n" -"设置向导将帮助您配置打网络电话的 SIP 帐户。" #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "录音设备:" +msgstr "" #: ../gtk/audio_assistant.c:329 msgid "Recorded volume" @@ -828,9 +776,8 @@ msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "回放设备:" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -849,14 +796,12 @@ msgid "Let's start Linphone now" msgstr "" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "配置向导" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "帐户设置向导" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -871,9 +816,8 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "通话结束。" +msgstr "" #: ../gtk/main.ui.h:2 msgid "Send" @@ -916,22 +860,16 @@ msgid "All users" msgstr "" #: ../gtk/main.ui.h:18 -#, fuzzy msgid "Online users" msgstr "" -"全部用户\n" -"在线用户" #: ../gtk/main.ui.h:19 msgid "ADSL" msgstr "" #: ../gtk/main.ui.h:20 -#, fuzzy msgid "Fiber Channel" msgstr "" -"ADSL\n" -"光纤" #: ../gtk/main.ui.h:21 msgid "Default" @@ -942,9 +880,8 @@ msgid "_Options" msgstr "" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "确认" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -959,24 +896,20 @@ msgid "_Help" msgstr "" #: ../gtk/main.ui.h:27 -#, fuzzy msgid "Show debug window" -msgstr "Linphone 调试窗口" +msgstr "" #: ../gtk/main.ui.h:28 -#, fuzzy msgid "_Homepage" -msgstr "主页" +msgstr "" #: ../gtk/main.ui.h:29 -#, fuzzy msgid "Check _Updates" -msgstr "检查更新" +msgstr "" #: ../gtk/main.ui.h:30 -#, fuzzy msgid "Account assistant" -msgstr "帐户设置向导" +msgstr "" #: ../gtk/main.ui.h:32 msgid "SIP address or phone number:" @@ -999,14 +932,12 @@ msgid "Add contacts from directory" msgstr "从目录增加联系人" #: ../gtk/main.ui.h:37 -#, fuzzy msgid "Add contact" -msgstr "找到 %i 联系方式" +msgstr "" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "呼入" +msgstr "" #: ../gtk/main.ui.h:39 msgid "My current identity:" @@ -1037,19 +968,19 @@ msgid "Login information" msgstr "登录信息" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "欢迎!" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "关于 Linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" msgstr "" #: ../gtk/about.ui.h:4 @@ -1057,7 +988,6 @@ msgid "An internet video phone using the standard SIP (rfc3261) protocol." msgstr "一个采用标准 SIP (rfc3261) 协议的互联网视频电话" #: ../gtk/about.ui.h:5 -#, fuzzy msgid "" "fr: Simon Morlat\n" "en: Simon Morlat and Delphine Perreau\n" @@ -1072,18 +1002,6 @@ msgid "" "hu: anonymous\n" "he: Eli Zaretskii \n" msgstr "" -"fr: Simon Morlat\n" -"en: Simon Morlat and Delphine Perreau\n" -"it: Alberto Zanoni \n" -"de: Jean-Jacques Sarton \n" -"sv: Daniel Nylander \n" -"es: Jesus Benitez \n" -"ja: YAMAGUCHI YOSHIYA \n" -"pt_BR: Rafael Caesar Lenzi \n" -"pl: Robert Nasiadek \n" -"cs: Petr Pisar \n" -"hu: anonymous\n" -"zh_CN: Jiang Honglei 和 Aron Xu \n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1110,9 +1028,8 @@ msgid "Scroll to end" msgstr "" #: ../gtk/password.ui.h:1 -#, fuzzy msgid "Linphone - Authentication required" -msgstr "Linphone - 需要认证" +msgstr "" #: ../gtk/password.ui.h:2 msgid "Please enter the domain password" @@ -1127,9 +1044,8 @@ msgid "Clear all" msgstr "" #: ../gtk/call_logs.ui.h:3 -#, fuzzy msgid "Call back" -msgstr "呼叫 %s" +msgstr "" #: ../gtk/sip_account.ui.h:1 msgid "Linphone - Configure a SIP account" @@ -1160,9 +1076,8 @@ msgid "Registration duration (sec):" msgstr "注册间隔(秒):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "路由(可选):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1173,9 +1088,8 @@ msgid "Route (optional):" msgstr "路由(可选):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "传输协议" +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1186,9 +1100,8 @@ msgid "Publish presence information" msgstr "发布在线状态" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "启用" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1211,9 +1124,8 @@ msgid "default soundcard" msgstr "默认声卡" #: ../gtk/parameters.ui.h:5 -#, fuzzy msgid "a sound card" -msgstr "声卡\n" +msgstr "" #: ../gtk/parameters.ui.h:6 msgid "default camera" @@ -1224,37 +1136,28 @@ msgid "CIF" msgstr "CIF" #: ../gtk/parameters.ui.h:8 -#, fuzzy msgid "Audio codecs" msgstr "" -"音频编解码器\n" -"视频编解码器" #: ../gtk/parameters.ui.h:9 -#, fuzzy msgid "Video codecs" msgstr "" -"音频编解码器\n" -"视频编解码器" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 -#, fuzzy msgid "SIP (UDP)" -msgstr "SIP (UDP):" +msgstr "" #: ../gtk/parameters.ui.h:12 -#, fuzzy msgid "SIP (TCP)" -msgstr "SIP (UDP):" +msgstr "" #: ../gtk/parameters.ui.h:13 -#, fuzzy msgid "SIP (TLS)" -msgstr "SIP (UDP):" +msgstr "" #: ../gtk/parameters.ui.h:14 msgid "Settings" @@ -1321,23 +1224,20 @@ msgid "Direct connection to the Internet" msgstr "直接连接到互联网" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "在 NAT 或防火墙后(填写网关 IP)" +msgstr "" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "在 NAT 或防火墙后(使用 STUN 解决)" #: ../gtk/parameters.ui.h:32 -#, fuzzy msgid "Behind NAT / Firewall (use ICE)" -msgstr "在 NAT 或防火墙后(使用 STUN 解决)" +msgstr "" #: ../gtk/parameters.ui.h:33 -#, fuzzy msgid "Behind NAT / Firewall (use uPnP)" -msgstr "在 NAT 或防火墙后(使用 STUN 解决)" +msgstr "" #: ../gtk/parameters.ui.h:34 msgid "Public IP address:" @@ -1392,9 +1292,8 @@ msgid "Prefered video resolution:" msgstr "视频分辨率:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "视频输入设备:" +msgstr "" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1515,29 +1414,22 @@ msgid "User interface" msgstr "用户界面" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "SIP 代理地址:" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "Linphone - 需要认证" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "标签" +msgid "LDAP Account setup" +msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "代理帐户" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "完成" @@ -1562,46 +1454,36 @@ msgid "Please wait" msgstr "请稍候" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "设置" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" msgstr "" #: ../gtk/dscp_settings.ui.h:3 -#, fuzzy msgid "Audio RTP stream" -msgstr "音频重采样" +msgstr "" #: ../gtk/dscp_settings.ui.h:4 -#, fuzzy msgid "Video RTP stream" -msgstr "视频 RTP/UDP:" +msgstr "" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" msgstr "" #: ../gtk/call_statistics.ui.h:1 -#, fuzzy msgid "Call statistics" -msgstr "呼叫详情" +msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" msgstr "" -"音频编解码器\n" -"视频编解码器" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" msgstr "" -"音频编解码器\n" -"视频编解码器" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1628,24 +1510,20 @@ msgid "Video resolution received" msgstr "" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "视频分辨率:" +msgstr "" #: ../gtk/call_statistics.ui.h:11 -#, fuzzy msgid "RTP profile" -msgstr "RTP 输入过滤器" +msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "联系人信息" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 -#, fuzzy msgid "Configure VoIP tunnel" -msgstr "配置 SIP 帐户" +msgstr "" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" @@ -1663,70 +1541,9 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "D" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "B" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "A" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "设置" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" @@ -1737,9 +1554,8 @@ msgid "Not yet available" msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "编解码器" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1754,9 +1570,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "音频" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1772,18 +1587,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "SIP 地址或电话号码:" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "找人" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1798,9 +1611,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "视频" +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1831,89 +1643,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "正在连接..." +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "就绪" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "确认" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "查询电话号码目的地..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "该号码无法解析。" #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "联系中" -#: ../coreapi/linphonecore.c:2425 -#, fuzzy +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" -msgstr "无法呼叫" +msgstr "" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "" -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "正在联系您" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr " 并询问了自动回答。" -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "." - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "" -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "已连接。" -#: ../coreapi/linphonecore.c:3220 -#, fuzzy +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" -msgstr "中断" +msgstr "" -#: ../coreapi/linphonecore.c:3412 -#, fuzzy +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" -msgstr "无法呼叫" +msgstr "" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "" -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "正在进行 Stun 查找..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1962,21 +1761,20 @@ msgid "Pending" msgstr "挂起" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "通话时间" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "未知错误" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "您输入的 SIP 代理地址无效,它必须是以“sip:”开头,并紧随一个主机名。" -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1984,485 +1782,158 @@ msgstr "" "您输入的地址无效。\n" "它应具有“sip:用户名@代理域”的形式,例如 sip:alice@example.net" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "无法登录为 %s" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "响铃。" -#: ../coreapi/callbacks.c:373 -#, fuzzy +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." -msgstr "响铃。" +msgstr "" -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "" -#: ../coreapi/callbacks.c:435 -#, fuzzy, c-format +#: ../coreapi/callbacks.c:475 +#, c-format msgid "Call with %s is paused." -msgstr "与 %s 通话" +msgstr "" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "" -#: ../coreapi/callbacks.c:459 -#, fuzzy +#: ../coreapi/callbacks.c:498 msgid "Call resumed." -msgstr "呼叫结束" +msgstr "" -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" + +#: ../coreapi/callbacks.c:560 msgid "We have been resumed." msgstr "" -#: ../coreapi/callbacks.c:521 +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "通话结束。" -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "被叫正忙。" -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "您呼叫的用户暂时无法接通。" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "用户已开启免打扰功能。" -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "呼叫被拒绝。" -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "已重定向" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "" - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "呼叫失败。" -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "成功注册到 %s" -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "已在 %s 解除注册。" -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "没有响应,超时" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "注册到 %s 失败: %s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "Linphone - 需要认证" +msgstr "" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "您错过了 %i 个呼叫。" -#~ msgid "aborted" -#~ msgstr "中断" - -#~ msgid "completed" -#~ msgstr "完成" - -#~ msgid "missed" -#~ msgstr "丢失" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s @ %s\n" -#~ "主叫:%s\n" -#~ "被叫: %s\n" -#~ "状态:%s\n" -#~ "状态:%i 分 %i 秒\n" - -#~ msgid "Outgoing call" -#~ msgstr "呼出" - -#~ msgid "No response." -#~ msgstr "没有响应。" - -#~ msgid "Protocol error." -#~ msgstr "协议错误。" - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "" -#~ "无法解析给定的 SIP 地址,SIP 地址应有如下格式:\n" -#~ "sip:用户名@域名" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "您的计算机正使用 ALSA 声音驱动。\n" -#~ "ALSA 是最佳选择,然而 Linphone 必须的 PCM OSS 模拟模块缺失。\n" -#~ "请以 root 用户运行 modprobe snd-pcm-oss 载入它。" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "您的计算机正使用 ALSA 声音驱动。\n" -#~ "ALSA 是最佳选择,然而 Linphone 必须的 Mixer OSS 模拟模块缺失。\n" -#~ "请以 root 用户运行 modprobe snd-mixer-oss 载入它。" - -#~ msgid "Keypad" -#~ msgstr "数字键盘" - -#~ msgid "Chat with %s" -#~ msgstr "与 %s 通话" - -#~ msgid "Please choose a username:" -#~ msgstr "请选择用户名:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "检查 %s 是否可用..." - -#~ msgid "Please wait..." -#~ msgstr "请稍候..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "对不起,该用户已经存在,请换一个尝试。" - -#~ msgid "Ok !" -#~ msgstr "成功!" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "连接错误,请稍后重试。" - -#~ msgid "Choosing a username" -#~ msgstr "选择用户名:" - -#~ msgid "Verifying" -#~ msgstr "验证中" - -#~ msgid "Creating your account" -#~ msgstr "正在创建您的帐户" - -#~ msgid "Now ready !" -#~ msgstr "就绪!" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "启用" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "请输入用户名、电话号码或完整的 SIP 地址" - -#~ msgid "Lookup:" -#~ msgstr "查找:" - -#~ msgid "in" -#~ msgstr "于" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "注册到 FONICS\n" -#~ "虚拟网络!" - -#~ msgid "No common codecs" -#~ msgstr "未找到常用编解码器" - -#~ msgid "Unmute" -#~ msgstr "取消静音" - -#~ msgid "Contact list" -#~ msgstr "联系人列表" - -#, fuzzy -#~ msgid "Audio & video" -#~ msgstr "音频和视频" - -#~ msgid "Audio only" -#~ msgstr "音频" - -#~ msgid "Duration:" -#~ msgstr "通话计时:" - -#, fuzzy -#~ msgid "_Call history" -#~ msgstr "呼叫历史" - -#~ msgid "_Linphone" -#~ msgstr "_Linphone" - -#~ msgid "Register at startup" -#~ msgstr "在启动时注册" - -#~ msgid "ITU-G.711 alaw encoder" -#~ msgstr "ITU-G.711 alaw 编码器" - -#~ msgid "ITU-G.711 alaw decoder" -#~ msgstr "ITU-G.711 alaw 解码器" - -#~ msgid "Alsa sound source" -#~ msgstr "Alsa 音频源" - -#~ msgid "Alsa sound output" -#~ msgstr "Alsa 音频输出" - -#~ msgid "Sound capture filter for MacOS X Audio Queue Service" -#~ msgstr "MacOS X 音频队列服务音频输入过滤器" - -#~ msgid "Sound playback filter for MacOS X Audio Queue Service" -#~ msgstr "MacOS X 音频队列服务音频回放过滤器" - -#~ msgid "DTMF generator" -#~ msgstr "DTMF 生成器" - -#~ msgid "The GSM full-rate codec" -#~ msgstr "GSM 全速编解码器" - -#~ msgid "The GSM codec" -#~ msgstr "GSM 编解码器" - -#, fuzzy -#~ msgid "Sound capture filter for MacOS X Audio Unit" -#~ msgstr "MacOS X 音频队列服务音频输入过滤器" - -#, fuzzy -#~ msgid "Sound playback filter for MacOS X Audio Unit" -#~ msgstr "MacOS X 音频队列服务音频回放过滤器" - -#~ msgid "Raw files and wav reader" -#~ msgstr "原始文件和 Wav 读取器" - -#~ msgid "Wav file recorder" -#~ msgstr "Wav 文件记录器" - -#~ msgid "A filter that send several inputs to one output." -#~ msgstr "将多个输入发送至单个输出。" - -#~ msgid "RTP output filter" -#~ msgstr "RTP 输出过滤器" - -#~ msgid "The free and wonderful speex codec" -#~ msgstr "优秀的自由软件编解码器 Speex" - -#~ msgid "A filter that controls and measure sound volume" -#~ msgstr "控制和调节音量的过滤器" - -#~ msgid "A video4linux compatible source filter to stream pictures." -#~ msgstr "用于图像流的 video4linux 兼容源过滤器" - -#~ msgid "A filter to grab pictures from Video4Linux2-powered cameras" -#~ msgstr "用于从 Video4Linux2 驱动的摄像头获取图像的过滤器" - -#~ msgid "A filter that outputs a static image." -#~ msgstr "输出静态图像的过滤器" - -#~ msgid "A pixel format converter" -#~ msgstr "像素格式转换器" - -#~ msgid "A video size converter" -#~ msgstr "视频尺寸转换器" - -#~ msgid "a small video size converter" -#~ msgstr "小的视频尺寸转换器" - -#~ msgid "Echo canceller using speex library" -#~ msgstr "使用 Speex 库的回声抑制器" - -#~ msgid "A filter that reads from input and copy to its multiple outputs." -#~ msgstr "用于读取输入并复制到多个输出的过滤器" - -#~ msgid "The theora video encoder from xiph.org" -#~ msgstr "来自 xiph.org 的 Theora 视频编码器" - -#~ msgid "The open-source and royalty-free 'theora' video codec from xiph.org" -#~ msgstr "来自 xiph.org 的开源的自由软件编解码器 Theora" - -#~ msgid "The theora video decoder from xiph.org" -#~ msgstr "来自 xiph.org 的 Theora 视频解码器" - -#~ msgid "ITU-G.711 ulaw encoder" -#~ msgstr "ITU-G.711 ulaw 编码器" - -#~ msgid "ITU-G.711 ulaw decoder" -#~ msgstr "ITU-G.711 ulaw 解码器" - -#~ msgid "A H.263 decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 库的 H.263 解码器" - -#~ msgid "A MPEG4 decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 库的 MPEG4 解码器" - -#~ msgid "A RTP/JPEG decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 库的 RTP/JPEG 解码器" - -#~ msgid "A MJPEG decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 库的 MJPEG 解码器" - -#~ msgid "A snow decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 库的 snow 解码器" - -#~ msgid "A video H.263 encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 库的 H.263 编码器" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library. It is compliant with old " -#~ "RFC2190 spec." -#~ msgstr "使用 ffmpeg 库的 H.263 视频编码器,符合旧的 RFC2190" - -#~ msgid "A video MPEG4 encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 库的 MPEG4 视频编码器" - -#~ msgid "A video snow encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 库的 snow 编码器" - -#~ msgid "A RTP/MJPEG encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 库的 RTP/MJPEG 编码器" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library, compliant with old RFC2190 " -#~ "spec." -#~ msgstr "使用 ffmpeg 库的 H.263 编码器,符合旧的 RFC2190" - -#~ msgid "" -#~ "The snow codec is royalty-free and is open-source. \n" -#~ "It uses innovative techniques that makes it one of most promising video " -#~ "codec. It is implemented within the ffmpeg project.\n" -#~ "However it is under development, quite unstable and compatibility with " -#~ "other versions cannot be guaranteed." -#~ msgstr "" -#~ "Snow 编解码器是开源的自由软件。\n" -#~ "创新科技使 Snow 成为当今最有希望的视频编解码器。它在 ffmpeg 项目内实现。\n" -#~ "然而它仍处于开发中,稳定性和与其他版本的兼容性尚无法保证。" - -#~ msgid "A MJPEG encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 库的 MJPEG 编码器" - -#, fuzzy -#~ msgid "A SDL-based video display" -#~ msgstr "通用视频显示" - -#~ msgid "A webcam grabber based on directshow." -#~ msgstr "使用 DirectShow 的摄像头抓取器" - -#, fuzzy -#~ msgid "Sound capture filter for MacOS X Audio Unit Service" -#~ msgstr "MacOS X 音频队列服务音频输入过滤器" - -#, fuzzy -#~ msgid "Sound playback filter for MacOS X Audio Unit Service" -#~ msgstr "MacOS X 音频队列服务音频回放过滤器" - -#, fuzzy -#~ msgid "Sound capture filter for Android" -#~ msgstr "OSS 驱动的音频输入过滤器" - -#, fuzzy -#~ msgid "Sound playback filter for Android" -#~ msgstr "OSS 驱动的音频回放过滤器" - -#, fuzzy -#~ msgid "A filter that captures Android video." -#~ msgstr "控制和调节音量的过滤器" - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "您的机器有 IPv6 网络连接。Linphone 默认使用IPv4,如果您希望使用 IPv6 请更" -#~ "该配置。" - -#~ msgid "Sound capture filter for MacOS X Core Audio drivers" -#~ msgstr "MacOS X 核心声音驱动音频输入过滤器" - -#~ msgid "Sound playback filter for MacOS X Core Audio drivers" -#~ msgstr "MacOS X 核心声音驱动音频回放过滤器" - -#~ msgid "Show debug messages" -#~ msgstr "显示调试信息" - -#~ msgid "Start call" -#~ msgstr "开始呼叫" - -#~ msgid "_Modes" -#~ msgstr "模式(_M)" - -#~ msgid "Created by Simon Morlat\n" -#~ msgstr "由 Simon Morlat 创建\n" - -#~ msgid "Accept" -#~ msgstr "接受" - -#~ msgid "Incoming call from" -#~ msgstr "来自" - -#~ msgid "Linphone - Incoming call" -#~ msgstr "Linphone - 呼入" - -#~ msgid "default soundcard\n" -#~ msgstr "默认声卡\n" - -#~ msgid "" -#~ "Remote end seems to have disconnected, the call is going to be closed." -#~ msgstr "对方断开连接,通话终止。" - -#~ msgid "Sorry, having multiple simultaneous calls is not supported yet !" -#~ msgstr "抱歉, 还不支持并发多路呼叫!" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/po/zh_TW.po b/po/zh_TW.po index 789c278d5..d3dfa7ab7 100644 --- a/po/zh_TW.po +++ b/po/zh_TW.po @@ -1,17 +1,18 @@ # SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER # This file is distributed under the same license as the PACKAGE package. -# FIRST AUTHOR , YEAR. # +# Translators: msgid "" msgstr "" -"Project-Id-Version: linphone 3.4\n" +"Project-Id-Version: linphone-gtk\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2014-09-15 09:24+0200\n" -"PO-Revision-Date: 2011-04-06 21:24+0800\n" -"Last-Translator: Chao-Hsiung Liao \n" -"Language-Team: \n" -"Language: \n" +"POT-Creation-Date: 2014-12-01 14:27+0100\n" +"PO-Revision-Date: 2014-12-01 13:28+0000\n" +"Last-Translator: Gautier Pelloux-Prayer \n" +"Language-Team: Chinese (Taiwan) (http://www.transifex.com/projects/p/" +"linphone-gtk/language/zh_TW/)\n" +"Language: zh_TW\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" @@ -28,28 +29,25 @@ msgid "Send text to %s" msgstr "傳送文字給 %s" #: ../gtk/calllogs.c:232 -#, fuzzy, c-format +#, c-format msgid "Recent calls (%i)" -msgstr "通話中" +msgstr "" #: ../gtk/calllogs.c:314 msgid "n/a" msgstr "" #: ../gtk/calllogs.c:317 -#, fuzzy msgid "Aborted" -msgstr "已放棄" +msgstr "" #: ../gtk/calllogs.c:320 -#, fuzzy msgid "Missed" -msgstr "未接" +msgstr "" #: ../gtk/calllogs.c:323 -#, fuzzy msgid "Declined" -msgstr "拒接" +msgstr "" #: ../gtk/calllogs.c:329 #, c-format @@ -63,11 +61,6 @@ msgid "%i second" msgid_plural "%i seconds" msgstr[0] "" -#: ../gtk/calllogs.c:335 ../gtk/calllogs.c:341 -#, c-format -msgid "%s\t%s" -msgstr "" - #: ../gtk/calllogs.c:337 #, c-format msgid "" @@ -75,11 +68,9 @@ msgid "" "%s\t%s\t" msgstr "" -#: ../gtk/calllogs.c:343 +#: ../gtk/calllogs.c:341 #, c-format -msgid "" -"%s\t\n" -"%s" +msgid "%s\t%s" msgstr "" #: ../gtk/conference.c:38 ../gtk/main.ui.h:13 @@ -87,16 +78,15 @@ msgid "Conference" msgstr "" #: ../gtk/conference.c:46 -#, fuzzy msgid "Me" -msgstr "靜音" +msgstr "" #: ../gtk/support.c:49 ../gtk/support.c:73 ../gtk/support.c:102 #, c-format msgid "Couldn't find pixmap file: %s" msgstr "找不到 pixmap 檔:%s" -#: ../gtk/chat.c:364 ../gtk/friendlist.c:924 +#: ../gtk/chat.c:367 ../gtk/friendlist.c:924 msgid "Invalid sip contact !" msgstr "無效的 sip 連絡人!" @@ -132,21 +122,14 @@ msgstr "" "指定一個工作目錄(應該為安裝的根目錄,例如:c:\\Program Files\\Linphone)" #: ../gtk/main.c:156 -#, fuzzy msgid "Configuration file" -msgstr "確認" +msgstr "" #: ../gtk/main.c:163 -#, fuzzy msgid "Run the audio assistant" -msgstr "帳號設定助理" +msgstr "" -#: ../gtk/main.c:590 -#, c-format -msgid "Call with %s" -msgstr "和 %s 通話" - -#: ../gtk/main.c:1183 +#: ../gtk/main.c:1085 #, c-format msgid "" "%s would like to add you to his contact list.\n" @@ -158,70 +141,66 @@ msgstr "" "您是否要允許他看見您的上線狀態或將他加入您的連絡人清單?\n" "如果您回答否,這個人會被暫時列入黑名單。" -#: ../gtk/main.c:1260 -#, fuzzy, c-format +#: ../gtk/main.c:1162 +#, c-format msgid "" "Please enter your password for username %s\n" " at realm %s:" msgstr "" -"請輸入您使用者名稱 %s\n" -"於網域 %s 的密碼:" -#: ../gtk/main.c:1376 -#, fuzzy +#: ../gtk/main.c:1283 msgid "Call error" -msgstr "通話紀錄" +msgstr "" -#: ../gtk/main.c:1379 ../coreapi/linphonecore.c:3240 +#: ../gtk/main.c:1286 ../coreapi/linphonecore.c:3751 msgid "Call ended" msgstr "通話已結束" -#: ../gtk/main.c:1382 +#: ../gtk/main.c:1289 ../coreapi/call_log.c:221 msgid "Incoming call" msgstr "來電" -#: ../gtk/main.c:1384 ../gtk/incall_view.c:522 ../gtk/main.ui.h:5 +#: ../gtk/main.c:1291 ../gtk/incall_view.c:532 ../gtk/main.ui.h:5 msgid "Answer" msgstr "接聽" -#: ../gtk/main.c:1386 ../gtk/main.ui.h:6 +#: ../gtk/main.c:1293 ../gtk/main.ui.h:6 msgid "Decline" msgstr "拒接" -#: ../gtk/main.c:1392 -#, fuzzy +#: ../gtk/main.c:1299 msgid "Call paused" -msgstr "通話已放棄" +msgstr "" -#: ../gtk/main.c:1392 -#, fuzzy, c-format +#: ../gtk/main.c:1299 +#, c-format msgid "by %s" -msgstr "連接埠" +msgstr "" -#: ../gtk/main.c:1459 +#: ../gtk/main.c:1366 #, c-format msgid "%s proposed to start video. Do you accept ?" msgstr "" -#: ../gtk/main.c:1621 +#: ../gtk/main.c:1528 msgid "Website link" msgstr "網站連結" -#: ../gtk/main.c:1670 +#: ../gtk/main.c:1577 msgid "Linphone - a video internet phone" msgstr "Linphone - 網路視訊電話" -#: ../gtk/main.c:1762 +#: ../gtk/main.c:1669 #, c-format msgid "%s (Default)" msgstr "%s (預設值)" -#: ../gtk/main.c:2099 ../coreapi/callbacks.c:949 +#: ../gtk/main.c:2006 ../coreapi/callbacks.c:983 #, c-format msgid "We are transferred to %s" msgstr "我們被轉接到 %s" -#: ../gtk/main.c:2109 +#: ../gtk/main.c:2016 msgid "" "No sound cards have been detected on this computer.\n" "You won't be able to send or receive audio calls." @@ -229,7 +208,7 @@ msgstr "" "在這臺電腦中偵測不到音效卡。\n" "您將無法傳送或接收語音電話。" -#: ../gtk/main.c:2250 +#: ../gtk/main.c:2157 msgid "A free SIP video-phone" msgstr "自由的 SIP 視訊電話" @@ -246,9 +225,8 @@ msgid "Name" msgstr "名稱" #: ../gtk/friendlist.c:721 -#, fuzzy msgid "Call" -msgstr "播打給 %s" +msgstr "" #: ../gtk/friendlist.c:726 msgid "Chat" @@ -270,9 +248,9 @@ msgid "Delete contact '%s'" msgstr "刪除連絡人「%s」" #: ../gtk/friendlist.c:978 -#, fuzzy, c-format +#, c-format msgid "Delete chat history of '%s'" -msgstr "刪除連絡人「%s」" +msgstr "" #: ../gtk/friendlist.c:1029 #, c-format @@ -288,9 +266,8 @@ msgid "Status" msgstr "狀態" #: ../gtk/propertybox.c:570 -#, fuzzy msgid "IP Bitrate (kbit/s)" -msgstr "最小頻寬 (kbit/s)" +msgstr "" #: ../gtk/propertybox.c:577 msgid "Parameters" @@ -308,92 +285,92 @@ msgstr "已停用" msgid "Account" msgstr "帳號" -#: ../gtk/propertybox.c:1063 +#: ../gtk/propertybox.c:1072 msgid "English" msgstr "英語" -#: ../gtk/propertybox.c:1064 +#: ../gtk/propertybox.c:1073 msgid "French" msgstr "法語" -#: ../gtk/propertybox.c:1065 +#: ../gtk/propertybox.c:1074 msgid "Swedish" msgstr "瑞典語" -#: ../gtk/propertybox.c:1066 +#: ../gtk/propertybox.c:1075 msgid "Italian" msgstr "義大利語" -#: ../gtk/propertybox.c:1067 +#: ../gtk/propertybox.c:1076 msgid "Spanish" msgstr "西班牙語" -#: ../gtk/propertybox.c:1068 +#: ../gtk/propertybox.c:1077 msgid "Brazilian Portugese" msgstr "巴西葡萄牙語" -#: ../gtk/propertybox.c:1069 +#: ../gtk/propertybox.c:1078 msgid "Polish" msgstr "波蘭語" -#: ../gtk/propertybox.c:1070 +#: ../gtk/propertybox.c:1079 msgid "German" msgstr "德語" -#: ../gtk/propertybox.c:1071 +#: ../gtk/propertybox.c:1080 msgid "Russian" msgstr "俄語" -#: ../gtk/propertybox.c:1072 +#: ../gtk/propertybox.c:1081 msgid "Japanese" msgstr "日語" -#: ../gtk/propertybox.c:1073 +#: ../gtk/propertybox.c:1082 msgid "Dutch" msgstr "荷蘭語" -#: ../gtk/propertybox.c:1074 +#: ../gtk/propertybox.c:1083 msgid "Hungarian" msgstr "匈牙利語" -#: ../gtk/propertybox.c:1075 +#: ../gtk/propertybox.c:1084 msgid "Czech" msgstr "捷克語" -#: ../gtk/propertybox.c:1076 +#: ../gtk/propertybox.c:1085 msgid "Chinese" msgstr "中文" -#: ../gtk/propertybox.c:1077 +#: ../gtk/propertybox.c:1086 msgid "Traditional Chinese" msgstr "" -#: ../gtk/propertybox.c:1078 +#: ../gtk/propertybox.c:1087 msgid "Norwegian" msgstr "" -#: ../gtk/propertybox.c:1079 +#: ../gtk/propertybox.c:1088 msgid "Hebrew" msgstr "" -#: ../gtk/propertybox.c:1080 +#: ../gtk/propertybox.c:1089 msgid "Serbian" msgstr "" -#: ../gtk/propertybox.c:1147 +#: ../gtk/propertybox.c:1156 msgid "" "You need to restart linphone for the new language selection to take effect." msgstr "您需要重新啟動 linphone 才能讓新選擇的語言生效。" -#: ../gtk/propertybox.c:1225 +#: ../gtk/propertybox.c:1234 msgid "None" msgstr "" -#: ../gtk/propertybox.c:1229 +#: ../gtk/propertybox.c:1238 msgid "SRTP" msgstr "" -#: ../gtk/propertybox.c:1235 +#: ../gtk/propertybox.c:1244 msgid "ZRTP" msgstr "" @@ -438,26 +415,21 @@ msgstr[0] "找不到 %i 個連絡人" #: ../gtk/setupwizard.c:34 msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to use a SIP account for your calls." msgstr "" -"歡迎!\n" -"這個助理會協助您使用電話的 SIP 帳號。" #: ../gtk/setupwizard.c:43 -#, fuzzy msgid "Create an account on linphone.org" -msgstr "以選擇的使用者名稱建立一個帳號" +msgstr "" #: ../gtk/setupwizard.c:44 -#, fuzzy msgid "I have already a linphone.org account and I just want to use it" -msgstr "我已經有帳號,並且要使用這個帳號" +msgstr "" #: ../gtk/setupwizard.c:45 -#, fuzzy msgid "I have already a sip account and I just want to use it" -msgstr "我已經有帳號,並且要使用這個帳號" +msgstr "" #: ../gtk/setupwizard.c:46 msgid "I want to specify a remote configuration URI" @@ -480,14 +452,12 @@ msgid "Enter your account informations" msgstr "" #: ../gtk/setupwizard.c:140 -#, fuzzy msgid "Username*" -msgstr "使用者名稱" +msgstr "" #: ../gtk/setupwizard.c:141 -#, fuzzy msgid "Password*" -msgstr "密碼" +msgstr "" #: ../gtk/setupwizard.c:144 msgid "Domain*" @@ -502,14 +472,12 @@ msgid "(*) Required fields" msgstr "" #: ../gtk/setupwizard.c:318 -#, fuzzy msgid "Username: (*)" -msgstr "使用者名稱:" +msgstr "" #: ../gtk/setupwizard.c:320 -#, fuzzy msgid "Password: (*)" -msgstr "密碼: " +msgstr "" #: ../gtk/setupwizard.c:322 msgid "Email: (*)" @@ -540,48 +508,46 @@ msgid "" "Then come back here and press Next button." msgstr "" -#: ../gtk/setupwizard.c:600 -#, fuzzy +#: ../gtk/setupwizard.c:602 msgid "SIP account configuration assistant" -msgstr "帳號設定助理" +msgstr "" -#: ../gtk/setupwizard.c:618 +#: ../gtk/setupwizard.c:620 msgid "Welcome to the account setup assistant" msgstr "歡迎使用帳號設定助理" -#: ../gtk/setupwizard.c:623 +#: ../gtk/setupwizard.c:625 msgid "Account setup assistant" msgstr "帳號設定助理" -#: ../gtk/setupwizard.c:629 -#, fuzzy +#: ../gtk/setupwizard.c:631 msgid "Configure your account (step 1/1)" -msgstr "設定 SIP 帳號" +msgstr "" -#: ../gtk/setupwizard.c:634 +#: ../gtk/setupwizard.c:636 msgid "Enter your sip username (step 1/1)" msgstr "" -#: ../gtk/setupwizard.c:638 +#: ../gtk/setupwizard.c:640 msgid "Enter account information (step 1/2)" msgstr "" -#: ../gtk/setupwizard.c:647 +#: ../gtk/setupwizard.c:649 msgid "Validation (step 2/2)" msgstr "" -#: ../gtk/setupwizard.c:652 +#: ../gtk/setupwizard.c:654 msgid "Error" msgstr "" -#: ../gtk/setupwizard.c:656 ../gtk/audio_assistant.c:527 +#: ../gtk/setupwizard.c:658 ../gtk/audio_assistant.c:527 msgid "Terminating" msgstr "" #: ../gtk/incall_view.c:70 ../gtk/incall_view.c:94 -#, fuzzy, c-format +#, c-format msgid "Call #%i" -msgstr "播打給 %s" +msgstr "" #: ../gtk/incall_view.c:155 #, c-format @@ -589,18 +555,16 @@ msgid "Transfer to call #%i with %s" msgstr "" #: ../gtk/incall_view.c:211 ../gtk/incall_view.c:214 -#, fuzzy msgid "Not used" -msgstr "找不到" +msgstr "" #: ../gtk/incall_view.c:221 msgid "ICE not activated" msgstr "" #: ../gtk/incall_view.c:223 -#, fuzzy msgid "ICE failed" -msgstr "ICE 過濾器" +msgstr "" #: ../gtk/incall_view.c:225 msgid "ICE in progress" @@ -611,9 +575,8 @@ msgid "Going through one or more NATs" msgstr "" #: ../gtk/incall_view.c:229 -#, fuzzy msgid "Direct" -msgstr "已重新導向" +msgstr "" #: ../gtk/incall_view.c:231 msgid "Through a relay server" @@ -624,9 +587,8 @@ msgid "uPnP not activated" msgstr "" #: ../gtk/incall_view.c:241 -#, fuzzy msgid "uPnP in progress" -msgstr "正在進行 Stun 搜尋..." +msgstr "" #: ../gtk/incall_view.c:243 msgid "uPnp not available" @@ -637,9 +599,8 @@ msgid "uPnP is running" msgstr "" #: ../gtk/incall_view.c:247 -#, fuzzy msgid "uPnP failed" -msgstr "ICE 過濾器" +msgstr "" #: ../gtk/incall_view.c:257 ../gtk/incall_view.c:258 msgid "Direct or through server" @@ -662,117 +623,109 @@ msgstr "" msgid "%.3f seconds" msgstr "" -#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 +#: ../gtk/incall_view.c:407 ../gtk/main.ui.h:12 ../gtk/videowindow.c:232 msgid "Hang up" msgstr "" -#: ../gtk/incall_view.c:501 +#: ../gtk/incall_view.c:511 msgid "Calling..." msgstr "播打..." -#: ../gtk/incall_view.c:504 ../gtk/incall_view.c:707 +#: ../gtk/incall_view.c:514 ../gtk/incall_view.c:727 msgid "00::00::00" msgstr "00::00::00" -#: ../gtk/incall_view.c:515 +#: ../gtk/incall_view.c:525 msgid "Incoming call" msgstr "來電" -#: ../gtk/incall_view.c:552 +#: ../gtk/incall_view.c:562 msgid "good" msgstr "" -#: ../gtk/incall_view.c:554 +#: ../gtk/incall_view.c:564 msgid "average" msgstr "" -#: ../gtk/incall_view.c:556 +#: ../gtk/incall_view.c:566 msgid "poor" msgstr "" -#: ../gtk/incall_view.c:558 +#: ../gtk/incall_view.c:568 msgid "very poor" msgstr "" -#: ../gtk/incall_view.c:560 +#: ../gtk/incall_view.c:570 msgid "too bad" msgstr "" -#: ../gtk/incall_view.c:561 ../gtk/incall_view.c:577 +#: ../gtk/incall_view.c:571 ../gtk/incall_view.c:587 msgid "unavailable" msgstr "" -#: ../gtk/incall_view.c:669 +#: ../gtk/incall_view.c:679 msgid "Secured by SRTP" msgstr "" -#: ../gtk/incall_view.c:675 +#: ../gtk/incall_view.c:685 #, c-format msgid "Secured by ZRTP - [auth token: %s]" msgstr "" -#: ../gtk/incall_view.c:681 +#: ../gtk/incall_view.c:691 msgid "Set unverified" msgstr "" -#: ../gtk/incall_view.c:681 ../gtk/main.ui.h:4 +#: ../gtk/incall_view.c:691 ../gtk/main.ui.h:4 msgid "Set verified" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In conference" msgstr "" -#: ../gtk/incall_view.c:702 +#: ../gtk/incall_view.c:722 msgid "In call" msgstr "通話中" -#: ../gtk/incall_view.c:738 +#: ../gtk/incall_view.c:758 msgid "Paused call" msgstr "暫停通話" -#: ../gtk/incall_view.c:751 -#, c-format -msgid "%02i::%02i::%02i" -msgstr "%02i::%02i::%02i" - -#: ../gtk/incall_view.c:772 +#: ../gtk/incall_view.c:794 msgid "Call ended." msgstr "通話結束。" -#: ../gtk/incall_view.c:803 +#: ../gtk/incall_view.c:825 msgid "Transfer in progress" msgstr "" -#: ../gtk/incall_view.c:806 -#, fuzzy +#: ../gtk/incall_view.c:828 msgid "Transfer done." -msgstr "轉接" +msgstr "" -#: ../gtk/incall_view.c:809 -#, fuzzy +#: ../gtk/incall_view.c:831 msgid "Transfer failed." -msgstr "轉接" +msgstr "" -#: ../gtk/incall_view.c:853 +#: ../gtk/incall_view.c:875 msgid "Resume" msgstr "繼續" -#: ../gtk/incall_view.c:860 ../gtk/main.ui.h:9 +#: ../gtk/incall_view.c:882 ../gtk/main.ui.h:9 msgid "Pause" msgstr "暫停" -#: ../gtk/incall_view.c:926 +#: ../gtk/incall_view.c:948 #, c-format msgid "" "Recording into\n" "%s %s" msgstr "" -#: ../gtk/incall_view.c:926 -#, fuzzy +#: ../gtk/incall_view.c:948 msgid "(Paused)" -msgstr "暫停" +msgstr "" #: ../gtk/loginframe.c:88 #, c-format @@ -806,18 +759,14 @@ msgid "Too loud" msgstr "" #: ../gtk/audio_assistant.c:318 -#, fuzzy msgid "" -"Welcome !\n" +"Welcome!\n" "This assistant will help you to configure audio settings for Linphone" msgstr "" -"歡迎!\n" -"這個助理會協助您使用電話的 SIP 帳號。" #: ../gtk/audio_assistant.c:328 -#, fuzzy msgid "Capture device" -msgstr "捕捉裝置:" +msgstr "" #: ../gtk/audio_assistant.c:329 msgid "Recorded volume" @@ -828,9 +777,8 @@ msgid "No voice" msgstr "" #: ../gtk/audio_assistant.c:369 -#, fuzzy msgid "Playback device" -msgstr "播放裝置" +msgstr "" #: ../gtk/audio_assistant.c:370 msgid "Play three beeps" @@ -849,14 +797,12 @@ msgid "Let's start Linphone now" msgstr "" #: ../gtk/audio_assistant.c:496 -#, fuzzy msgid "Audio Assistant" -msgstr "帳號設定助理" +msgstr "" #: ../gtk/audio_assistant.c:506 ../gtk/main.ui.h:31 -#, fuzzy msgid "Audio assistant" -msgstr "帳號設定助理" +msgstr "" #: ../gtk/audio_assistant.c:511 msgid "Mic Gain calibration" @@ -871,9 +817,8 @@ msgid "Record and Play" msgstr "" #: ../gtk/main.ui.h:1 -#, fuzzy msgid "Callee name" -msgstr "通話結束。" +msgstr "" #: ../gtk/main.ui.h:2 msgid "Send" @@ -936,9 +881,8 @@ msgid "_Options" msgstr "選項(_O)" #: ../gtk/main.ui.h:23 -#, fuzzy msgid "Set configuration URI" -msgstr "確認" +msgstr "" #: ../gtk/main.ui.h:24 msgid "Always start video" @@ -965,9 +909,8 @@ msgid "Check _Updates" msgstr "檢查更新(_U)" #: ../gtk/main.ui.h:30 -#, fuzzy msgid "Account assistant" -msgstr "帳號設定助理" +msgstr "" #: ../gtk/main.ui.h:32 msgid "SIP address or phone number:" @@ -994,9 +937,8 @@ msgid "Add contact" msgstr "加入聯絡人" #: ../gtk/main.ui.h:38 -#, fuzzy msgid "Recent calls" -msgstr "通話中" +msgstr "" #: ../gtk/main.ui.h:39 msgid "My current identity:" @@ -1027,27 +969,26 @@ msgid "Login information" msgstr "登入資訊" #: ../gtk/main.ui.h:46 -msgid "Welcome !" -msgstr "歡迎使用!" +msgid "Welcome!" +msgstr "" #: ../gtk/main.ui.h:47 msgid "Delete" msgstr "" #: ../gtk/about.ui.h:1 -msgid "About linphone" -msgstr "關於 linphone" +msgid "About Linphone" +msgstr "" #: ../gtk/about.ui.h:2 -msgid "(C) Belledonne Communications,2010\n" -msgstr "(C) Belledonne Communications,2010\n" +msgid "(C) Belledonne Communications, 2010\n" +msgstr "" #: ../gtk/about.ui.h:4 msgid "An internet video phone using the standard SIP (rfc3261) protocol." msgstr "使用標準 SIP (rfc3261) 通訊協定的網路視訊電話。" #: ../gtk/about.ui.h:5 -#, fuzzy msgid "" "fr: Simon Morlat\n" "en: Simon Morlat and Delphine Perreau\n" @@ -1062,17 +1003,6 @@ msgid "" "hu: anonymous\n" "he: Eli Zaretskii \n" msgstr "" -"fr: Simon Morlat\n" -"en: Simon Morlat and Delphine Perreau\n" -"it: Alberto Zanoni \n" -"de: Jean-Jacques Sarton \n" -"sv: Daniel Nylander \n" -"es: Jesus Benitez \n" -"ja: YAMAGUCHI YOSHIYA \n" -"pt_BR: Rafael Caesar Lenzi \n" -"pl: Robert Nasiadek \n" -"cs: Petr Pisar \n" -"hu: anonymous\n" #: ../gtk/contact.ui.h:2 msgid "SIP Address" @@ -1147,9 +1077,8 @@ msgid "Registration duration (sec):" msgstr "註冊時間 (秒):" #: ../gtk/sip_account.ui.h:8 -#, fuzzy msgid "Contact params (optional):" -msgstr "路由 (選擇性):" +msgstr "" #: ../gtk/sip_account.ui.h:9 msgid "AVPF regular RTCP interval (sec):" @@ -1160,9 +1089,8 @@ msgid "Route (optional):" msgstr "路由 (選擇性):" #: ../gtk/sip_account.ui.h:11 -#, fuzzy msgid "Transport" -msgstr "傳輸" +msgstr "" #: ../gtk/sip_account.ui.h:12 msgid "Register" @@ -1173,9 +1101,8 @@ msgid "Publish presence information" msgstr "發布上線資訊" #: ../gtk/sip_account.ui.h:14 -#, fuzzy msgid "Enable AVPF" -msgstr "啟用" +msgstr "" #: ../gtk/sip_account.ui.h:15 msgid "Configure a SIP account" @@ -1217,24 +1144,21 @@ msgstr "音訊編碼解碼器" msgid "Video codecs" msgstr "視訊編碼解碼器" -#: ../gtk/parameters.ui.h:10 ../gtk/keypad.ui.h:5 +#: ../gtk/parameters.ui.h:10 msgid "C" msgstr "C" #: ../gtk/parameters.ui.h:11 -#, fuzzy msgid "SIP (UDP)" -msgstr "SIP (UDP):" +msgstr "" #: ../gtk/parameters.ui.h:12 -#, fuzzy msgid "SIP (TCP)" -msgstr "SIP (TCP):" +msgstr "" #: ../gtk/parameters.ui.h:13 -#, fuzzy msgid "SIP (TLS)" -msgstr "SIP (TCP):" +msgstr "" #: ../gtk/parameters.ui.h:14 msgid "Settings" @@ -1301,23 +1225,20 @@ msgid "Direct connection to the Internet" msgstr "直接連線到網際網路" #: ../gtk/parameters.ui.h:30 -#, fuzzy msgid "Behind NAT / Firewall (specify gateway IP )" -msgstr "在 NAT / 防火牆之後 (在下面指定閘道器 IP)" +msgstr "" #: ../gtk/parameters.ui.h:31 msgid "Behind NAT / Firewall (use STUN to resolve)" msgstr "在 NAT / 防火牆之後 (使用 STUN 解析)" #: ../gtk/parameters.ui.h:32 -#, fuzzy msgid "Behind NAT / Firewall (use ICE)" -msgstr "在 NAT / 防火牆之後 (使用 STUN 解析)" +msgstr "" #: ../gtk/parameters.ui.h:33 -#, fuzzy msgid "Behind NAT / Firewall (use uPnP)" -msgstr "在 NAT / 防火牆之後 (使用 STUN 解析)" +msgstr "" #: ../gtk/parameters.ui.h:34 msgid "Public IP address:" @@ -1372,9 +1293,8 @@ msgid "Prefered video resolution:" msgstr "偏好的視訊解析度:" #: ../gtk/parameters.ui.h:47 -#, fuzzy msgid "Video output method:" -msgstr "視訊輸入裝置:" +msgstr "" #: ../gtk/parameters.ui.h:48 msgid "Video" @@ -1495,29 +1415,22 @@ msgid "User interface" msgstr "使用者介面" #: ../gtk/parameters.ui.h:77 ../gtk/ldap.ui.h:2 -#, fuzzy msgid "Server address:" -msgstr "SIP 代理位址:" +msgstr "" #: ../gtk/parameters.ui.h:78 ../gtk/ldap.ui.h:3 -#, fuzzy msgid "Authentication method:" -msgstr "驗證失敗" +msgstr "" #: ../gtk/parameters.ui.h:80 -msgid "label" -msgstr "標籤" +msgid "LDAP Account setup" +msgstr "" #: ../gtk/parameters.ui.h:81 -#, fuzzy -msgid "LDAP Account setup" -msgstr "代理伺服器帳號" - -#: ../gtk/parameters.ui.h:82 msgid "LDAP" msgstr "" -#: ../gtk/parameters.ui.h:83 +#: ../gtk/parameters.ui.h:82 msgid "Done" msgstr "完成" @@ -1542,23 +1455,20 @@ msgid "Please wait" msgstr "請稍候" #: ../gtk/dscp_settings.ui.h:1 -#, fuzzy msgid "DSCP settings" -msgstr "設定值" +msgstr "" #: ../gtk/dscp_settings.ui.h:2 msgid "SIP" msgstr "" #: ../gtk/dscp_settings.ui.h:3 -#, fuzzy msgid "Audio RTP stream" -msgstr "音效重取樣器" +msgstr "" #: ../gtk/dscp_settings.ui.h:4 -#, fuzzy msgid "Video RTP stream" -msgstr "視訊 RTP/UDP:" +msgstr "" #: ../gtk/dscp_settings.ui.h:5 msgid "Set DSCP values (in hexadecimal)" @@ -1569,14 +1479,12 @@ msgid "Call statistics" msgstr "" #: ../gtk/call_statistics.ui.h:2 -#, fuzzy msgid "Audio codec" -msgstr "音訊編碼解碼器" +msgstr "" #: ../gtk/call_statistics.ui.h:3 -#, fuzzy msgid "Video codec" -msgstr "視訊編碼解碼器" +msgstr "" #: ../gtk/call_statistics.ui.h:4 msgid "Audio IP bandwidth usage" @@ -1603,24 +1511,20 @@ msgid "Video resolution received" msgstr "" #: ../gtk/call_statistics.ui.h:10 -#, fuzzy msgid "Video resolution sent" -msgstr "偏好的視訊解析度:" +msgstr "" #: ../gtk/call_statistics.ui.h:11 -#, fuzzy msgid "RTP profile" -msgstr "RTP 輸入過濾隱器" +msgstr "" #: ../gtk/call_statistics.ui.h:12 -#, fuzzy msgid "Call statistics and information" -msgstr "連絡人資訊" +msgstr "" #: ../gtk/tunnel_config.ui.h:1 -#, fuzzy msgid "Configure VoIP tunnel" -msgstr "設定 SIP 帳號" +msgstr "" #: ../gtk/tunnel_config.ui.h:2 msgid "Host" @@ -1638,70 +1542,9 @@ msgstr "" msgid "Configure http proxy (optional)" msgstr "" -#: ../gtk/keypad.ui.h:1 -msgid "D" -msgstr "D" - -#: ../gtk/keypad.ui.h:2 -msgid "#" -msgstr "#" - -#: ../gtk/keypad.ui.h:3 -msgid "0" -msgstr "0" - -#: ../gtk/keypad.ui.h:4 -msgid "*" -msgstr "*" - -#: ../gtk/keypad.ui.h:6 -msgid "9" -msgstr "9" - -#: ../gtk/keypad.ui.h:7 -msgid "8" -msgstr "8" - -#: ../gtk/keypad.ui.h:8 -msgid "7" -msgstr "7" - -#: ../gtk/keypad.ui.h:9 -msgid "B" -msgstr "B" - -#: ../gtk/keypad.ui.h:10 -msgid "6" -msgstr "6" - -#: ../gtk/keypad.ui.h:11 -msgid "5" -msgstr "5" - -#: ../gtk/keypad.ui.h:12 -msgid "4" -msgstr "4" - -#: ../gtk/keypad.ui.h:13 -msgid "A" -msgstr "A" - -#: ../gtk/keypad.ui.h:14 -msgid "3" -msgstr "3" - -#: ../gtk/keypad.ui.h:15 -msgid "2" -msgstr "2" - -#: ../gtk/keypad.ui.h:16 -msgid "1" -msgstr "1" - #: ../gtk/ldap.ui.h:1 -#, fuzzy msgid "LDAP Settings" -msgstr "設定值" +msgstr "" #: ../gtk/ldap.ui.h:6 msgid "Use TLS Connection" @@ -1712,9 +1555,8 @@ msgid "Not yet available" msgstr "" #: ../gtk/ldap.ui.h:8 -#, fuzzy msgid "Connection" -msgstr "編碼解碼器" +msgstr "" #: ../gtk/ldap.ui.h:9 msgid "Bind DN" @@ -1729,9 +1571,8 @@ msgid "Realm" msgstr "" #: ../gtk/ldap.ui.h:12 -#, fuzzy msgid "SASL" -msgstr "音效" +msgstr "" #: ../gtk/ldap.ui.h:13 msgid "Base object:" @@ -1747,18 +1588,16 @@ msgid "Name Attribute:" msgstr "" #: ../gtk/ldap.ui.h:17 -#, fuzzy msgid "SIP address attribute:" -msgstr "SIP 位址或電話號碼:" +msgstr "" #: ../gtk/ldap.ui.h:18 msgid "Attributes to query:" msgstr "" #: ../gtk/ldap.ui.h:19 -#, fuzzy msgid "Search" -msgstr "搜尋某人" +msgstr "" #: ../gtk/ldap.ui.h:20 msgid "Timeout for search:" @@ -1773,9 +1612,8 @@ msgid "Follow Aliases" msgstr "" #: ../gtk/ldap.ui.h:23 -#, fuzzy msgid "Miscellaneous" -msgstr "視訊" +msgstr "" #: ../gtk/ldap.ui.h:24 msgid "ANONYMOUS" @@ -1806,86 +1644,76 @@ msgid "" "the new configuration. " msgstr "" -#: ../gtk/config-uri.ui.h:4 -msgid "https://" -msgstr "" - #: ../gtk/provisioning-fetch.ui.h:1 -#, fuzzy msgid "Configuring..." -msgstr "連線中..." +msgstr "" #: ../gtk/provisioning-fetch.ui.h:2 msgid "Please wait while fetching configuration from server..." msgstr "" -#: ../coreapi/linphonecore.c:1034 +#: ../coreapi/linphonecore.c:1510 msgid "Ready" msgstr "準備就緒" -#: ../coreapi/linphonecore.c:1967 -#, fuzzy +#: ../coreapi/linphonecore.c:2473 msgid "Configuring" -msgstr "確認" +msgstr "" -#: ../coreapi/linphonecore.c:2133 +#: ../coreapi/linphonecore.c:2638 msgid "Looking for telephone number destination..." msgstr "尋找電話號碼目的端..." -#: ../coreapi/linphonecore.c:2136 +#: ../coreapi/linphonecore.c:2640 msgid "Could not resolve this number." msgstr "無法解析這個號碼。" #. must be known at that time -#: ../coreapi/linphonecore.c:2418 +#: ../coreapi/linphonecore.c:2926 msgid "Contacting" msgstr "正在連絡" -#: ../coreapi/linphonecore.c:2425 +#: ../coreapi/linphonecore.c:2931 msgid "Could not call" msgstr "無法通話" -#: ../coreapi/linphonecore.c:2576 +#: ../coreapi/linphonecore.c:3081 msgid "Sorry, we have reached the maximum number of simultaneous calls" msgstr "抱歉,我們已達瀏同步通話的最大數目" -#: ../coreapi/linphonecore.c:2745 +#: ../coreapi/linphonecore.c:3240 msgid "is contacting you" msgstr "正在連絡您" -#: ../coreapi/linphonecore.c:2746 +#: ../coreapi/linphonecore.c:3241 msgid " and asked autoanswer." msgstr "並要求自動接聽。" -#: ../coreapi/linphonecore.c:2746 -msgid "." -msgstr "." - -#: ../coreapi/linphonecore.c:2865 +#: ../coreapi/linphonecore.c:3359 msgid "Modifying call parameters..." msgstr "修改通話參數..." -#: ../coreapi/linphonecore.c:3194 +#: ../coreapi/linphonecore.c:3707 msgid "Connected." msgstr "已連線。" -#: ../coreapi/linphonecore.c:3220 +#: ../coreapi/linphonecore.c:3732 msgid "Call aborted" msgstr "通話已放棄" -#: ../coreapi/linphonecore.c:3412 +#: ../coreapi/linphonecore.c:3922 msgid "Could not pause the call" msgstr "無法暫停通話" -#: ../coreapi/linphonecore.c:3417 +#: ../coreapi/linphonecore.c:3926 msgid "Pausing the current call..." msgstr "暫停目前的通話..." -#: ../coreapi/misc.c:425 +#: ../coreapi/misc.c:438 msgid "Stun lookup in progress..." msgstr "正在進行 Stun 搜尋..." -#: ../coreapi/misc.c:607 +#: ../coreapi/misc.c:619 msgid "ICE local candidates gathering in progress..." msgstr "" @@ -1934,22 +1762,21 @@ msgid "Pending" msgstr "等待中" #: ../coreapi/friend.c:66 -#, fuzzy msgid "Vacation" -msgstr "時間長度" +msgstr "" #: ../coreapi/friend.c:68 -msgid "Unknown-bug" -msgstr "不明錯誤" +msgid "Unknown status" +msgstr "" -#: ../coreapi/proxy.c:314 +#: ../coreapi/proxy.c:319 msgid "" "The sip proxy address you entered is invalid, it must start with \"sip:\" " "followed by a hostname." msgstr "" "您輸入的 sip 代理位址是無效的,它必須要以「sip:」開頭,後面接主機名稱。" -#: ../coreapi/proxy.c:320 +#: ../coreapi/proxy.c:325 msgid "" "The sip identity you entered is invalid.\n" "It should look like sip:username@proxydomain, such as sip:alice@example.net" @@ -1957,493 +1784,158 @@ msgstr "" "您輸入的 sip 身分是無效的。\n" "它應該看起來像 sip:使用者名稱@代理網域,像是 sip:alice@example.net" -#: ../coreapi/proxy.c:1369 +#: ../coreapi/proxy.c:1377 #, c-format msgid "Could not login as %s" msgstr "無法以 %s 登入" -#: ../coreapi/callbacks.c:355 +#: ../coreapi/callbacks.c:383 msgid "Remote ringing." msgstr "遠端響鈴。" -#: ../coreapi/callbacks.c:373 +#: ../coreapi/callbacks.c:404 msgid "Remote ringing..." msgstr "遠端響鈴..." -#: ../coreapi/callbacks.c:384 +#: ../coreapi/callbacks.c:414 msgid "Early media." msgstr "早期媒體。" -#: ../coreapi/callbacks.c:435 +#: ../coreapi/callbacks.c:475 #, c-format msgid "Call with %s is paused." msgstr "和 %s 的通話已暫停。" -#: ../coreapi/callbacks.c:448 +#: ../coreapi/callbacks.c:488 #, c-format msgid "Call answered by %s - on hold." msgstr "通話由 %s 接聽 - 保留中。" -#: ../coreapi/callbacks.c:459 +#: ../coreapi/callbacks.c:498 msgid "Call resumed." msgstr "通話已繼續。" -#: ../coreapi/callbacks.c:464 +#: ../coreapi/callbacks.c:502 #, c-format msgid "Call answered by %s." msgstr "通話由 %s 接聽。" -#: ../coreapi/callbacks.c:483 +#: ../coreapi/callbacks.c:525 msgid "Incompatible, check codecs or security settings..." msgstr "" -#: ../coreapi/callbacks.c:512 -#, fuzzy -msgid "We have been resumed." -msgstr "我們要繼續了..." +#: ../coreapi/callbacks.c:530 ../coreapi/callbacks.c:826 +msgid "Incompatible media parameters." +msgstr "" -#: ../coreapi/callbacks.c:521 +#: ../coreapi/callbacks.c:560 +msgid "We have been resumed." +msgstr "" + +#. we are being paused +#: ../coreapi/callbacks.c:568 msgid "We are paused by other party." msgstr "" -#: ../coreapi/callbacks.c:556 +#. reINVITE and in-dialogs UPDATE go here +#: ../coreapi/callbacks.c:602 msgid "Call is updated by remote." msgstr "" -#: ../coreapi/callbacks.c:658 +#: ../coreapi/callbacks.c:705 msgid "Call terminated." msgstr "通話已終止。" -#: ../coreapi/callbacks.c:687 +#: ../coreapi/callbacks.c:733 msgid "User is busy." msgstr "使用者現正忙碌。" -#: ../coreapi/callbacks.c:688 +#: ../coreapi/callbacks.c:734 msgid "User is temporarily unavailable." msgstr "使用者暫時無法聯繫。" #. char *retrymsg=_("%s. Retry after %i minute(s)."); -#: ../coreapi/callbacks.c:690 +#: ../coreapi/callbacks.c:736 msgid "User does not want to be disturbed." msgstr "使用者不想要被打擾。" -#: ../coreapi/callbacks.c:691 +#: ../coreapi/callbacks.c:737 msgid "Call declined." msgstr "通話被拒接。" -#: ../coreapi/callbacks.c:706 +#: ../coreapi/callbacks.c:752 msgid "Request timeout." msgstr "" -#: ../coreapi/callbacks.c:737 +#: ../coreapi/callbacks.c:780 msgid "Redirected" msgstr "已重新導向" -#: ../coreapi/callbacks.c:787 -msgid "Incompatible media parameters." -msgstr "" - -#: ../coreapi/callbacks.c:798 +#: ../coreapi/callbacks.c:835 msgid "Call failed." msgstr "通話失敗。" -#: ../coreapi/callbacks.c:878 +#: ../coreapi/callbacks.c:913 #, c-format msgid "Registration on %s successful." msgstr "在 %s 註冊成功。" -#: ../coreapi/callbacks.c:879 +#: ../coreapi/callbacks.c:914 #, c-format msgid "Unregistration on %s done." msgstr "在 %s 取消註冊完成。" -#: ../coreapi/callbacks.c:897 +#: ../coreapi/callbacks.c:932 msgid "no response timeout" msgstr "沒有回應逾時" -#: ../coreapi/callbacks.c:900 +#: ../coreapi/callbacks.c:935 #, c-format msgid "Registration on %s failed: %s" msgstr "在 %s 註冊失敗:%s" -#: ../coreapi/callbacks.c:907 +#: ../coreapi/callbacks.c:942 msgid "Service unavailable, retrying" msgstr "" -#: ../coreapi/linphonecall.c:177 -#, fuzzy, c-format +#: ../coreapi/linphonecall.c:174 +#, c-format msgid "Authentication token is %s" -msgstr "驗證失敗" +msgstr "" -#: ../coreapi/linphonecall.c:2932 +#: ../coreapi/linphonecall.c:3020 #, c-format msgid "You have missed %i call." msgid_plural "You have missed %i calls." msgstr[0] "您有 %i 通未接來電。" -#~ msgid "aborted" -#~ msgstr "已放棄" - -#~ msgid "completed" -#~ msgstr "已完成" - -#~ msgid "missed" -#~ msgstr "未接" - -#~ msgid "" -#~ "%s at %s\n" -#~ "From: %s\n" -#~ "To: %s\n" -#~ "Status: %s\n" -#~ "Duration: %i mn %i sec\n" -#~ msgstr "" -#~ "%s 於 %s\n" -#~ "從:%s\n" -#~ "到:%s\n" -#~ "狀態:%s\n" -#~ "持續時間:%i 分 %i 秒\n" - -#~ msgid "Outgoing call" -#~ msgstr "去電" - -#~ msgid "No response." -#~ msgstr "沒有回應。" - -#~ msgid "Protocol error." -#~ msgstr "通訊協定錯誤。" - -#~ msgid "" -#~ "Could not parse given sip address. A sip url usually looks like sip:" -#~ "user@domain" -#~ msgstr "無法解析指定的 sip 位址。sip 網址通常看起來像 sip:user@domain" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the pcm oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ "'modprobe snd-pcm-oss' as root to load it." -#~ msgstr "" -#~ "您的電腦似乎是使用 ALSA 音效驅動程式。\n" -#~ "這是最好的選擇。然而缺少了 pcm oss 模擬模組\n" -#~ "而 linphone 需要它。請以 root 執行\n" -#~ "'modprobe snd-pcm-oss' 載入它。" - -#~ msgid "" -#~ "Your computer appears to be using ALSA sound drivers.\n" -#~ "This is the best choice. However the mixer oss emulation module\n" -#~ "is missing and linphone needs it. Please execute\n" -#~ " 'modprobe snd-mixer-oss' as root to load it." -#~ msgstr "" -#~ "您的電腦似乎是使用 ALSA 音效驅動程式。\n" -#~ "這是最好的選擇。然而缺少了 mixer oss 模擬模組\n" -#~ "而 linphone 需要它。請以 root 執行\n" -#~ "'modprobe snd-mixer-oss' 載入它。" - -#~ msgid "Keypad" -#~ msgstr "撥號盤" - -#~ msgid "Chat with %s" -#~ msgstr "和 %s 聊天" - -#~ msgid "Please choose a username:" -#~ msgstr "請選擇一個使用者名稱:" - -#~ msgid "Checking if '%s' is available..." -#~ msgstr "檢查「%s」是否可用…" - -#~ msgid "Please wait..." -#~ msgstr "請稍候..." - -#~ msgid "Sorry this username already exists. Please try a new one." -#~ msgstr "很抱歉這個使用者名稱已經存在。請嘗試新的名稱。" - -#~ msgid "Ok !" -#~ msgstr "確定!" - -#~ msgid "Communication problem, please try again later." -#~ msgstr "連線問題,請稍後再試一次。" - -#~ msgid "Choosing a username" -#~ msgstr "選擇使用者名稱" - -#~ msgid "Verifying" -#~ msgstr "檢驗中" - -#~ msgid "Creating your account" -#~ msgstr "正在建立您的帳號" - -#~ msgid "Now ready !" -#~ msgstr "現在已就緒!" - -#, fuzzy -#~ msgid "Enable video" -#~ msgstr "已啟用" - -#~ msgid "Enter username, phone number, or full sip address" -#~ msgstr "輸入使用者名稱、電話號碼或完整的 sip 位址" - -#~ msgid "Lookup:" -#~ msgstr "查詢:" - -#~ msgid "in" -#~ msgstr "於" - -#~ msgid "" -#~ "Register to FONICS\n" -#~ "virtual network !" -#~ msgstr "" -#~ "註冊到 FONICS\n" -#~ "虛擬網路!" - -#~ msgid "We are being paused..." -#~ msgstr "我們被暫停了..." - -#~ msgid "No common codecs" -#~ msgstr "沒有通用的編碼解碼器" - -#~ msgid "Windows" -#~ msgstr "視窗" - -#~ msgid "" -#~ "Pause all calls\n" -#~ "and answer" -#~ msgstr "" -#~ "暫停所有播打\n" -#~ "與接聽" - -#~ msgid "Unmute" -#~ msgstr "取消靜音" - -#~ msgid "Contact list" -#~ msgstr "連絡人清單 " - -#~ msgid "Audio & video" -#~ msgstr "語音 & 視訊" - -#~ msgid "Audio only" -#~ msgstr "只有語音" - -#~ msgid "Duration:" -#~ msgstr "時間長度:" - -#~ msgid "_Call history" -#~ msgstr "通話紀錄(_C)" - -#~ msgid "_Linphone" -#~ msgstr "_Linphone" - -#~ msgid "gtk-cancel" -#~ msgstr "gtk-cancel" - -#~ msgid "gtk-ok" -#~ msgstr "gtk-ok" - -#~ msgid "Register at startup" -#~ msgstr "啟動時註冊" - -#~ msgid "gtk-close" -#~ msgstr "gtk-close" - -#~ msgid "Sorry, you have to pause or stop the current call first !" -#~ msgstr "抱歉,您必須先暫停或停止目前的通話!" - -#~ msgid "There is already a call in process, pause or stop it first." -#~ msgstr "已經有通話在進行中,請先暫停或停止它。" - -#~ msgid "" -#~ "Your machine appears to be connected to an IPv6 network. By default " -#~ "linphone always uses IPv4. Please update your configuration if you want " -#~ "to use IPv6" -#~ msgstr "" -#~ "您的電腦似乎連接到 IPv6 網路。linphone 預設會先使用 IPv4。如果您想要使用 " -#~ "IPv6 請更新您的組態" - -#~ msgid "ITU-G.711 alaw encoder" -#~ msgstr "ITU-G.711 alaw 編碼器" - -#~ msgid "ITU-G.711 alaw decoder" -#~ msgstr "ITU-G.711 alaw 解碼器" - -#~ msgid "Alsa sound output" -#~ msgstr "Alsa 音效輸出" - -#~ msgid "Sound capture filter for MacOS X Audio Queue Service" -#~ msgstr "MacOS X 音效佇列服務的音效擷取過濾器" - -#~ msgid "Sound playback filter for MacOS X Audio Queue Service" -#~ msgstr "MacOS X 音效佇列服務的音效播放過濾器" - -#~ msgid "DTMF generator" -#~ msgstr "DTMF 產生器" - -#~ msgid "The GSM full-rate codec" -#~ msgstr "GSM 全頻率編解碼器" - -#~ msgid "The GSM codec" -#~ msgstr "GSM 編解碼器" - -#~ msgid "Sound capture filter for MacOS X Core Audio drivers" -#~ msgstr "MacOS X 核心音效驅動程式的音效擷取過濾器" - -#~ msgid "Sound playback filter for MacOS X Core Audio drivers" -#~ msgstr "MacOS X 核心音效驅動程式的音效播放過濾器" - -#~ msgid "A filter to make conferencing" -#~ msgstr "進行會議的過濾器" - -#~ msgid "Raw files and wav reader" -#~ msgstr "Raw 檔案與 wav 讀取器" - -#~ msgid "Wav file recorder" -#~ msgstr "Wav 檔案錄製器" - -#~ msgid "A filter that send several inputs to one output." -#~ msgstr "傳送多個輸入到一個輸出的過濾器。" - -#~ msgid "RTP output filter" -#~ msgstr "RTP 輸出過濾隱器" - -#~ msgid "The free and wonderful speex codec" -#~ msgstr "免費好用的 speex 編解碼器" - -#~ msgid "A filter that controls and measure sound volume" -#~ msgstr "控制並測量音量的過濾器" - -#~ msgid "A video4linux compatible source filter to stream pictures." -#~ msgstr "video4linux 相容來源過濾器至串流圖片。" - -#~ msgid "A filter to grab pictures from Video4Linux2-powered cameras" -#~ msgstr "從 Video4Linux2 攝影機擷取圖片的過濾器" - -#~ msgid "A filter that outputs a static image." -#~ msgstr "輸出靜態圖片的過濾器。" - -#~ msgid "A pixel format converter" -#~ msgstr "像素格式轉換器" - -#~ msgid "A video size converter" -#~ msgstr "視訊大小轉換器" - -#~ msgid "a small video size converter" -#~ msgstr "一個小型的視訊大小轉換器" - -#~ msgid "Echo canceller using speex library" -#~ msgstr "使用 speex 程式庫的回音消除器" - -#~ msgid "A filter that reads from input and copy to its multiple outputs." -#~ msgstr "從輸入讀取並將它複製到多個輸出的過濾器。" - -#~ msgid "The theora video encoder from xiph.org" -#~ msgstr "來自 xiph.org 的 theora 視訊編碼器" - -#~ msgid "The open-source and royalty-free 'theora' video codec from xiph.org" -#~ msgstr "來自 xiph.org 的開放原始碼且沒有版稅的「theora」視訊編解碼器" - -#~ msgid "The theora video decoder from xiph.org" -#~ msgstr "來自 xiph.org 的 theora 視訊解碼器" - -#~ msgid "ITU-G.711 ulaw encoder" -#~ msgstr "ITU-G.711 ulaw 編碼器" - -#~ msgid "ITU-G.711 ulaw decoder" -#~ msgstr "ITU-G.711 ulaw 解碼器" - -#~ msgid "A H.263 decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 程式庫的 H.263 解碼器" - -#~ msgid "A MPEG4 decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 程式庫的 MPEG4 解碼器" - -#~ msgid "A RTP/JPEG decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 程式庫的 RTP/JPEG 解碼器" - -#~ msgid "A MJPEG decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 程式庫的 MJPEG 解碼器" - -#~ msgid "A snow decoder using ffmpeg library" -#~ msgstr "使用 ffmpeg 程式庫的 snow 解碼器" - -#~ msgid "A video H.263 encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 程式庫的視訊 H.263 編碼器。" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library. It is compliant with old " -#~ "RFC2190 spec." -#~ msgstr "使用 ffmpeg 程式庫的視訊 H.263 編碼器。它符合舊的 RFC2190 規格。" - -#~ msgid "A video MPEG4 encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 程式庫的視訊 MPEG4 編碼器。" - -#~ msgid "A video snow encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 程式庫的視訊 snow 編碼器。" - -#~ msgid "A RTP/MJPEG encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 程式庫的 RTP/MJPEG 編碼器。" - -#~ msgid "" -#~ "A video H.263 encoder using ffmpeg library, compliant with old RFC2190 " -#~ "spec." -#~ msgstr "使用 ffmpeg 程式庫的視訊 H.263 編碼器,它符合舊的 RFC2190 規格。" - -#~ msgid "" -#~ "The snow codec is royalty-free and is open-source. \n" -#~ "It uses innovative techniques that makes it one of most promising video " -#~ "codec. It is implemented within the ffmpeg project.\n" -#~ "However it is under development, quite unstable and compatibility with " -#~ "other versions cannot be guaranteed." -#~ msgstr "" -#~ "snow 編解碼器是免版稅的,而且是開放源始碼。 \n" -#~ "它採用創新技術,使一種最前瞻的視訊編解碼器。它在 ffmpeg 專案中實作。\n" -#~ "然而,它正在開發中,相當不穩定且不能保證與其他版本的相容性。" - -#~ msgid "A MJPEG encoder using ffmpeg library." -#~ msgstr "使用 ffmpeg 程式庫的 MJPEG 編碼器。" - -#~ msgid "A SDL-based video display" -#~ msgstr "基於 SDL 的視訊顯示" - -#~ msgid "A video4windows compatible source filter to stream pictures." -#~ msgstr "video4windows 相容來源過濾器至串流圖片。" - -#~ msgid "A video for windows (vfw.h) based source filter to grab pictures." -#~ msgstr "windows (vfw.h) 視訊為基礎的來源過濾器以擷取圖片。" - -#~ msgid "" -#~ "A filter that trashes its input (useful for terminating some graphs)." -#~ msgstr "將輸入丟棄的過濾器(可用來中止某些圖形)。" - -#~ msgid "Parametric sound equalizer." -#~ msgstr "參數化音效等化器。" - -#~ msgid "A webcam grabber based on directshow." -#~ msgstr "基於 directshow 的網路攝影機擷取器。" - -#~ msgid "A video display based on windows DrawDib api" -#~ msgstr "基於 windows DrawDib api 的視訊顯示" - -#~ msgid "A filter that mixes down 16 bit sample audio streams" -#~ msgstr "混合 16 位元取樣音效串流的過濾器" - -#~ msgid "A filter that converts from mono to stereo and vice versa." -#~ msgstr "將單聲道與雙聲道互相轉換的過濾器。" - -#~ msgid "A display filter sending the buffers to draw to the upper layer" -#~ msgstr "傳送緩衝區以繪製到上層圖層的顯示過濾器" - -#~ msgid "Sound capture filter for MacOS X Audio Unit Service" -#~ msgstr "MacOS X 音效單元服務的音效擷取過濾器" - -#~ msgid "Sound playback filter for MacOS X Audio Unit Service" -#~ msgstr "MacOS X 音效單元服務的音效播放過濾器" - -#~ msgid "A video display using X11+Xv" -#~ msgstr "使用 X11+Xv 的視訊顯示" - -#~ msgid "Sound capture filter for Android" -#~ msgstr "Android 音效擷取過濾器" - -#~ msgid "Sound playback filter for Android" -#~ msgstr "Android 音效播放過濾器" - -#~ msgid "A filter that captures Android video." -#~ msgstr "擷取 Android 視訊的過濾器。" +#: ../coreapi/call_log.c:209 +msgid "aborted" +msgstr "" + +#: ../coreapi/call_log.c:212 +msgid "completed" +msgstr "" + +#: ../coreapi/call_log.c:215 +msgid "missed" +msgstr "" + +#: ../coreapi/call_log.c:220 +#, c-format +msgid "" +"%s at %s\n" +"From: %s\n" +"To: %s\n" +"Status: %s\n" +"Duration: %i mn %i sec\n" +msgstr "" + +#: ../coreapi/call_log.c:221 +msgid "Outgoing call" +msgstr "" + +#: ../gtk/videowindow.c:66 +#, c-format +msgid "Cannot play %s." +msgstr "" diff --git a/share/CMakeLists.txt b/share/CMakeLists.txt index 03b36a74d..58c575c90 100644 --- a/share/CMakeLists.txt +++ b/share/CMakeLists.txt @@ -20,13 +20,49 @@ # ############################################################################ -install(FILES archived-rootca.pem - RENAME rootca.pem - DESTINATION share/linphone - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +if(APPLE) + find_program(OPENSSL_PROGRAM openssl) + execute_process( + COMMAND ${OPENSSL_PROGRAM} version -d + OUTPUT_VARIABLE OPENSSL_VERSION + OUTPUT_STRIP_TRAILING_WHITESPACE + ) + string(REGEX REPLACE "OPENSSLDIR: \"(.*)\"" "\\1" HTTPS_CA_DIR "${OPENSSL_VERSION}") +endif() -install(FILES ringback.wav - DESTINATION share/sounds/linphone - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +execute_process(COMMAND ${CMAKE_COMMAND} -DHTTPS_CA_DIR=${HTTPS_CA_DIR} -DWORK_DIR=${CMAKE_CURRENT_SOURCE_DIR} -DOUTPUT_DIR=${CMAKE_CURRENT_BINARY_DIR} -P ${CMAKE_CURRENT_SOURCE_DIR}/rootca.cmake) + +install(FILES ${CMAKE_CURRENT_BINARY_DIR}/rootca.pem + DESTINATION ${PACKAGE_DATA_DIR}/linphone + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ +) + +set(SOUND_FILES + hello16000.wav + hello8000.wav + incoming_chat.wav + ringback.wav +) + +install(FILES ${SOUND_FILES} + DESTINATION ${PACKAGE_SOUND_DIR} + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ +) + +if(ENABLE_GTK_UI) + set(prefix "${CMAKE_INSTALL_PREFIX}") + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/audio-assistant.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/audio-assistant.desktop) + configure_file(${CMAKE_CURRENT_SOURCE_DIR}/linphone.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/linphone.desktop) + + set(FREEDESKTOP_FILES + ${CMAKE_CURRENT_BINARY_DIR}/audio-assistant.desktop + ${CMAKE_CURRENT_BINARY_DIR}/linphone.desktop + ) + + install(FILES ${FREEDESKTOP_FILES} + DESTINATION ${PACKAGE_FREEDESKTOP_DIR} + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ + ) +endif() add_subdirectory(rings) diff --git a/share/audio-assistant.desktop.in b/share/audio-assistant.desktop.in index 8f2ef4c54..dc0734bc6 100644 --- a/share/audio-assistant.desktop.in +++ b/share/audio-assistant.desktop.in @@ -6,6 +6,6 @@ Comment[fr]=Assistant audio de Linphone. Comment[ru]=Помощник аудио Linphone Type=Application Exec=linphone --run-audio-assistant -Icon=/usr/local/share/pixmaps/linphone/linphone.png +Icon=@prefix@/share/pixmaps/linphone/linphone.png Terminal=false Categories=Network;Telephony; \ No newline at end of file diff --git a/share/rings/CMakeLists.txt b/share/rings/CMakeLists.txt index 63f2c47ac..6ec2182e2 100644 --- a/share/rings/CMakeLists.txt +++ b/share/rings/CMakeLists.txt @@ -20,7 +20,20 @@ # ############################################################################ -install(FILES oldphone.wav toy-mono.wav - COMPONENT COMP_liblinphone - DESTINATION share/sounds/linphone/rings - PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ) +set(RING_FILES + bigben.wav + oldphone-mono-30s.caf + oldphone-mono.wav + oldphone.wav + orig.wav + rock.wav + sweet.wav + synth.wav + tapping.wav + toy-mono.wav +) + +install(FILES ${RING_FILES} + DESTINATION ${PACKAGE_RING_DIR} + PERMISSIONS OWNER_READ OWNER_WRITE GROUP_READ WORLD_READ +) diff --git a/share/rootca.cmake b/share/rootca.cmake new file mode 100644 index 000000000..d988b778e --- /dev/null +++ b/share/rootca.cmake @@ -0,0 +1,40 @@ +############################################################################ +# rootca.cmake +# Copyright (C) 2014 Belledonne Communications, Grenoble France +# +############################################################################ +# +# 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 2 +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################ + +if(HTTPS_CA_DIR) + set(ENV{HTTPS_CA_DIR} "${HTTPS_CA_DIR}") +endif() + +execute_process( + COMMAND ${CMAKE_COMMAND} -E remove "fresh-rootca.pem" + WORKING_DIRECTORY ${OUTPUT_DIR} +) +execute_process( + COMMAND "../scripts/mk-ca-bundle.pl" "${OUTPUT_DIR}/fresh-rootca.pem" + WORKING_DIRECTORY ${WORK_DIR} +) +if(EXISTS "${OUTPUT_DIR}/fresh-rootca.pem") + file(RENAME "${OUTPUT_DIR}/fresh-rootca.pem" "${OUTPUT_DIR}/rootca.pem") +else() + file(COPY "${WORK_DIR}/archived-rootca.pem" DESTINATION "${OUTPUT_DIR}") + file(RENAME "${OUTPUT_DIR}/archived-rootca.pem" "${OUTPUT_DIR}/rootca.pem") +endif() diff --git a/tester/CMakeLists.txt b/tester/CMakeLists.txt new file mode 100644 index 000000000..8f3bd33a8 --- /dev/null +++ b/tester/CMakeLists.txt @@ -0,0 +1,46 @@ +############################################################################ +# CMakeLists.txt +# Copyright (C) 2014 Belledonne Communications, Grenoble France +# +############################################################################ +# +# 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 2 +# 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. +# +############################################################################ + +set(SOURCE_FILES + accountmanager.c + call_tester.c + dtmf_tester.c + eventapi_tester.c + flexisip_tester.c + liblinphone_tester.c + log_collection_tester.c + message_tester.c + player_tester.c + presence_tester.c + quality_reporting_tester.c + register_tester.c + remote_provisioning_tester.c + setup_tester.c + stun_tester.c + tester.c + transport_tester.c + upnp_tester.c +) + +add_executable(liblinphone_tester ${SOURCE_FILES}) +target_include_directories(liblinphone_tester PUBLIC ${CUNIT_INCLUDE_DIRS}) +target_link_libraries(liblinphone_tester linphone ${CUNIT_LIBRARIES}) diff --git a/tester/Makefile.am b/tester/Makefile.am index d8877119d..d296841ad 100644 --- a/tester/Makefile.am +++ b/tester/Makefile.am @@ -22,8 +22,11 @@ liblinphonetester_la_SOURCES = tester.c \ stun_tester.c \ remote_provisioning_tester.c \ quality_reporting_tester.c \ + log_collection_tester.c \ transport_tester.c \ - player_tester.c + player_tester.c \ + dtmf_tester.c \ + accountmanager.c liblinphonetester_la_LDFLAGS= -no-undefined liblinphonetester_la_LIBADD= ../coreapi/liblinphone.la $(CUNIT_LIBS) @@ -42,7 +45,7 @@ endif test: liblinphone_tester - ./liblinphone_tester --config $(abs_srcdir) + ./liblinphone_tester --config $(abs_srcdir) $(TEST_OPTIONS) else !BUILD_CUNIT_TESTS diff --git a/tester/accountmanager.c b/tester/accountmanager.c new file mode 100644 index 000000000..c0fc054cc --- /dev/null +++ b/tester/accountmanager.c @@ -0,0 +1,215 @@ + /* + tester - liblinphone test suite + Copyright (C) 2013 Belledonne Communications SARL + + 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 2 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, see . + */ + +#include "liblinphone_tester.h" +#include "private.h" + +struct _Account{ + LinphoneAddress *identity; + LinphoneAddress *modified_identity; + char *password; + int created; + int done; + int auth_requested; +}; + +typedef struct _Account Account; + +Account *account_new(LinphoneAddress *identity, const char *unique_id){ + char *modified_username; + Account *obj=ms_new0(Account,1); + + /* we need to inhibit leak detector because the two LinphoneAddress will remain behond the scope of the test being run */ + belle_sip_object_inhibit_leak_detector(TRUE); + obj->identity=linphone_address_clone(identity); + obj->password=sal_get_random_token(8); + obj->modified_identity=linphone_address_clone(identity); + modified_username=ms_strdup_printf("%s_%s",linphone_address_get_username(identity), unique_id); + linphone_address_set_username(obj->modified_identity, modified_username); + ms_free(modified_username); + belle_sip_object_inhibit_leak_detector(FALSE); + return obj; +}; + +void account_destroy(Account *obj){ + linphone_address_unref(obj->identity); + linphone_address_unref(obj->modified_identity); + ms_free(obj->password); + ms_free(obj); +} + +struct _AccountManager{ + char *unique_id; + MSList *accounts; +}; + +typedef struct _AccountManager AccountManager; + +static AccountManager *the_am=NULL; + +AccountManager *account_manager_get(void){ + if (the_am==NULL){ + the_am=ms_new0(AccountManager,1); + the_am->unique_id=sal_get_random_token(6); + } + return the_am; +} + +void account_manager_destroy(void){ + if (the_am){ + ms_free(the_am->unique_id); + ms_list_free_with_data(the_am->accounts,(void(*)(void*))account_destroy); + ms_free(the_am); + } + the_am=NULL; +} + +Account *account_manager_get_account(AccountManager *m, const LinphoneAddress *identity){ + MSList *it; + + for(it=m->accounts;it!=NULL;it=it->next){ + Account *a=(Account*)it->data; + if (linphone_address_weak_equal(a->identity,identity)){ + return a; + } + } + return NULL; +} + +static void account_created_on_server_cb(LinphoneCore *lc, LinphoneProxyConfig *cfg, LinphoneRegistrationState state, const char *info){ + Account *account=(Account*)linphone_core_get_user_data(lc); + switch(state){ + case LinphoneRegistrationOk: + account->created=1; + break; + case LinphoneRegistrationCleared: + account->done=1; + break; + default: + break; + } +} + +static void account_created_auth_requested_cb(LinphoneCore *lc, const char *username, const char *realm, const char *domain){ + Account *account=(Account*)linphone_core_get_user_data(lc); + account->auth_requested=1; +} + +void account_create_on_server(Account *account, const LinphoneProxyConfig *refcfg){ + LinphoneCoreVTable vtable={0}; + LinphoneCore *lc; + LinphoneAddress *tmp_identity=linphone_address_clone(account->modified_identity); + LinphoneProxyConfig *cfg; + LinphoneAuthInfo *ai; + char *tmp; + LinphoneAddress *server_addr; + + vtable.registration_state_changed=account_created_on_server_cb; + vtable.auth_info_requested=account_created_auth_requested_cb; + lc=configure_lc_from(&vtable,NULL,NULL,account); + + cfg=linphone_core_create_proxy_config(lc); + linphone_address_set_password(tmp_identity,account->password); + linphone_address_set_header(tmp_identity,"X-Create-Account","yes"); + tmp=linphone_address_as_string(tmp_identity); + linphone_proxy_config_set_identity(cfg,tmp); + ms_free(tmp); + linphone_address_unref(tmp_identity); + + server_addr=linphone_address_new(linphone_proxy_config_get_server_addr(refcfg)); + linphone_address_set_transport(server_addr,LinphoneTransportTcp); /*use tcp for account creation*/ + tmp=linphone_address_as_string(server_addr); + linphone_proxy_config_set_server_addr(cfg,tmp); + ms_free(tmp); + linphone_address_unref(server_addr); + linphone_proxy_config_set_expires(cfg,3600); + + linphone_core_add_proxy_config(lc,cfg); + + if (wait_for_until(lc,NULL,&account->auth_requested,1,10000)==FALSE){ + ms_fatal("Account for %s could not be created on server.", linphone_proxy_config_get_identity(refcfg)); + } + linphone_proxy_config_stop_refreshing(cfg); /*so that op is destroyed; we need to remove the X-create-account*/ + linphone_proxy_config_edit(cfg); + tmp=linphone_address_as_string(account->modified_identity); + linphone_proxy_config_set_identity(cfg,tmp); /*remove the X-Create-Account header*/ + ms_free(tmp); + linphone_proxy_config_done(cfg); + + ai=linphone_auth_info_new(linphone_address_get_username(account->modified_identity), + NULL, + account->password,NULL,NULL,linphone_address_get_domain(account->modified_identity)); + linphone_core_add_auth_info(lc,ai); + linphone_auth_info_destroy(ai); + + if (wait_for_until(lc,NULL,&account->created,1,3000)==FALSE){ + ms_fatal("Account for %s is not working on server.", linphone_proxy_config_get_identity(refcfg)); + } + linphone_core_remove_proxy_config(lc,cfg); + linphone_proxy_config_unref(cfg); + if (wait_for_until(lc,NULL,&account->done,1,3000)==FALSE){ + ms_error("Account creation could not clean the registration context."); + } + linphone_core_destroy(lc); +} + +LinphoneAddress *account_manager_check_account(AccountManager *m, LinphoneProxyConfig *cfg){ + LinphoneCore *lc=linphone_proxy_config_get_core(cfg); + const char *identity=linphone_proxy_config_get_identity(cfg); + LinphoneAddress *id_addr=linphone_address_new(identity); + Account *account=account_manager_get_account(m,id_addr); + LinphoneAuthInfo *ai; + char *tmp; + bool_t create_account=FALSE; + + if (!account){ + account=account_new(id_addr,m->unique_id); + ms_message("No account for %s exists, going to create one.",identity); + create_account=TRUE; + m->accounts=ms_list_append(m->accounts,account); + } + tmp=linphone_address_as_string(account->modified_identity); + linphone_proxy_config_set_identity(cfg,tmp); + ms_free(tmp); + + if (create_account){ + account_create_on_server(account,cfg); + } + ai=linphone_auth_info_new(linphone_address_get_username(account->modified_identity), + NULL, + account->password,NULL,NULL,linphone_address_get_domain(account->modified_identity)); + linphone_core_add_auth_info(lc,ai); + linphone_auth_info_destroy(ai); + + linphone_address_unref(id_addr); + return account->modified_identity; +} + +void linphone_core_manager_check_accounts(LinphoneCoreManager *m){ + const MSList *it; + AccountManager *am=account_manager_get(); + + for(it=linphone_core_get_proxy_config_list(m->lc);it!=NULL;it=it->next){ + LinphoneProxyConfig *cfg=(LinphoneProxyConfig *)it->data; + LinphoneAddress *modified_identity=account_manager_check_account(am,cfg); + if (m->identity){ + linphone_address_unref(m->identity); + } + m->identity=linphone_address_ref(modified_identity); + } +} diff --git a/tester/call_tester.c b/tester/call_tester.c index a2feaab92..453c684ad 100644 --- a/tester/call_tester.c +++ b/tester/call_tester.c @@ -73,10 +73,22 @@ void call_state_changed(LinphoneCore *lc, LinphoneCall *call, LinphoneCallState case LinphoneCallIncomingEarlyMedia :counters->number_of_LinphoneCallIncomingEarlyMedia++;break; case LinphoneCallUpdating :counters->number_of_LinphoneCallUpdating++;break; case LinphoneCallReleased :counters->number_of_LinphoneCallReleased++;break; + case LinphoneCallEarlyUpdating: counters->number_of_LinphoneCallEarlyUpdating++;break; + case LinphoneCallEarlyUpdatedByRemote: counters->number_of_LinphoneCallEarlyUpdatedByRemote++;break; default: CU_FAIL("unexpected event");break; } } + +void call_stats_updated(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallStats *lstats) { + stats* counters = get_stats(lc); + if (lstats->updated == LINPHONE_CALL_STATS_RECEIVED_RTCP_UPDATE) { + counters->number_of_rtcp_received++; + } else if (lstats->updated == LINPHONE_CALL_STATS_SENT_RTCP_UPDATE) { + counters->number_of_rtcp_sent++; + } +} + void linphone_call_encryption_changed(LinphoneCore *lc, LinphoneCall *call, bool_t on, const char *authentication_token) { char* to=linphone_address_as_string(linphone_call_get_call_log(call)->to); char* from=linphone_address_as_string(linphone_call_get_call_log(call)->from); @@ -143,7 +155,7 @@ void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreMana if (!c1 || !c2) return; linphone_call_ref(c1); linphone_call_ref(c2); - + liblinphone_tester_clock_start(&ts); do { if (linphone_call_get_audio_stats(c1)->round_trip_delay >0.0 @@ -169,13 +181,21 @@ void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreMana bool_t call_with_params2(LinphoneCoreManager* caller_mgr ,LinphoneCoreManager* callee_mgr - , const LinphoneCallParams *caller_params - , const LinphoneCallParams *callee_params, bool_t build_callee_params) { + , const LinphoneCallTestParams *caller_test_params + , const LinphoneCallTestParams *callee_test_params + , bool_t build_callee_params) { int retry=0; stats initial_caller=caller_mgr->stat; stats initial_callee=callee_mgr->stat; bool_t result=FALSE; char hellopath[256]; + LinphoneCallParams *caller_params = caller_test_params->base; + LinphoneCallParams *callee_params = callee_test_params->base; + bool_t did_received_call; + + sal_default_enable_sdp_removal(caller_mgr->lc->sal, caller_test_params->sdp_removal); + sal_default_enable_sdp_removal(callee_mgr->lc->sal, callee_test_params->sdp_removal); + /*use playfile for callee to avoid locking on capture card*/ linphone_core_use_files (callee_mgr->lc,TRUE); snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix); @@ -186,12 +206,18 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr CU_ASSERT_PTR_NOT_NULL(linphone_core_invite_address_with_params(caller_mgr->lc,callee_mgr->identity,caller_params)); } - /*linphone_core_invite(caller_mgr->lc,"pauline");*/ + did_received_call = wait_for(callee_mgr->lc + ,caller_mgr->lc + ,&callee_mgr->stat.number_of_LinphoneCallIncomingReceived + ,initial_callee.number_of_LinphoneCallIncomingReceived+1); + CU_ASSERT_EQUAL(did_received_call, !callee_test_params->sdp_removal); + + sal_default_enable_sdp_removal(caller_mgr->lc->sal, FALSE); + sal_default_enable_sdp_removal(callee_mgr->lc->sal, FALSE); + + if (!did_received_call) return 0; + - CU_ASSERT_TRUE(wait_for(callee_mgr->lc - ,caller_mgr->lc - ,&callee_mgr->stat.number_of_LinphoneCallIncomingReceived - ,initial_callee.number_of_LinphoneCallIncomingReceived+1)); CU_ASSERT_TRUE(linphone_core_inc_invite_pending(callee_mgr->lc)); CU_ASSERT_EQUAL(caller_mgr->stat.number_of_LinphoneCallOutgoingProgress,initial_caller.number_of_LinphoneCallOutgoingProgress+1); @@ -210,13 +236,16 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call_remote_address(callee_mgr->lc)); - if(!linphone_core_get_current_call(caller_mgr->lc) || !linphone_core_get_current_call(callee_mgr->lc) || !linphone_core_get_current_call_remote_address(callee_mgr->lc)) + if(!linphone_core_get_current_call(caller_mgr->lc) || !linphone_core_get_current_call(callee_mgr->lc) || !linphone_core_get_current_call_remote_address(callee_mgr->lc)) { return 0; - else { + } else { LinphoneAddress* callee_from=linphone_address_clone(caller_mgr->identity); linphone_address_set_port(callee_from,0); /*remove port because port is never present in from header*/ + if (linphone_call_params_get_privacy(linphone_call_get_current_params(linphone_core_get_current_call(caller_mgr->lc))) == LinphonePrivacyNone) { - CU_ASSERT_TRUE(linphone_address_weak_equal(callee_from,linphone_core_get_current_call_remote_address(callee_mgr->lc))); + /*don't check in case of p asserted id*/ + if (!lp_config_get_int(callee_mgr->lc->config,"sip","call_logs_use_asserted_id_instead_of_from",0)) + CU_ASSERT_TRUE(linphone_address_weak_equal(callee_from,linphone_core_get_current_call_remote_address(callee_mgr->lc))); } else { CU_ASSERT_FALSE(linphone_address_weak_equal(callee_from,linphone_core_get_current_call_remote_address(callee_mgr->lc))); } @@ -259,9 +288,19 @@ bool_t call_with_params2(LinphoneCoreManager* caller_mgr bool_t call_with_params(LinphoneCoreManager* caller_mgr ,LinphoneCoreManager* callee_mgr - , const LinphoneCallParams *caller_params - , const LinphoneCallParams *callee_params){ - return call_with_params2(caller_mgr,callee_mgr,caller_params,callee_params,FALSE); + ,const LinphoneCallParams *caller_params + ,const LinphoneCallParams *callee_params){ + LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0}; + caller_test_params.base = (LinphoneCallParams*)caller_params; + callee_test_params.base = (LinphoneCallParams*)caller_params; + return call_with_params2(caller_mgr,callee_mgr,&caller_test_params,&callee_test_params,FALSE); +} + +bool_t call_with_test_params(LinphoneCoreManager* caller_mgr + ,LinphoneCoreManager* callee_mgr + ,const LinphoneCallTestParams *caller_test_params + ,const LinphoneCallTestParams *callee_test_params){ + return call_with_params2(caller_mgr,callee_mgr,caller_test_params,callee_test_params,FALSE); } bool_t call_with_caller_params(LinphoneCoreManager* caller_mgr,LinphoneCoreManager* callee_mgr, const LinphoneCallParams *params) { @@ -285,13 +324,31 @@ static void simple_call(void) { int leaked_objects; LinphoneCoreManager* marie; LinphoneCoreManager* pauline; + const LinphoneAddress *from; + LinphoneCall *pauline_call; belle_sip_object_enable_leak_detector(TRUE); begin=belle_sip_object_get_object_count(); marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new( "pauline_rc"); - CU_ASSERT_TRUE(call(pauline,marie)); + CU_ASSERT_TRUE(call(marie,pauline)); + pauline_call=linphone_core_get_current_call(pauline->lc); + CU_ASSERT_PTR_NOT_NULL(pauline_call); + /*check that display name is correctly propagated in From */ + if (pauline_call){ + from=linphone_call_get_remote_address(linphone_core_get_current_call(pauline->lc)); + CU_ASSERT_PTR_NOT_NULL(from); + if (from){ + const char *dname=linphone_address_get_display_name(from); + CU_ASSERT_PTR_NOT_NULL(dname); + if (dname){ + CU_ASSERT_STRING_EQUAL(dname, "Super Marie"); + } + } + } + + liblinphone_tester_check_rtcp(marie,pauline); end_call(marie,pauline); linphone_core_manager_destroy(marie); @@ -304,6 +361,49 @@ static void simple_call(void) { } } +static void direct_call_over_ipv6(){ + LinphoneCoreManager* marie; + LinphoneCoreManager* pauline; + + if (liblinphone_tester_ipv6_available()){ + LCSipTransports pauline_transports; + LinphoneAddress* pauline_dest = linphone_address_new("sip:[::1];transport=tcp"); + char hellopath[256]; + marie = linphone_core_manager_new( "marie_rc"); + pauline = linphone_core_manager_new( "pauline_tcp_rc"); + + /*use playfile for callee to avoid locking on capture card*/ + snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix); + linphone_core_set_play_file(pauline->lc,hellopath); + linphone_core_use_files (pauline->lc,TRUE); + + linphone_core_enable_ipv6(marie->lc,TRUE); + linphone_core_enable_ipv6(pauline->lc,TRUE); + linphone_core_set_default_proxy_config(marie->lc,NULL); + /*wait for register in v6 mode, however sip2.linphone.org has an ipv6 address but doesn't listen to it*/ +#if 0 + CU_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &pauline->stat.number_of_LinphoneRegistrationOk, 2, 2000)); + CU_ASSERT_TRUE(wait_for_until(pauline->lc, NULL, &marie->stat.number_of_LinphoneRegistrationOk, 2, 2000)); +#endif + + linphone_core_get_sip_transports_used(pauline->lc,&pauline_transports); + linphone_address_set_port(pauline_dest,pauline_transports.tcp_port); + linphone_core_invite_address(marie->lc,pauline_dest); + + CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallOutgoingRinging,1)); + CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallIncomingReceived,1)); + linphone_core_accept_call(pauline->lc,linphone_core_get_current_call(pauline->lc)); + CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,1)); + CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,1)); + + liblinphone_tester_check_rtcp(marie,pauline); + end_call(marie,pauline); + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + linphone_address_destroy(pauline_dest); + }else ms_warning("Test skipped, no ipv6 available"); +} + static void call_outbound_with_multiple_proxy() { LinphoneCoreManager* pauline = linphone_core_manager_new2( "pauline_rc", FALSE); LinphoneCoreManager* marie = linphone_core_manager_new2( "marie_rc", FALSE); @@ -538,7 +638,7 @@ static void simple_call_compatibility_mode(void) { CU_ASSERT_TRUE (wait_for(lc_marie,lc_marie,&stat_marie->number_of_LinphoneRegistrationOk,1)); - linphone_core_invite(lc_marie,"pauline"); + linphone_core_invite_address(lc_marie,pauline->identity); CU_ASSERT_TRUE (wait_for(lc_pauline,lc_marie,&stat_pauline->number_of_LinphoneCallIncomingReceived,1)); CU_ASSERT_TRUE(linphone_core_inc_invite_pending(lc_pauline)); @@ -571,7 +671,7 @@ static void cancelled_call(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneCall* out_call = linphone_core_invite(pauline->lc,"marie"); + LinphoneCall* out_call = linphone_core_invite_address(pauline->lc,marie->identity); linphone_call_ref(out_call); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); @@ -615,24 +715,37 @@ static void disable_all_video_codecs_except_one(LinphoneCore *lc, const char *mi #endif static void call_failed_because_of_codecs(void) { - LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); - LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneCall* out_call; + int begin,leaked_objects; - disable_all_audio_codecs_except_one(marie->lc,"pcmu",-1); - disable_all_audio_codecs_except_one(pauline->lc,"pcma",-1); - out_call = linphone_core_invite(pauline->lc,"marie"); - linphone_call_ref(out_call); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); + belle_sip_object_enable_leak_detector(TRUE); + begin=belle_sip_object_get_object_count(); - /*flexisip will retain the 488 until the "urgent reply" timeout (I.E 5s) arrives.*/ - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallError,1,7000)); - CU_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonNotAcceptable); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallIncomingReceived,0); + { + LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + LinphoneCall* out_call; - linphone_call_unref(out_call); - linphone_core_manager_destroy(marie); - linphone_core_manager_destroy(pauline); + disable_all_audio_codecs_except_one(marie->lc,"pcmu",-1); + disable_all_audio_codecs_except_one(pauline->lc,"pcma",-1); + out_call = linphone_core_invite_address(pauline->lc,marie->identity); + linphone_call_ref(out_call); + CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallOutgoingInit,1)); + + /*flexisip will retain the 488 until the "urgent reply" timeout (I.E 5s) arrives.*/ + CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallError,1,7000)); + CU_ASSERT_EQUAL(linphone_call_get_reason(out_call),LinphoneReasonNotAcceptable); + CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallIncomingReceived,0); + CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallReleased,0); + + linphone_call_unref(out_call); + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); + } + leaked_objects=belle_sip_object_get_object_count()-begin; + CU_ASSERT_TRUE(leaked_objects==0); + if (leaked_objects>0){ + belle_sip_object_dump_active_objects(); + } } static void call_with_dns_time_out(void) { @@ -685,7 +798,7 @@ static void cancelled_ringing_call(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneCall* out_call = linphone_core_invite(pauline->lc,"marie"); + LinphoneCall* out_call = linphone_core_invite_address(pauline->lc,marie->identity); linphone_call_ref(out_call); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallIncomingReceived,1)); @@ -707,7 +820,7 @@ static void early_declined_call(void) { LinphoneCall* out_call; linphone_core_set_max_calls(marie->lc,0); - out_call = linphone_core_invite(pauline->lc,"marie"); + out_call = linphone_core_invite_address(pauline->lc,marie->identity); linphone_call_ref(out_call); /*wait until flexisip transfers the busy...*/ @@ -827,7 +940,7 @@ static bool_t check_ice(LinphoneCoreManager* caller, LinphoneCoreManager* callee linphone_core_iterate(callee->lc); } ms_usleep(20000); - }while(!liblinphone_tester_clock_elapsed(&ts,5000)); + }while(!liblinphone_tester_clock_elapsed(&ts,10000)); } /*make sure encryption mode are preserved*/ @@ -864,7 +977,6 @@ static void _call_with_ice_base(LinphoneCoreManager* pauline,LinphoneCoreManager CU_ASSERT_TRUE(call(pauline,marie)); if (callee_with_ice && caller_with_ice) { - check_ice(pauline,marie,LinphoneIceStateHostConnection); /*wait for the ICE reINVITE to complete*/ CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); @@ -1034,51 +1146,57 @@ static void call_paused_resumed(void) { linphone_core_manager_destroy(pauline); } +#define CHECK_CURRENT_LOSS_RATE() \ + rtcp_count_current = pauline->stat.number_of_rtcp_sent; \ + /*wait for an RTCP packet to have an accurate cumulative lost value*/ \ + CU_ASSERT_TRUE(wait_for_until(pauline->lc, marie->lc, &pauline->stat.number_of_rtcp_sent, rtcp_count_current+1, 10000)); \ + stats = rtp_session_get_stats(call_pauline->audiostream->ms.sessions.rtp_session); \ + loss_percentage = stats->cum_packet_loss * 100.f / (stats->packet_recv + stats->cum_packet_loss); \ + CU_ASSERT_TRUE(.75 * params.loss_rate < loss_percentage); \ + CU_ASSERT_TRUE(loss_percentage < 1.25 * params.loss_rate) + static void call_paused_resumed_with_loss(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); LinphoneCall* call_pauline; const rtp_stats_t * stats; - + float loss_percentage; + int rtcp_count_current; OrtpNetworkSimulatorParams params={0}; params.enabled=TRUE; - params.loss_rate=25; - + params.loss_rate=20; CU_ASSERT_TRUE(call(pauline,marie)); call_pauline = linphone_core_get_current_call(pauline->lc); rtp_session_enable_network_simulation(call_pauline->audiostream->ms.sessions.rtp_session,¶ms); - rtp_session_enable_network_simulation(call_pauline->videostream->ms.sessions.rtp_session,¶ms); - wait_for_until(pauline->lc, marie->lc, NULL, 5, 4000); + /*generate some traffic*/ + wait_for_until(pauline->lc, marie->lc, NULL, 5, 6000); + CHECK_CURRENT_LOSS_RATE(); + /*pause call*/ linphone_core_pause_call(pauline->lc,call_pauline); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPausing,1)); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallPausedByRemote,1)); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallPaused,1)); - /*stay in pause a little while in order to generate traffic*/ - wait_for_until(pauline->lc, marie->lc, NULL, 5, 2000); + wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); + CHECK_CURRENT_LOSS_RATE(); + /*resume*/ linphone_core_resume_call(pauline->lc,call_pauline); - CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallStreamsRunning,2)); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallStreamsRunning,2)); - /*same here: wait a while for a bit of a traffic, we need to receive a RTCP packet*/ - wait_for_until(pauline->lc, marie->lc, NULL, 5, 5000); + wait_for_until(pauline->lc, marie->lc, NULL, 5, 6000); /*since stats are NOT totally reset during pause, the stats->packet_recv is computed from the start of call. This test ensures that the loss rate is consistent during the entire call.*/ - stats = rtp_session_get_stats(call_pauline->sessions->rtp_session); - CU_ASSERT_TRUE(((stats->cum_packet_loss * 100.f / stats->packet_recv) / params.loss_rate) > .5f); - - /*just to sleep*/ - linphone_core_terminate_all_calls(pauline->lc); + CHECK_CURRENT_LOSS_RATE(); + linphone_core_terminate_all_calls(marie->lc); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); - linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -1132,12 +1250,10 @@ static void call_paused_resumed_from_callee(void) { } #ifdef VIDEO_ENABLED -static bool_t add_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee) { +static LinphoneCall* setup_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee) { LinphoneVideoPolicy caller_policy; LinphoneCallParams* callee_params; LinphoneCall* call_obj; - stats initial_caller_stat=caller->stat; - stats initial_callee_stat=callee->stat; if (!linphone_core_get_current_call(callee->lc) || linphone_call_get_state(linphone_core_get_current_call(callee->lc)) != LinphoneCallStreamsRunning || !linphone_core_get_current_call(caller->lc) || linphone_call_get_state(linphone_core_get_current_call(caller->lc)) != LinphoneCallStreamsRunning ) { @@ -1153,14 +1269,20 @@ static bool_t add_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee) linphone_core_enable_video_display(caller->lc, FALSE); linphone_core_set_video_policy(caller->lc,&caller_policy); - - if ((call_obj = linphone_core_get_current_call(callee->lc))) { callee_params = linphone_call_params_copy(linphone_call_get_current_params(call_obj)); /*add video*/ linphone_call_params_enable_video(callee_params,TRUE); linphone_core_update_call(callee->lc,call_obj,callee_params); + } + return call_obj; +} +static bool_t add_video(LinphoneCoreManager* caller,LinphoneCoreManager* callee) { + stats initial_caller_stat=caller->stat; + stats initial_callee_stat=callee->stat; + LinphoneCall *call_obj; + if ((call_obj=setup_video(caller, callee))){ CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote+1)); CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); @@ -1315,11 +1437,10 @@ static void srtp_call_with_several_video_switches(void) { static void call_with_declined_video_base(bool_t using_policy) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneCallParams* callee_params=NULL; - LinphoneCallParams* caller_params; LinphoneCall* marie_call; LinphoneCall* pauline_call; LinphoneVideoPolicy marie_policy, pauline_policy; + LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0}; linphone_core_enable_video_capture(marie->lc, TRUE); linphone_core_enable_video_display(marie->lc, TRUE); linphone_core_enable_video_capture(pauline->lc, TRUE); @@ -1335,19 +1456,19 @@ static void call_with_declined_video_base(bool_t using_policy) { linphone_core_set_video_policy(pauline->lc,&pauline_policy); } - caller_params=linphone_core_create_default_call_parameters(pauline->lc); + caller_test_params.base=linphone_core_create_default_call_parameters(pauline->lc); if (!using_policy) - linphone_call_params_enable_video(caller_params,TRUE); - + linphone_call_params_enable_video(caller_test_params.base,TRUE); + if (!using_policy){ - callee_params=linphone_core_create_default_call_parameters(marie->lc); - linphone_call_params_enable_video(callee_params,FALSE); + callee_test_params.base=linphone_core_create_default_call_parameters(marie->lc); + linphone_call_params_enable_video(callee_test_params.base,FALSE); } - CU_ASSERT_TRUE(call_with_params2(pauline,marie,caller_params,callee_params,using_policy)); - - linphone_call_params_destroy(caller_params); - if (callee_params) linphone_call_params_destroy(callee_params); + CU_ASSERT_TRUE(call_with_params2(pauline,marie,&caller_test_params,&callee_test_params,using_policy)); + + linphone_call_params_destroy(caller_test_params.base); + if (callee_test_params.base) linphone_call_params_destroy(callee_test_params.base); marie_call=linphone_core_get_current_call(marie->lc); pauline_call=linphone_core_get_current_call(pauline->lc); @@ -1370,8 +1491,7 @@ static void call_with_declined_video_using_policy(void) { } static void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* marie, bool_t using_policy) { - LinphoneCallParams* callee_params=NULL; - LinphoneCallParams* caller_params; + LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0}; LinphoneCall* marie_call; LinphoneCall* pauline_call; LinphoneVideoPolicy marie_policy, pauline_policy; @@ -1390,21 +1510,21 @@ static void video_call_base(LinphoneCoreManager* pauline,LinphoneCoreManager* ma linphone_core_set_video_policy(pauline->lc,&pauline_policy); } - caller_params=linphone_core_create_default_call_parameters(pauline->lc); + caller_test_params.base=linphone_core_create_default_call_parameters(pauline->lc); if (!using_policy) - linphone_call_params_enable_video(caller_params,TRUE); - + linphone_call_params_enable_video(caller_test_params.base,TRUE); + if (!using_policy){ - callee_params=linphone_core_create_default_call_parameters(marie->lc); - linphone_call_params_enable_video(callee_params,TRUE); + callee_test_params.base=linphone_core_create_default_call_parameters(marie->lc); + linphone_call_params_enable_video(callee_test_params.base,TRUE); } - CU_ASSERT_TRUE(call_with_params2(pauline,marie,caller_params,callee_params,using_policy)); + CU_ASSERT_TRUE(call_with_params2(pauline,marie,&caller_test_params,&callee_test_params,using_policy)); marie_call=linphone_core_get_current_call(marie->lc); pauline_call=linphone_core_get_current_call(pauline->lc); - linphone_call_params_destroy(caller_params); - if (callee_params) linphone_call_params_destroy(callee_params); + linphone_call_params_destroy(caller_test_params.base); + if (callee_test_params.base) linphone_call_params_destroy(callee_test_params.base); if (marie_call && pauline_call ) { CU_ASSERT_TRUE(linphone_call_log_video_enabled(linphone_call_get_call_log(marie_call))); @@ -1507,7 +1627,7 @@ static void video_call_with_ice_no_matching_audio_codecs(void) { linphone_core_set_firewall_policy(pauline->lc, LinphonePolicyUseIce); linphone_core_set_stun_server(pauline->lc, "stun.linphone.org"); - out_call = linphone_core_invite(marie->lc, "pauline"); + out_call = linphone_core_invite_address(marie->lc, pauline->identity); linphone_call_ref(out_call); CU_ASSERT_TRUE(wait_for(marie->lc, pauline->lc, &marie->stat.number_of_LinphoneCallOutgoingInit, 1)); @@ -1803,7 +1923,7 @@ static void simple_conference_base(LinphoneCoreManager* marie, LinphoneCoreManag CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallStreamsRunning,initial_marie_stat.number_of_LinphoneCallStreamsRunning+2,3000)); CU_ASSERT_TRUE(linphone_core_is_in_conference(marie->lc)); - CU_ASSERT_EQUAL(linphone_core_get_conference_size(marie->lc),3) + CU_ASSERT_EQUAL(linphone_core_get_conference_size(marie->lc),3); /* * FIXME: check_ice cannot work as it is today because there is no current call for the party that hosts the conference @@ -1897,19 +2017,22 @@ static void call_with_file_player(void) { char hellopath[256]; char *recordpath = create_filepath(liblinphone_tester_writable_dir_prefix, "record", "wav"); double similar; - + const double threshold = 0.9; + /*make sure the record file doesn't already exists, otherwise this test will append new samples to it*/ unlink(recordpath); - + snprintf(hellopath,sizeof(hellopath), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix); - - /*caller uses soundcard*/ - + + /*caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player*/ + linphone_core_use_files(marie->lc,TRUE); + linphone_core_set_play_file(marie->lc,NULL); + /*callee is recording and plays file*/ linphone_core_use_files(pauline->lc,TRUE); - linphone_core_set_play_file(pauline->lc,hellopath); + linphone_core_set_play_file(pauline->lc,NULL); linphone_core_set_record_file(pauline->lc,recordpath); - + CU_ASSERT_TRUE(call(marie,pauline)); player=linphone_call_get_player(linphone_core_get_current_call(marie->lc)); @@ -1919,14 +2042,17 @@ static void call_with_file_player(void) { CU_ASSERT_TRUE(linphone_player_start(player)==0); } CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,12000)); - + /*just to sleep*/ linphone_core_terminate_all_calls(marie->lc); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); CU_ASSERT_TRUE(ms_audio_diff(hellopath,recordpath,&similar,NULL,NULL)==0); - CU_ASSERT_TRUE(similar>0.9); + CU_ASSERT_TRUE(similar>threshold); CU_ASSERT_TRUE(similar<=1.0); + if(similar > threshold && similar <=1.0) { + remove(recordpath); + } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); ms_free(recordpath); @@ -1948,7 +2074,8 @@ static void call_with_mkv_file_player(void) { char hellowav[256]; char *recordpath; double similar; - + const double threshold = 0.9; + if (!is_format_supported(marie->lc,"mkv")){ ms_warning("Test skipped, no mkv support."); goto end; @@ -1956,40 +2083,50 @@ static void call_with_mkv_file_player(void) { recordpath = create_filepath(liblinphone_tester_writable_dir_prefix, "record", "wav"); /*make sure the record file doesn't already exists, otherwise this test will append new samples to it*/ unlink(recordpath); - + snprintf(hellowav,sizeof(hellowav), "%s/sounds/hello8000.wav", liblinphone_tester_file_prefix); snprintf(hellomkv,sizeof(hellomkv), "%s/sounds/hello8000.mkv", liblinphone_tester_file_prefix); - - /*caller uses soundcard*/ - + + /*caller uses files instead of soundcard in order to avoid mixing soundcard input with file played using call's player*/ + linphone_core_use_files(marie->lc,TRUE); + linphone_core_set_play_file(marie->lc,NULL); /*callee is recording and plays file*/ linphone_core_use_files(pauline->lc,TRUE); linphone_core_set_play_file(pauline->lc,hellowav); /*just to send something but we are not testing what is sent by pauline*/ linphone_core_set_record_file(pauline->lc,recordpath); - + CU_ASSERT_TRUE(call(marie,pauline)); player=linphone_call_get_player(linphone_core_get_current_call(marie->lc)); CU_ASSERT_PTR_NOT_NULL(player); if (player){ - CU_ASSERT_TRUE(linphone_player_open(player,hellomkv,on_eof,marie)==0); + int res = linphone_player_open(player,hellomkv,on_eof,marie); + if(!ms_filter_codec_supported("opus")) { + CU_ASSERT_EQUAL(res, -1); + goto end; + } + CU_ASSERT_EQUAL(res, 0); CU_ASSERT_TRUE(linphone_player_start(player)==0); + CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,12000)); + linphone_player_close(player); } - CU_ASSERT_TRUE(wait_for_until(pauline->lc,marie->lc,&marie->stat.number_of_player_eof,1,12000)); - + /*just to sleep*/ linphone_core_terminate_all_calls(marie->lc); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); CU_ASSERT_TRUE(ms_audio_diff(hellowav,recordpath,&similar,NULL,NULL)==0); - CU_ASSERT_TRUE(similar>0.9); + CU_ASSERT_TRUE(similar>threshold); CU_ASSERT_TRUE(similar<=1.0); + if(similar>threshold && similar<=1.0) { + remove(recordpath); + } ms_free(recordpath); - + end: linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); - + } @@ -2121,6 +2258,10 @@ static void early_media_call_with_ringing(void){ LinphoneCoreManager* pauline = linphone_core_manager_new("pauline_rc"); MSList* lcs = NULL; LinphoneCall* marie_call; + LinphoneCallLog *marie_call_log; + time_t connected_time=0; + time_t ended_time=0; + int dummy=0; lcs = ms_list_append(lcs,marie->lc); lcs = ms_list_append(lcs,pauline->lc); @@ -2134,6 +2275,7 @@ static void early_media_call_with_ringing(void){ linphone_core_set_play_file(pauline->lc,hellopath); marie_call = linphone_core_invite_address(marie->lc, pauline->identity); + marie_call_log = linphone_call_get_call_log(marie_call); CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingReceived,1,3000)); CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingRinging,1,1000)); @@ -2151,20 +2293,25 @@ static void early_media_call_with_ringing(void){ linphone_core_accept_call(pauline->lc, linphone_core_get_current_call(pauline->lc)); + CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); + connected_time=time(NULL); CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); CU_ASSERT_EQUAL(marie_call, linphone_core_get_current_call(marie->lc)); liblinphone_tester_check_rtcp(marie, pauline); + /*just to have a call duration !=0*/ + wait_for_list(lcs,&dummy,1,2000); linphone_core_terminate_all_calls(pauline->lc); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneCallEnd,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneCallEnd,1,1000)); - - + ended_time=time(NULL); + CU_ASSERT_TRUE (labs (linphone_call_log_get_duration(marie_call_log) - (ended_time - connected_time)) <1 ); ms_list_free(lcs); } + linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -2182,7 +2329,6 @@ static void early_media_call_with_update_base(bool_t media_change){ if (media_change) { disable_all_audio_codecs_except_one(marie->lc,"pcmu",-1); disable_all_audio_codecs_except_one(pauline->lc,"pcmu",-1); - } /* Marie calls Pauline, and after the call has rung, transitions to an early_media session @@ -2213,26 +2359,23 @@ static void early_media_call_with_update_base(bool_t media_change){ linphone_call_params_set_session_name(pauline_params,UPDATED_SESSION_NAME); linphone_core_update_call(pauline->lc, pauline_call, pauline_params); + CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallEarlyUpdating,1,2000)); + CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallEarlyUpdatedByRemote,1,2000)); + CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1,2000)); + CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1,2000)); /*just to wait 2s*/ liblinphone_tester_check_rtcp(marie, pauline); - wait_for_list(lcs, &marie->stat.number_of_LinphoneCallUpdatedByRemote,100000,2000); CU_ASSERT_STRING_EQUAL( linphone_call_params_get_session_name(linphone_call_get_remote_params(marie_call)) , UPDATED_SESSION_NAME); linphone_core_accept_call(pauline->lc, linphone_core_get_current_call(pauline->lc)); + CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallConnected, 1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs, &marie->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); - - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallOutgoingEarlyMedia,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallStreamsRunning,1); - CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneCallConnected,1); - - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallIncomingEarlyMedia,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallStreamsRunning,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallConnected,1); - CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneCallUpdating,1); + CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallConnected, 1,1000)); + CU_ASSERT_TRUE(wait_for_list(lcs, &pauline->stat.number_of_LinphoneCallStreamsRunning, 1,1000)); liblinphone_tester_check_rtcp(marie, pauline); @@ -2675,7 +2818,7 @@ static void call_established_with_rejected_reinvite_with_error(void) { static void call_rejected_because_wrong_credentials_with_params(const char* user_agent,bool_t enable_auth_req_cb) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); - LinphoneAuthInfo* good_auth_info=linphone_auth_info_clone((LinphoneAuthInfo*)(linphone_core_get_auth_info_list(marie->lc)->data)); + LinphoneAuthInfo* good_auth_info=linphone_auth_info_clone(linphone_core_find_auth_info(marie->lc,NULL,linphone_address_get_username(marie->identity),NULL)); LinphoneAuthInfo* wrong_auth_info=linphone_auth_info_clone(good_auth_info); bool_t result=FALSE; linphone_auth_info_set_passwd(wrong_auth_info,"passecretdutout"); @@ -2708,7 +2851,7 @@ static void call_rejected_because_wrong_credentials_with_params(const char* user /*to make sure unregister will work*/ linphone_core_clear_all_auth_info(marie->lc); linphone_core_add_auth_info(marie->lc,good_auth_info); - + linphone_auth_info_destroy(good_auth_info); linphone_core_manager_destroy(marie); } @@ -2977,6 +3120,7 @@ static void record_call(const char *filename, bool_t enableVideo) { end_call(marie, pauline); CU_ASSERT_EQUAL(access(filepath, F_OK), 0); } + remove(filepath); ms_free(filepath); } linphone_core_manager_destroy(marie); @@ -3121,7 +3265,7 @@ static void call_with_custom_supported_tags(void) { marie = linphone_core_manager_new( "marie_rc"); pauline = linphone_core_manager_new( "pauline_rc"); - + linphone_core_add_supported_tag(marie->lc,"pouet-tag"); CU_ASSERT_TRUE(call(pauline,marie)); liblinphone_tester_check_rtcp(marie,pauline); @@ -3142,6 +3286,163 @@ static void call_with_custom_supported_tags(void) { } } +static void call_log_from_taken_from_p_asserted_id(void) { + LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); + LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); + LinphoneCall *c1,*c2; + LinphoneCallParams *params; + const char* paulie_asserted_id ="\"Paupauche\" "; + LinphoneAddress *paulie_asserted_id_addr = linphone_address_new(paulie_asserted_id); + LpConfig *marie_lp; + + params=linphone_core_create_default_call_parameters(pauline->lc); + + linphone_call_params_add_custom_header(params,"P-Asserted-Identity",paulie_asserted_id); + /*fixme, should be able to add several time the same header linphone_call_params_add_custom_header(params,"P-Asserted-Identity","\"Paupauche\" ");*/ + + marie_lp = linphone_core_get_config(marie->lc); + lp_config_set_int(marie_lp,"sip","call_logs_use_asserted_id_instead_of_from",1); + + + CU_ASSERT_TRUE(call_with_caller_params(pauline,marie,params)); + linphone_call_params_destroy(params); + + c1=linphone_core_get_current_call(pauline->lc); + c2=linphone_core_get_current_call(marie->lc); + + CU_ASSERT_PTR_NOT_NULL(c1); + CU_ASSERT_PTR_NOT_NULL(c2); + + /*make sure remote identity is hidden*/ + CU_ASSERT_TRUE(linphone_address_weak_equal(linphone_call_get_remote_address(c2),paulie_asserted_id_addr)); + + + /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); + CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + +static void incoming_invite_without_sdp() { + LinphoneCoreManager* caller = linphone_core_manager_new( "pauline_rc"); + LinphoneCoreManager* callee = linphone_core_manager_new( "marie_rc"); + LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0}; + + callee_test_params.sdp_removal = TRUE; + CU_ASSERT_FALSE(call_with_params2(caller,callee,&caller_test_params, &callee_test_params, FALSE)); + + CU_ASSERT_PTR_NULL(linphone_core_get_current_call(callee->lc)); + CU_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallError,1); + /*call will be drop before presented to the application, because it is invalid*/ + CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallIncomingReceived,0); + + linphone_core_manager_destroy(callee); + linphone_core_manager_destroy(caller); +} + +static void outgoing_invite_without_sdp() { + LinphoneCoreManager* caller = linphone_core_manager_new( "pauline_rc"); + LinphoneCoreManager* callee = linphone_core_manager_new( "marie_rc"); + LinphoneCallTestParams caller_test_params = {0}, callee_test_params = {0}; + + caller_test_params.sdp_removal = TRUE; + CU_ASSERT_FALSE(call_with_params2(caller,callee,&caller_test_params, &callee_test_params, FALSE)); + + CU_ASSERT_PTR_NULL(linphone_core_get_current_call(callee->lc)); + CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallIncomingReceived,1); + CU_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallError,1); + // actually callee does not receive error, because it just get a BYE from the other part + CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,0); + CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallEnd,1); + + linphone_core_manager_destroy(callee); + linphone_core_manager_destroy(caller); +} + +static void incoming_reinvite_without_ack_sdp() { +#ifdef VIDEO_ENABLED + LinphoneCoreManager* caller = linphone_core_manager_new( "pauline_rc"); + LinphoneCoreManager* callee = linphone_core_manager_new( "marie_rc"); + LinphoneCall * inc_call; + CU_ASSERT_TRUE(call(caller,callee)); + inc_call = linphone_core_get_current_call(callee->lc); + + CU_ASSERT_PTR_NOT_NULL(inc_call); + if (inc_call) { + const LinphoneCallParams *caller_params; + stats initial_caller_stat=caller->stat; + stats initial_callee_stat=callee->stat; + sal_call_enable_sdp_removal(inc_call->op, TRUE); + CU_ASSERT_PTR_NOT_NULL(setup_video(caller, callee)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallStreamsRunning,initial_caller_stat.number_of_LinphoneCallStreamsRunning)); + /*Basically the negotiation failed but since the call was already running, we expect it to restore to + the previous state so error stats should not be changed*/ + CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,initial_callee_stat.number_of_LinphoneCallError); + /*and remote should have received an update notification*/ + CU_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote+1); + + + CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); + caller_params = linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,(int*)&caller_params->has_video,FALSE)); + + sal_call_enable_sdp_removal(inc_call->op, FALSE); + } + linphone_core_terminate_all_calls(caller->lc); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallEnd,1)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallEnd,1)); + + linphone_core_manager_destroy(callee); + linphone_core_manager_destroy(caller); +#else + ms_warning("not tested because video not available"); +#endif +} + +static void outgoing_reinvite_without_ack_sdp() { +#ifdef VIDEO_ENABLED + LinphoneCoreManager* caller = linphone_core_manager_new( "pauline_rc"); + LinphoneCoreManager* callee = linphone_core_manager_new( "marie_rc"); + LinphoneCall * out_call; + CU_ASSERT_TRUE(call(caller,callee)); + out_call = linphone_core_get_current_call(caller->lc); + + CU_ASSERT_PTR_NOT_NULL(out_call); + if (out_call) { + stats initial_caller_stat=caller->stat; + stats initial_callee_stat=callee->stat; + sal_call_enable_sdp_removal(out_call->op, TRUE); + CU_ASSERT_PTR_NOT_NULL(setup_video(caller, callee)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallUpdating,initial_callee_stat.number_of_LinphoneCallUpdating+1)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallStreamsRunning,initial_callee_stat.number_of_LinphoneCallStreamsRunning+1)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallStreamsRunning,initial_caller_stat.number_of_LinphoneCallStreamsRunning)); + /*Basically the negotiation failed but since the call was already running, we expect it to restore to + the previous state so error stats should not be changed*/ + CU_ASSERT_EQUAL(callee->stat.number_of_LinphoneCallError,initial_callee_stat.number_of_LinphoneCallError); + /*and remote should not have received any update notification*/ + CU_ASSERT_EQUAL(caller->stat.number_of_LinphoneCallUpdatedByRemote,initial_caller_stat.number_of_LinphoneCallUpdatedByRemote); + + CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(callee->lc)))); + CU_ASSERT_FALSE(linphone_call_params_video_enabled(linphone_call_get_current_params(linphone_core_get_current_call(caller->lc)))); + + sal_call_enable_sdp_removal(out_call->op, FALSE); + } + linphone_core_terminate_all_calls(caller->lc); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&caller->stat.number_of_LinphoneCallEnd,1)); + CU_ASSERT_TRUE(wait_for(caller->lc,callee->lc,&callee->stat.number_of_LinphoneCallEnd,1)); + + linphone_core_manager_destroy(callee); + linphone_core_manager_destroy(caller); +#else + ms_warning("not tested because video not available"); +#endif +} + test_t call_tests[] = { { "Early declined call", early_declined_call }, { "Call declined", call_declined }, @@ -3151,6 +3452,7 @@ test_t call_tests[] = { { "Cancelled ringing call", cancelled_ringing_call }, { "Call failed because of codecs", call_failed_because_of_codecs }, { "Simple call", simple_call }, + { "Direct call over IPv6", direct_call_over_ipv6}, { "Outbound call with multiple proxy possible", call_outbound_with_multiple_proxy }, { "Audio call recording", audio_call_recording_test }, #if 0 /* not yet activated because not implemented */ @@ -3241,7 +3543,12 @@ test_t call_tests[] = { { "Call with in-dialog UPDATE request", call_with_in_dialog_update }, { "Call with in-dialog codec change", call_with_in_dialog_codec_change }, { "Call with in-dialog codec change no sdp", call_with_in_dialog_codec_change_no_sdp }, - { "Call with custom supported tags", call_with_custom_supported_tags } + { "Call with custom supported tags", call_with_custom_supported_tags }, + { "Call log from taken from asserted id",call_log_from_taken_from_p_asserted_id}, + { "Incoming INVITE without SDP",incoming_invite_without_sdp}, + { "Outgoing INVITE without ACK SDP",outgoing_invite_without_sdp}, + { "Incoming REINVITE without SDP",incoming_reinvite_without_ack_sdp}, + { "Outgoing REINVITE without ACK SDP",outgoing_reinvite_without_ack_sdp}, }; test_suite_t call_test_suite = { diff --git a/tester/dtmf_tester.c b/tester/dtmf_tester.c new file mode 100644 index 000000000..1c80c21c6 --- /dev/null +++ b/tester/dtmf_tester.c @@ -0,0 +1,152 @@ +/* + liblinphone_tester - liblinphone test suite + Copyright (C) 2013 Belledonne Communications SARL + + 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 2 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, see . +*/ + +#include "liblinphone_tester.h" +#include "private.h" + +LinphoneCoreManager* marie; +LinphoneCoreManager* pauline; +LinphoneCall *marie_call; + +void dtmf_received(LinphoneCore *lc, LinphoneCall *call, int dtmf) { + stats* counters = get_stats(lc); + char** dst = &counters->dtmf_list_received; + *dst = *dst ? + ms_strcat_printf(*dst, "%c", dtmf) + : ms_strdup_printf("%c", dtmf); + counters->dtmf_count++; +} + +void send_dtmf_base(bool_t use_rfc2833, bool_t use_sipinfo, char dtmf, char* dtmf_seq) { + char* expected = NULL; + int dtmf_count_prev; + marie = linphone_core_manager_new( "marie_rc"); + pauline = linphone_core_manager_new( "pauline_rc"); + + linphone_core_set_use_rfc2833_for_dtmf(marie->lc, use_rfc2833); + linphone_core_set_use_info_for_dtmf(marie->lc, use_sipinfo); + linphone_core_set_use_rfc2833_for_dtmf(pauline->lc, use_rfc2833); + linphone_core_set_use_info_for_dtmf(pauline->lc, use_sipinfo); + + CU_ASSERT_TRUE(call(pauline,marie)); + + marie_call = linphone_core_get_current_call(marie->lc); + + if (dtmf != '\0') { + dtmf_count_prev = pauline->stat.dtmf_count; + linphone_call_send_dtmf(marie_call, dtmf); + + /*wait for the DTMF to be received from pauline*/ + CU_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &pauline->stat.dtmf_count, dtmf_count_prev+1, 10000)); + expected = ms_strdup_printf("%c", dtmf); + } + + if (dtmf_seq != NULL) { + int dtmf_delay_ms = lp_config_get_int(marie_call->core->config,"net","dtmf_delay_ms",200); + dtmf_count_prev = pauline->stat.dtmf_count; + linphone_call_send_dtmfs(marie_call, dtmf_seq); + + /*wait for the DTMF sequence to be received from pauline*/ + CU_ASSERT_TRUE(wait_for_until(marie->lc, pauline->lc, &pauline->stat.dtmf_count, dtmf_count_prev + strlen(dtmf_seq), 10000 + dtmf_delay_ms * strlen(dtmf_seq))); + expected = (dtmf!='\0')?ms_strdup_printf("%c%s",dtmf,dtmf_seq):ms_strdup(dtmf_seq); + } + + if (expected != NULL) { + CU_ASSERT_PTR_NOT_NULL(pauline->stat.dtmf_list_received); + if (pauline->stat.dtmf_list_received) { + CU_ASSERT_STRING_EQUAL(pauline->stat.dtmf_list_received, expected); + } + ms_free(expected); + } else { + CU_ASSERT_PTR_NULL(pauline->stat.dtmf_list_received); + } +} + +void send_dtmf_cleanup() { + CU_ASSERT_PTR_NULL(marie_call->dtmfs_timer); + CU_ASSERT_PTR_NULL(marie_call->dtmf_sequence); + + /*just to sleep*/ + linphone_core_terminate_all_calls(pauline->lc); + CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneCallEnd,1)); + CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneCallEnd,1)); + + linphone_core_manager_destroy(marie); + linphone_core_manager_destroy(pauline); +} + +static void send_dtmf_rfc2833() { + send_dtmf_base(TRUE,FALSE,'1',NULL); + send_dtmf_cleanup(); +} + +static void send_dtmf_sip_info() { + send_dtmf_base(FALSE,TRUE,'#',NULL); + send_dtmf_cleanup(); +} + +static void send_dtmfs_sequence_rfc2833() { + send_dtmf_base(TRUE,FALSE,'\0',"1230#"); + send_dtmf_cleanup(); +} + +static void send_dtmfs_sequence_sip_info() { + send_dtmf_base(FALSE,TRUE,'\0',"1230#"); + send_dtmf_cleanup(); +} + +static void send_dtmfs_sequence_not_ready() { + marie = linphone_core_manager_new( "marie_rc"); + CU_ASSERT_EQUAL(linphone_call_send_dtmfs(linphone_core_get_current_call(marie->lc), "123"), -1); + linphone_core_manager_destroy(marie); +} + +static void send_dtmfs_sequence_call_state_changed() { + send_dtmf_base(FALSE,TRUE,'\0',NULL); + + /*very long DTMF(around 4 sec to be sent)*/ + linphone_call_send_dtmfs(marie_call, "123456789123456789"); + /*just after, change call state, and expect DTMF to be canceled*/ + linphone_core_pause_call(marie_call->core,marie_call); + CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPausing,1)); + CU_ASSERT_TRUE(wait_for(marie->lc,pauline->lc,&marie->stat.number_of_LinphoneCallPaused,1)); + + /*wait a few time to ensure that no DTMF are received*/ + wait_for_until(marie->lc, pauline->lc, NULL, 0, 1000); + + CU_ASSERT_PTR_NULL(pauline->stat.dtmf_list_received); + + send_dtmf_cleanup(); +} + +test_t dtmf_tests[] = { + { "Send DTMF using RFC2833",send_dtmf_rfc2833}, + { "Send DTMF using SIP INFO",send_dtmf_sip_info}, + { "Send DTMF sequence using RFC2833",send_dtmfs_sequence_rfc2833}, + { "Send DTMF sequence using SIP INFO",send_dtmfs_sequence_sip_info}, + { "DTMF sequence not sent if invalid call",send_dtmfs_sequence_not_ready}, + { "DTMF sequence canceled if call state changed",send_dtmfs_sequence_call_state_changed}, +}; + +test_suite_t dtmf_test_suite = { + "DTMF", + NULL, + NULL, + sizeof(dtmf_tests) / sizeof(dtmf_tests[0]), + dtmf_tests +}; diff --git a/tester/eventapi_tester.c b/tester/eventapi_tester.c index 1d4b07e59..abd8c0a30 100644 --- a/tester/eventapi_tester.c +++ b/tester/eventapi_tester.c @@ -40,7 +40,7 @@ const char *liblinphone_tester_get_notify_content(void){ void linphone_notify_received(LinphoneCore *lc, LinphoneEvent *lev, const char *eventname, const LinphoneContent *content){ LinphoneCoreManager *mgr; CU_ASSERT_PTR_NOT_NULL_FATAL(content); - CU_ASSERT_TRUE(strcmp(notify_content,(const char*)content->data)==0); + CU_ASSERT_TRUE(strcmp(notify_content,(const char*)linphone_content_get_buffer(content))==0); mgr=get_manager(lc); mgr->stat.number_of_NotifyReceived++; } @@ -48,13 +48,13 @@ void linphone_notify_received(LinphoneCore *lc, LinphoneEvent *lev, const char * void linphone_subscription_state_change(LinphoneCore *lc, LinphoneEvent *lev, LinphoneSubscriptionState state) { stats* counters = get_stats(lc); LinphoneCoreManager *mgr=get_manager(lc); - LinphoneContent content={0}; + LinphoneContent* content; const LinphoneAddress* from_addr = linphone_event_get_from(lev); char* from = linphone_address_as_string(from_addr); - content.type="application"; - content.subtype="somexml2"; - content.data=(void*)notify_content; - content.size=strlen(notify_content); + content = linphone_core_create_content(lc); + linphone_content_set_type(content,"application"); + linphone_content_set_subtype(content,"somexml2"); + linphone_content_set_buffer(content,notify_content,strlen(notify_content)); ms_message("Subscription state [%s] from [%s]",linphone_subscription_state_to_string(state),from); ms_free(from); @@ -80,7 +80,7 @@ void linphone_subscription_state_change(LinphoneCore *lc, LinphoneEvent *lev, Li counters->number_of_LinphoneSubscriptionActive++; if (linphone_event_get_subscription_dir(lev)==LinphoneSubscriptionIncoming){ mgr->lev=lev; - linphone_event_notify(lev,&content); + linphone_event_notify(lev,content); } break; case LinphoneSubscriptionTerminated: @@ -96,6 +96,7 @@ void linphone_subscription_state_change(LinphoneCore *lc, LinphoneEvent *lev, Li mgr->lev=NULL; break; } + linphone_content_unref(content); } void linphone_publish_state_changed(LinphoneCore *lc, LinphoneEvent *ev, LinphonePublishState state){ @@ -123,23 +124,22 @@ void linphone_publish_state_changed(LinphoneCore *lc, LinphoneEvent *ev, Linphon static void subscribe_test_declined(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneContent content={0}; + LinphoneContent* content; LinphoneEvent *lev; const LinphoneErrorInfo *ei; MSList* lcs=ms_list_append(NULL,marie->lc); lcs=ms_list_append(lcs,pauline->lc); + content = linphone_core_create_content(marie->lc); + linphone_content_set_type(content,"application"); + linphone_content_set_subtype(content,"somexml"); + linphone_content_set_buffer(content,subscribe_content,strlen(subscribe_content)); - content.type="application"; - content.subtype="somexml"; - content.data=(char*)subscribe_content; - content.size=strlen(subscribe_content); - pauline->decline_subscribe=TRUE; - - lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",600,&content); + + lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",600,content); linphone_event_ref(lev); - + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionError,1,21000));/*yes flexisip may wait 20 secs in case of forking*/ @@ -150,7 +150,8 @@ static void subscribe_test_declined(void) { CU_ASSERT_PTR_NOT_NULL(linphone_error_info_get_phrase(ei)); } CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); - + + linphone_content_unref(content); linphone_event_unref(lev); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); @@ -165,23 +166,23 @@ typedef enum RefreshTestType{ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTestType refresh_type) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneContent content={0}; + LinphoneContent* content; LinphoneEvent *lev; int expires= refresh_type!=NoRefresh ? 4 : 600; MSList* lcs=ms_list_append(NULL,marie->lc); - + lcs=ms_list_append(lcs,pauline->lc); if (refresh_type==ManualRefresh){ lp_config_set_int(marie->lc->config,"sip","refresh_generic_subscribe",0); } - content.type="application"; - content.subtype="somexml"; - content.data=(char*)subscribe_content; - content.size=strlen(subscribe_content); - - lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,&content); + content = linphone_core_create_content(marie->lc); + linphone_content_set_type(content,"application"); + linphone_content_set_subtype(content,"somexml"); + linphone_content_set_buffer(content,subscribe_content,strlen(subscribe_content)); + + lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,content); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); @@ -190,7 +191,7 @@ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTes /*make sure marie receives first notification before terminating*/ CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000)); - + if (refresh_type==AutoRefresh){ wait_for_list(lcs,NULL,0,6000); CU_ASSERT_TRUE(linphone_event_get_subscription_state(pauline->lev)==LinphoneSubscriptionActive); @@ -206,10 +207,11 @@ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTes CU_ASSERT_PTR_NOT_NULL_FATAL(pauline->lev); linphone_event_terminate(pauline->lev); } - + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); - + + linphone_content_unref(content); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -217,7 +219,7 @@ static void subscribe_test_with_args(bool_t terminated_by_subscriber, RefreshTes static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTestType refresh_type) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneContent content={0}; + LinphoneContent* content; LinphoneEvent *lev; int expires= refresh_type!=NoRefresh ? 4 : 600; MSList* lcs=ms_list_append(NULL,marie->lc); @@ -228,19 +230,19 @@ static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTe lp_config_set_int(marie->lc->config,"sip","refresh_generic_subscribe",0); } - content.type="application"; - content.subtype="somexml"; - content.data=(char*)subscribe_content; - content.size=strlen(subscribe_content); - + content = linphone_core_create_content(marie->lc); + linphone_content_set_type(content,"application"); + linphone_content_set_subtype(content,"somexml"); + linphone_content_set_buffer(content,subscribe_content,strlen(subscribe_content)); + lev=linphone_core_create_subscribe(marie->lc,pauline->identity,"dodo",expires); linphone_event_add_custom_header(lev,"My-Header","pouet"); linphone_event_add_custom_header(lev,"My-Header2","pimpon"); - linphone_event_send_subscribe(lev,&content); - + linphone_event_send_subscribe(lev,content); + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); - + /*check good receipt of custom headers*/ CU_ASSERT_STRING_EQUAL(linphone_event_get_custom_header(pauline->lev,"My-Header"),"pouet"); CU_ASSERT_STRING_EQUAL(linphone_event_get_custom_header(pauline->lev,"My-Header2"),"pimpon"); @@ -266,10 +268,11 @@ static void subscribe_test_with_args2(bool_t terminated_by_subscriber, RefreshTe CU_ASSERT_PTR_NOT_NULL_FATAL(pauline->lev); linphone_event_terminate(pauline->lev); } - + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionTerminated,1,1000)); - + + linphone_content_unref(content); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -300,30 +303,29 @@ static void subscribe_test_manually_refreshed(void){ static void publish_test_with_args(bool_t refresh, int expires){ LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); - LinphoneContent content={0}; + LinphoneContent* content; LinphoneEvent *lev; MSList* lcs=ms_list_append(NULL,marie->lc); lcs=ms_list_append(lcs,pauline->lc); + content = linphone_core_create_content(marie->lc); + linphone_content_set_type(content,"application"); + linphone_content_set_subtype(content,"somexml"); + linphone_content_set_buffer(content,subscribe_content,strlen(subscribe_content)); - content.type="application"; - content.subtype="somexml"; - content.data=(char*)subscribe_content; - content.size=strlen(subscribe_content); - lp_config_set_int(marie->lc->config,"sip","refresh_generic_publish",refresh); lev=linphone_core_create_publish(marie->lc,pauline->identity,"dodo",expires); linphone_event_add_custom_header(lev,"CustomHeader","someValue"); - linphone_event_send_publish(lev,&content); + linphone_event_send_publish(lev,content); linphone_event_ref(lev); - + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000)); - + if (!refresh){ CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishExpiring,1,5000)); - linphone_event_update_publish(lev,&content); + linphone_event_update_publish(lev,content); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishProgress,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishOk,1,3000)); }else{ @@ -331,11 +333,12 @@ static void publish_test_with_args(bool_t refresh, int expires){ } linphone_event_terminate(lev); - + CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphonePublishCleared,1,3000)); - + linphone_event_unref(lev); - + + linphone_content_unref(content); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } diff --git a/tester/flexisip/flexisip.conf b/tester/flexisip/flexisip.conf index 12f42d945..635ae0bda 100755 --- a/tester/flexisip/flexisip.conf +++ b/tester/flexisip/flexisip.conf @@ -205,6 +205,15 @@ hashed-passwords=false # Default value: false new-auth-on-407=false +# Enable a feature useful for automatic tests, allowing a client +# to create a temporary account in the password database in memory. +# This MUST not be used for production as it is a real security +# hole. +# Default value: false + +enable-test-accounts-creation=true + + ## ## ... ## diff --git a/tester/flexisip_tester.c b/tester/flexisip_tester.c index a91811538..8abd9b903 100644 --- a/tester/flexisip_tester.c +++ b/tester/flexisip_tester.c @@ -27,7 +27,7 @@ static void subscribe_forking(void) { LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_tcp_rc"); LinphoneCoreManager* pauline2 = linphone_core_manager_new( "pauline_tcp_rc"); - LinphoneContent content={0}; + LinphoneContent* content; LinphoneEvent *lev; int expires= 600; MSList* lcs=ms_list_append(NULL,marie->lc); @@ -35,12 +35,12 @@ static void subscribe_forking(void) { lcs=ms_list_append(lcs,pauline->lc); lcs=ms_list_append(lcs,pauline2->lc); - content.type="application"; - content.subtype="somexml"; - content.data=(char*)liblinphone_tester_get_subscribe_content(); - content.size=strlen(liblinphone_tester_get_subscribe_content()); + content = linphone_core_create_content(marie->lc); + linphone_content_set_type(content,"application"); + linphone_content_set_subtype(content,"somexml"); + linphone_content_set_buffer(content, liblinphone_tester_get_subscribe_content(), strlen(liblinphone_tester_get_subscribe_content())); - lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,&content); + lev=linphone_core_subscribe(marie->lc,pauline->identity,"dodo",expires,content); CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_LinphoneSubscriptionOutgoingInit,1,1000)); CU_ASSERT_TRUE(wait_for_list(lcs,&pauline->stat.number_of_LinphoneSubscriptionIncomingReceived,1,3000)); @@ -51,7 +51,8 @@ static void subscribe_forking(void) { CU_ASSERT_TRUE(wait_for_list(lcs,&marie->stat.number_of_NotifyReceived,1,1000)); linphone_event_terminate(lev); - + + linphone_content_unref(content); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); linphone_core_manager_destroy(pauline2); diff --git a/tester/liblinphone_completion b/tester/liblinphone_completion new file mode 100644 index 000000000..a0d05f3e0 --- /dev/null +++ b/tester/liblinphone_completion @@ -0,0 +1,113 @@ +# Copyright (C) 2012 Belledonne Comunications, Grenoble, France +# +# 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 2 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., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. + +# Created by Gautier Pelloux-Prayer on 2014/10/24. +# This script adds auto-completion for liblinphone_tester binary for Bash and +# zsh. To use it, just type: `source liblinphone_completion`, then use +# `./liblinphone_tester [tab] to get auto-completions. To use it permanently, +# source this file in your .rc file + +_liblinphone_complete() { + local completions command_requiring_argument prev_arg latest_arg available_tasks has_not_set_suite suite_name + + if [ -n "$BASH_VERSION" ]; then + set -- "${COMP_WORDS[@]}" #convert them to arguments (eg $1,$#,$@,etc.) + elif [ -n "$ZSH_VERSION" ]; then + local args + read -cA args #read list of arguments user entered + set -- "${args[@]}" #convert them to arguments (eg $1,$#,$@,etc.) + fi + #skip program name + program=$1 + shift + + # if user required help, do not complete anything + if ! grep -q -- "--help" <<< "$@"; then + # retrieve the last argument + latest_arg="" + prev_arg="" + latest_is_empty=0 + for arg in "$@"; do + if [ ! -z "$arg" ]; then + prev_arg="$latest_arg" + latest_arg="$arg" + else + latest_is_empty=1 + fi + done + + # get the tasks available, from --help + available_tasks="$($program 2>&1 --help | sed -nE "s/.*--([^ ]*).*/--\\1/p")" + + # these commands expect an argument + command_requiring_argument="$($program 2>&1 --help | sed -nE "s/.*--(.*) <.*/--\\1/p")" + + # remove all already provided tasks (it's useless to provide them twice) + if [[ ! -z "$@" ]]; then + current_tasks=$(echo $@ | grep -Eo -- "--([^ ])*" | tr '\n' '|' | sed 's/|/$|/g')--$ + if [ ! -z "$current_tasks" ]; then + available_tasks=$(echo "$available_tasks" | grep -vE -- "(${current_tasks})") + fi + fi + # remove --test option if --suite is not provided yet! + has_not_set_suite=$(grep -q -- "--suite" <<< "$@"; echo $?) + if [ $has_not_set_suite = 1 ]; then + available_tasks=$(echo "$available_tasks" | grep -v -- --test) + fi + + # if latest arg does not start with '--', it is a custom value + if [ $latest_is_empty = 0 ] && ! grep -q -- '^--' <<< "$latest_arg"; then + # echo "yes!$prev_arg $has_not_set_suite" + if [ "$prev_arg" = "--test" ] && [ $has_not_set_suite = 0 ]; then + suite_name=$(echo $@ | sed -nE 's/.*--suite (.*) (--.*)$/\1/p' |sed "s@\\\\@@g") + completions="$($program --list-tests $suite_name)" + elif [ "$prev_arg" = "--suite" ] || [ "$prev_arg" = "--list-tests" ]; then + completions="$($program --list-suites)" + fi + elif [ "$latest_arg" = "--test" ]; then + if [ $has_not_set_suite = 0 ]; then + suite_name=$(echo $@ | sed -nE 's/.*--suite (.*) (--.*)$/\1/p' |sed "s@\\\\@@g") + completions="$($program --list-tests $suite_name)" + fi + elif [ "$latest_arg" = "--suite" ] || [ "$latest_arg" = "--list-tests" ]; then + completions="$($program --list-suites)" + # we are waiting for a custom value, so do not hint anything + elif [[ ! -z "$latest_arg" ]] && grep -q -- "^$latest_arg$" <<< "$command_requiring_argument"; then + completions="" + else + completions="$available_tasks" + fi + fi + + if [ ! -z "$completions" ]; then + if [ -n "$BASH_VERSION" ]; then + IFS=$'\n' #if that even necessary? + COMPREPLY=($(compgen -W "${completions}" -- ${COMP_WORDS[COMP_CWORD]})) + elif [ -n "$ZSH_VERSION" ]; then + reply=( "${(ps:\n:)completions}" ) + fi + fi +} + +for tester in liblinphone_tester mediastreamer2_tester belle_sip_tester; do + if [ -n "$BASH_VERSION" ]; then + complete -F _liblinphone_complete $tester + elif [ -n "$ZSH_VERSION" ]; then + compctl -K _liblinphone_complete $tester + else + echo "Your shell might be not supported! Only bash and zsh tested." + fi +done diff --git a/tester/liblinphone_tester.c b/tester/liblinphone_tester.c index 5fb91605c..addf99566 100644 --- a/tester/liblinphone_tester.c +++ b/tester/liblinphone_tester.c @@ -25,6 +25,8 @@ #include "CUnit/CUCurses.h" #endif +extern int liblinphone_tester_use_log_file; + #ifdef ANDROID #include @@ -80,6 +82,7 @@ void cunit_android_trace_handler(int level, const char *fmt, va_list args) { jmethodID method = (*env)->GetMethodID(env, cls, "printLog", "(ILjava/lang/String;)V"); (*env)->CallVoidMethod(env, current_obj, method, javaLevel, javaString); (*env)->DeleteLocalRef(env,javaString); + (*env)->DeleteLocalRef(env,cls); } JNIEXPORT jint JNICALL Java_org_linphone_tester_Tester_run(JNIEnv *env, jobject obj, jobjectArray stringArray) { @@ -128,6 +131,7 @@ void helper(const char *name) { "\t\t\t--suite \n" "\t\t\t--test \n" "\t\t\t--dns-hosts \n" + "\t\t\t--log-file \n" #if HAVE_CU_CURSES "\t\t\t--curses\n" #endif @@ -149,7 +153,7 @@ int main (int argc, char *argv[]) int ret; const char *suite_name=NULL; const char *test_name=NULL; - + FILE* log_file=NULL; #if defined(ANDROID) linphone_core_set_log_handler(linphone_android_ortp_log_handler); #elif defined(__QNX__) @@ -194,7 +198,18 @@ int main (int argc, char *argv[]) suite_name = argv[i]; liblinphone_tester_list_suite_tests(suite_name); return 0; - } else { + } else if (strcmp(argv[i],"--log-file")==0){ + CHECK_ARG("--log-file", ++i, argc); + log_file=fopen(argv[i],"w"); + if (!log_file) { + ms_fatal("Cannot open file [%s] for writting logs because [%s]",argv[i],strerror(errno)); + } else { + liblinphone_tester_use_log_file=1; + liblinphone_tester_fprintf(stdout,"Redirecting traces to file [%s]",argv[i]); + linphone_core_set_log_file(log_file); + } + + }else { liblinphone_tester_fprintf(stderr, "Unknown option \"%s\"\n", argv[i]); \ helper(argv[0]); return -1; diff --git a/tester/liblinphone_tester.h b/tester/liblinphone_tester.h index 9178bac8f..12531a57f 100644 --- a/tester/liblinphone_tester.h +++ b/tester/liblinphone_tester.h @@ -58,8 +58,10 @@ extern test_suite_t flexisip_test_suite; extern test_suite_t stun_test_suite; extern test_suite_t remote_provisioning_test_suite; extern test_suite_t quality_reporting_test_suite; +extern test_suite_t log_collection_test_suite; extern test_suite_t transport_test_suite; extern test_suite_t player_test_suite; +extern test_suite_t dtmf_test_suite; extern int liblinphone_tester_nb_test_suites(void); @@ -75,6 +77,7 @@ extern void liblinphone_tester_uninit(void); extern int liblinphone_tester_run_tests(const char *suite_name, const char *test_name); extern void liblinphone_tester_set_fileprefix(const char* file_prefix); extern void liblinphone_tester_set_writable_dir_prefix(const char* writable_dir_prefix); +extern int liblinphone_tester_ipv6_available(void); #ifdef __cplusplus }; @@ -116,6 +119,8 @@ typedef struct _stats { int number_of_LinphoneCallIncomingEarlyMedia; int number_of_LinphoneCallUpdating; int number_of_LinphoneCallReleased; + int number_of_LinphoneCallEarlyUpdatedByRemote; + int number_of_LinphoneCallEarlyUpdating; int number_of_LinphoneTransferCallOutgoingInit; int number_of_LinphoneTransferCallOutgoingProgress; @@ -198,6 +203,13 @@ typedef struct _stats { int number_of_NetworkReachableFalse; int number_of_player_eof; LinphoneChatMessage* last_received_chat_message; + + char * dtmf_list_received; + int dtmf_count; + + int number_of_rtcp_sent; + int number_of_rtcp_received; + }stats; typedef struct _LinphoneCoreManager { @@ -209,6 +221,11 @@ typedef struct _LinphoneCoreManager { bool_t decline_subscribe; } LinphoneCoreManager; +typedef struct _LinphoneCallTestParams { + LinphoneCallParams *base; + bool_t sdp_removal; +} LinphoneCallTestParams; + LinphoneCoreManager* linphone_core_manager_new2(const char* rc_file, int check_for_proxies); LinphoneCoreManager* linphone_core_manager_new(const char* rc_file); void linphone_core_manager_stop(LinphoneCoreManager *mgr); @@ -222,9 +239,9 @@ void linphone_transfer_state_changed(LinphoneCore *lc, LinphoneCall *transfered, void notify_presence_received(LinphoneCore *lc, LinphoneFriend * lf); void text_message_received(LinphoneCore *lc, LinphoneChatRoom *room, const LinphoneAddress *from_address, const char *message); void message_received(LinphoneCore *lc, LinphoneChatRoom *room, LinphoneChatMessage* message); -void file_transfer_received(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size); -void file_transfer_send(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size); -void file_transfer_progress_indication(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t progress); +void file_transfer_received(LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size); +void file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size); +void file_transfer_progress_indication(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total); void is_composing_received(LinphoneCore *lc, LinphoneChatRoom *room); void info_message_received(LinphoneCore *lc, LinphoneCall *call, const LinphoneInfoMessage *msg); void new_subscription_requested(LinphoneCore *lc, LinphoneFriend *lf, const char *url); @@ -233,6 +250,8 @@ void linphone_publish_state_changed(LinphoneCore *lc, LinphoneEvent *ev, Linphon void linphone_notify_received(LinphoneCore *lc, LinphoneEvent *lev, const char *eventname, const LinphoneContent *content); void linphone_configuration_status(LinphoneCore *lc, LinphoneConfiguringState status, const char *message); void linphone_call_encryption_changed(LinphoneCore *lc, LinphoneCall *call, bool_t on, const char *authentication_token); +void dtmf_received(LinphoneCore *lc, LinphoneCall *call, int dtmf); +void call_stats_updated(LinphoneCore *lc, LinphoneCall *call, const LinphoneCallStats *stats); LinphoneAddress * create_linphone_address(const char * domain); bool_t wait_for(LinphoneCore* lc_1, LinphoneCore* lc_2,int* counter,int value); @@ -243,6 +262,11 @@ bool_t call_with_params(LinphoneCoreManager* caller_mgr ,LinphoneCoreManager* callee_mgr , const LinphoneCallParams *caller_params , const LinphoneCallParams *callee_params); +bool_t call_with_test_params(LinphoneCoreManager* caller_mgr + ,LinphoneCoreManager* callee_mgr + ,const LinphoneCallTestParams *caller_test_params + ,const LinphoneCallTestParams *callee_test_params); + bool_t call(LinphoneCoreManager* caller_mgr,LinphoneCoreManager* callee_mgr); void end_call(LinphoneCoreManager *m1, LinphoneCoreManager *m2); stats * get_stats(LinphoneCore *lc); @@ -250,9 +274,13 @@ LinphoneCoreManager *get_manager(LinphoneCore *lc); const char *liblinphone_tester_get_subscribe_content(void); const char *liblinphone_tester_get_notify_content(void); void liblinphone_tester_chat_message_state_change(LinphoneChatMessage* msg,LinphoneChatMessageState state,void* ud); +void liblinphone_tester_chat_message_msg_state_changed(LinphoneChatMessage *msg, LinphoneChatMessageState state); void liblinphone_tester_check_rtcp(LinphoneCoreManager* caller, LinphoneCoreManager* callee); void liblinphone_tester_clock_start(MSTimeSpec *start); bool_t liblinphone_tester_clock_elapsed(const MSTimeSpec *start, int value_ms); +void linphone_core_manager_check_accounts(LinphoneCoreManager *m); +void account_manager_destroy(void); +LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, const char* file, void* user_data); #ifdef ANDROID void cunit_android_trace_handler(int level, const char *fmt, va_list args) ; #endif diff --git a/tester/log_collection_tester.c b/tester/log_collection_tester.c new file mode 100644 index 000000000..b9c1835c5 --- /dev/null +++ b/tester/log_collection_tester.c @@ -0,0 +1,212 @@ +/* + belle-sip - SIP (RFC3261) library. + Copyright (C) 2010 Belledonne Communications SARL + + 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 2 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, see . +*/ + +#include +#ifndef __USE_XOPEN + /*on Debian OS, time.h does declare strptime only if __USE_XOPEN is declared */ + #define __USE_XOPEN +#endif +#include +#include "CUnit/Basic.h" +#include "linphonecore.h" +#include "private.h" +#include "liblinphone_tester.h" + + +/*getline is not available on android...*/ +#ifdef ANDROID +/* This code is public domain -- Will Hartung 4/9/09 */ +size_t getline(char **lineptr, size_t *n, FILE *stream) { + char *bufptr = NULL; + char *p = bufptr; + size_t size; + int c; + + if (lineptr == NULL) { + return -1; + } + if (stream == NULL) { + return -1; + } + if (n == NULL) { + return -1; + } + bufptr = *lineptr; + size = *n; + + c = fgetc(stream); + if (c == EOF) { + return -1; + } + if (bufptr == NULL) { + bufptr = malloc(128); + if (bufptr == NULL) { + return -1; + } + size = 128; + } + p = bufptr; + while(c != EOF) { + if ((p - bufptr) > (size - 1)) { + size = size + 128; + bufptr = realloc(bufptr, size); + if (bufptr == NULL) { + return -1; + } + } + *p++ = c; + if (c == '\n') { + break; + } + c = fgetc(stream); + } + + *p++ = '\0'; + *lineptr = bufptr; + *n = size; + + return p - bufptr - 1; +} +#endif + +LinphoneCoreManager* setup(bool_t enable_logs) { + LinphoneCoreManager *marie; + int timeout = 300; + + linphone_core_enable_log_collection(enable_logs); + + marie = linphone_core_manager_new( "marie_rc"); + // wait a few seconds to generate some traffic + while (--timeout){ + // Generate some logs - error logs because we must ensure that + // even if user did not enable logs, we will see them + ms_error("(test error)Timeout in %d...", timeout); + } + return marie; +} + +time_t check_file(char * filepath) { + time_t time_curr = -1; + if (filepath != NULL) { + int line_count = 0; + FILE *file = fopen(filepath, "r"); + char *line = NULL; + size_t line_size = 256; + struct tm tm_curr; + time_t time_prev = -1; + + // 1) expect to find folder name in filename path + CU_ASSERT_PTR_NOT_NULL(strstr(filepath, liblinphone_tester_writable_dir_prefix)); + + // 2) check file contents + while (getline(&line, &line_size, file) != -1) { + // a) there should be at least 25 lines + ++line_count; + + // b) logs should be ordered by date (format: 2014-11-04 15:22:12:606) + if (strlen(line) > 24) { + char date[24] = {'\0'}; + memcpy(date, line, 23); + if (strptime(date, "%Y-%m-%d %H:%M:%S", &tm_curr) != NULL) { + time_curr = mktime(&tm_curr); + CU_ASSERT_TRUE(time_curr >= time_prev); + time_prev = time_curr; + } + } + } + CU_ASSERT_TRUE(line_count > 25); + free(line); + fclose(file); + ms_free(filepath); + } + // return latest time in file + return time_curr; +} + +static LinphoneLogCollectionState old_collection_state; +static int collect_init() { + old_collection_state = linphone_core_log_collection_enabled(); + linphone_core_set_log_collection_path(liblinphone_tester_writable_dir_prefix); + return 0; +} + +static int collect_cleanup() { + linphone_core_enable_log_collection(old_collection_state); + linphone_core_reset_log_collection(); + return 0; +} + +static void collect_files_disabled() { + LinphoneCoreManager* marie = setup(FALSE); + CU_ASSERT_PTR_NULL(linphone_core_compress_log_collection(marie->lc)); + linphone_core_manager_destroy(marie); +} + +static void collect_files_filled() { + LinphoneCoreManager* marie = setup(TRUE); + char * filepath = linphone_core_compress_log_collection(marie->lc); + CU_ASSERT_PTR_NOT_NULL(filepath); + CU_ASSERT_EQUAL(ms_time(0), check_file(filepath)); + linphone_core_manager_destroy(marie); +} + +static void collect_files_small_size() { + LinphoneCoreManager* marie = setup(TRUE); + char * filepath; + linphone_core_set_log_collection_max_file_size(5000); + filepath = linphone_core_compress_log_collection(marie->lc); + CU_ASSERT_PTR_NOT_NULL(filepath); + CU_ASSERT_EQUAL(ms_time(0), check_file(filepath)); + linphone_core_manager_destroy(marie); +} + +static void collect_files_changing_size() { + LinphoneCoreManager* marie = setup(TRUE); + char * filepath; + int waiting = 100; + + filepath = linphone_core_compress_log_collection(marie->lc); + CU_ASSERT_PTR_NOT_NULL(filepath); + CU_ASSERT_EQUAL(ms_time(0), check_file(filepath)); + + linphone_core_set_log_collection_max_file_size(5000); + // Generate some logs + while (--waiting) ms_error("(test error)Waiting %d...", waiting); + + filepath = linphone_core_compress_log_collection(marie->lc); + CU_ASSERT_PTR_NOT_NULL(filepath); + CU_ASSERT_EQUAL(ms_time(0), check_file(filepath)); + + linphone_core_manager_destroy(marie); +} + +test_t log_collection_tests[] = { + { "No file when disabled", collect_files_disabled}, + { "Collect files filled when enabled", collect_files_filled}, + { "Logs collected into small file", collect_files_small_size}, + { "Logs collected when decreasing max size", collect_files_changing_size}, +}; + +test_suite_t log_collection_test_suite = { + "LogCollection", + collect_init, + collect_cleanup, + sizeof(log_collection_tests) / sizeof(log_collection_tests[0]), + log_collection_tests +}; + diff --git a/tester/message_tester.c b/tester/message_tester.c index a361eab1c..a44973227 100644 --- a/tester/message_tester.c +++ b/tester/message_tester.c @@ -62,9 +62,11 @@ void message_received(LinphoneCore *lc, LinphoneChatRoom *room, LinphoneChatMess /** * function invoked when a file transfer is received. * */ -void file_transfer_received(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size){ +void file_transfer_received(LinphoneChatMessage *message, const LinphoneContent* content, const char* buff, size_t size){ FILE* file=NULL; char receive_file[256]; + LinphoneChatRoom *cr = linphone_chat_message_get_chat_room(message); + LinphoneCore *lc = linphone_chat_room_get_core(cr); snprintf(receive_file,sizeof(receive_file), "%s/receive_file.dump", liblinphone_tester_writable_dir_prefix); if (!linphone_chat_message_get_user_data(message)) { /*first chunk, creating file*/ @@ -91,7 +93,7 @@ static char big_file [128000]; /* a buffer to simulate a big file for the file t /* * function called when the file transfer is initiated. file content should be feed into object LinphoneContent * */ -void file_transfer_send(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size){ +void file_transfer_send(LinphoneChatMessage *message, const LinphoneContent* content, char* buff, size_t* size){ int offset=-1; if (!linphone_chat_message_get_user_data(message)) { @@ -116,15 +118,18 @@ void file_transfer_send(LinphoneCore *lc, LinphoneChatMessage *message, const L /** * function invoked to report file transfer progress. * */ -void file_transfer_progress_indication(LinphoneCore *lc, LinphoneChatMessage *message, const LinphoneContent* content, size_t progress) { +void file_transfer_progress_indication(LinphoneChatMessage *message, const LinphoneContent* content, size_t offset, size_t total) { + LinphoneChatRoom *cr = linphone_chat_message_get_chat_room(message); + LinphoneCore *lc = linphone_chat_room_get_core(cr); const LinphoneAddress* from_address = linphone_chat_message_get_from(message); const LinphoneAddress* to_address = linphone_chat_message_get_to(message); char *address = linphone_chat_message_is_outgoing(message)?linphone_address_as_string(to_address):linphone_address_as_string(from_address); stats* counters = get_stats(lc); - ms_message(" File transfer [%d%%] %s of type [%s/%s] %s [%s] \n", (int)progress + int progress = (int)((offset * 100)/total); + ms_message(" File transfer [%d%%] %s of type [%s/%s] %s [%s] \n", progress ,(linphone_chat_message_is_outgoing(message)?"sent":"received") - , content->type - , content->subtype + , linphone_content_get_type(content) + , linphone_content_get_subtype(content) ,(linphone_chat_message_is_outgoing(message)?"to":"from") , address); counters->progress_of_LinphoneFileTransfer = progress; @@ -141,9 +146,14 @@ void is_composing_received(LinphoneCore *lc, LinphoneChatRoom *room) { } void liblinphone_tester_chat_message_state_change(LinphoneChatMessage* msg,LinphoneChatMessageState state,void* ud) { - LinphoneCore* lc=(LinphoneCore*)ud; + liblinphone_tester_chat_message_msg_state_changed(msg, state); +} + +void liblinphone_tester_chat_message_msg_state_changed(LinphoneChatMessage *msg, LinphoneChatMessageState state) { + LinphoneChatRoom *cr = linphone_chat_message_get_chat_room(msg); + LinphoneCore *lc = linphone_chat_room_get_core(cr); stats* counters = get_stats(lc); - ms_message("Message [%s] [%s]",linphone_chat_message_get_text(msg),linphone_chat_message_state_to_string(state)); + ms_message("Message [%s] [%s]",linphone_chat_message_get_text(msg), linphone_chat_message_state_to_string(state)); switch (state) { case LinphoneChatMessageStateDelivered: counters->number_of_LinphoneMessageDelivered++; @@ -158,9 +168,8 @@ void liblinphone_tester_chat_message_state_change(LinphoneChatMessage* msg,Linph counters->number_of_LinphoneMessageNotDelivered++; break; default: - ms_error("Unexpected state [%s] for message [%p]",linphone_chat_message_state_to_string(state),msg); + ms_error("Unexpected state [%s] for message [%p]",linphone_chat_message_state_to_string(state), msg); } - } static void text_message(void) { @@ -226,7 +235,7 @@ static void text_message_with_credential_from_auth_cb_auth_info_requested(Linpho static void text_message_with_credential_from_auth_cb(void) { char* to; LinphoneChatRoom* chat_room; - LinphoneCoreVTable* vtable = linphone_vtable_new(); + LinphoneCoreVTable* vtable = linphone_core_v_table_new(); LinphoneCoreManager* marie = linphone_core_manager_new("marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); text_message_with_credential_from_auth_cb_auth_info=linphone_auth_info_clone((LinphoneAuthInfo*)(linphone_core_get_auth_info_list(marie->lc)->data)); @@ -339,13 +348,13 @@ static void text_message_with_ack(void) { char* to = linphone_address_as_string(marie->identity); LinphoneChatRoom* chat_room = linphone_core_create_chat_room(pauline->lc,to); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); - { - int dummy=0; - wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ - reset_counters(&marie->stat); - reset_counters(&pauline->stat); - } - linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); + LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(message); + int dummy=0; + wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ + reset_counters(&marie->stat); + reset_counters(&pauline->stat); + linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_room_send_chat_message(chat_room,message); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceived,1)); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageDelivered,1)); CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); @@ -365,6 +374,7 @@ static void text_message_with_external_body(void) { char* to = linphone_address_as_string(marie->identity); LinphoneChatRoom* chat_room = linphone_core_create_chat_room(pauline->lc,to); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); + LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(message); linphone_chat_message_set_external_body_url(message,message_external_body_url="http://www.linphone.org"); { int dummy=0; @@ -372,7 +382,8 @@ static void text_message_with_external_body(void) { reset_counters(&marie->stat); reset_counters(&pauline->stat); } - linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); + linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_room_send_chat_message(chat_room,message); /* check transient message list: the message should be in it, and should be the only one */ CU_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 1); @@ -395,7 +406,8 @@ static void file_transfer_message(void) { char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; - LinphoneContent content; + LinphoneChatMessageCbs *cbs; + LinphoneContent* content; const char* big_file_content="big file"; /* setting dummy file content to something */ LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); @@ -416,22 +428,27 @@ static void file_transfer_message(void) { chat_room = linphone_core_create_chat_room(pauline->lc,to); ms_free(to); /* create a file transfer message */ - memset(&content,0,sizeof(content)); - content.type="text"; - content.subtype="plain"; - content.size=sizeof(big_file); /*total size to be transfered*/ - content.name = "bigfile.txt"; - message = linphone_chat_room_create_file_transfer_message(chat_room, &content); + content = linphone_core_create_content(pauline->lc); + linphone_content_set_type(content,"text"); + linphone_content_set_subtype(content,"plain"); + linphone_content_set_size(content,sizeof(big_file)); /*total size to be transfered*/ + linphone_content_set_name(content,"bigfile.txt"); + message = linphone_chat_room_create_file_transfer_message(chat_room, content); + cbs = linphone_chat_message_get_callbacks(message); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ reset_counters(&marie->stat); reset_counters(&pauline->stat); } - linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); + linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_room_send_chat_message(chat_room,message); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { - linphone_chat_message_start_file_download(marie->stat.last_received_chat_message, liblinphone_tester_chat_message_state_change); + cbs = linphone_chat_message_get_callbacks(marie->stat.last_received_chat_message); + linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_message_cbs_set_file_transfer_recv(cbs, file_transfer_received); + linphone_chat_message_download_file(marie->stat.last_received_chat_message); } CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageExtBodyReceived,1)); @@ -439,6 +456,7 @@ static void file_transfer_message(void) { CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1); CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,1); + linphone_content_unref(content); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -450,7 +468,8 @@ static void small_file_transfer_message(void) { char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; - LinphoneContent content; + LinphoneChatMessageCbs *cbs; + LinphoneContent* content; const char* big_file_content="big file"; /* setting dummy file content to something */ LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); @@ -471,22 +490,27 @@ static void small_file_transfer_message(void) { chat_room = linphone_core_create_chat_room(pauline->lc,to); ms_free(to); /* create a file transfer message */ - memset(&content,0,sizeof(content)); - content.type="text"; - content.subtype="plain"; - content.size=SMALL_FILE_SIZE; /*total size to be transfered*/ - content.name = "bigfile.txt"; - message = linphone_chat_room_create_file_transfer_message(chat_room, &content); + content = linphone_core_create_content(pauline->lc); + linphone_content_set_type(content,"text"); + linphone_content_set_subtype(content,"plain"); + linphone_content_set_size(content,SMALL_FILE_SIZE); /*total size to be transfered*/ + linphone_content_set_name(content,"bigfile.txt"); + message = linphone_chat_room_create_file_transfer_message(chat_room, content); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ reset_counters(&marie->stat); reset_counters(&pauline->stat); } - linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); + cbs = linphone_chat_message_get_callbacks(message); + linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_room_send_chat_message(chat_room,message); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageReceivedWithFile,1)); if (marie->stat.last_received_chat_message ) { - linphone_chat_message_start_file_download(marie->stat.last_received_chat_message, liblinphone_tester_chat_message_state_change); + cbs = linphone_chat_message_get_callbacks(marie->stat.last_received_chat_message); + linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_message_cbs_set_file_transfer_recv(cbs, file_transfer_received); + linphone_chat_message_download_file(marie->stat.last_received_chat_message); } CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageExtBodyReceived,1)); @@ -494,6 +518,7 @@ static void small_file_transfer_message(void) { CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageDelivered,1); CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,1); + linphone_content_unref(content); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -503,7 +528,8 @@ static void file_transfer_message_io_error_upload(void) { char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; - LinphoneContent content; + LinphoneChatMessageCbs *cbs; + LinphoneContent* content; const char* big_file_content="big file"; /* setting dummy file content to something */ LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); @@ -525,19 +551,22 @@ static void file_transfer_message_io_error_upload(void) { chat_room = linphone_core_create_chat_room(pauline->lc,to); /* create a file transfer message */ - memset(&content,0,sizeof(content)); - content.type="text"; - content.subtype="plain"; - content.size=sizeof(big_file); /*total size to be transfered*/ - content.name = "bigfile.txt"; - message = linphone_chat_room_create_file_transfer_message(chat_room, &content); + content = linphone_core_create_content(pauline->lc); + linphone_content_set_type(content,"text"); + linphone_content_set_subtype(content,"plain"); + linphone_content_set_size(content,sizeof(big_file)); /*total size to be transfered*/ + linphone_content_set_name(content,"bigfile.txt"); + message = linphone_chat_room_create_file_transfer_message(chat_room, content); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ reset_counters(&marie->stat); reset_counters(&pauline->stat); } - linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); + cbs = linphone_chat_message_get_callbacks(message); + linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_message_cbs_set_file_transfer_progress_indication(cbs, file_transfer_progress_indication); + linphone_chat_room_send_chat_message(chat_room,message); /*wait for file to be 25% uploaded and simultate a network error*/ CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.progress_of_LinphoneFileTransfer,25)); @@ -553,6 +582,7 @@ static void file_transfer_message_io_error_upload(void) { linphone_core_refresh_registers(pauline->lc); /*to make sure registration is back in registered and so it can be later unregistered*/ CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneRegistrationOk,pauline->stat.number_of_LinphoneRegistrationOk+1)); + linphone_content_unref(content); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -605,7 +635,7 @@ static void file_transfer_message_io_error_download(void) { if (marie->stat.last_received_chat_message ) { /* get last message and use it to download file */ - linphone_chat_message_start_file_download(marie->stat.last_received_chat_message, liblinphone_tester_chat_message_state_change); + linphone_chat_message_start_file_download(marie->stat.last_received_chat_message, liblinphone_tester_chat_message_state_change, marie->lc); /* wait for file to be 50% downloaded */ CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.progress_of_LinphoneFileTransfer, 50)); /* and simulate network error */ @@ -628,7 +658,8 @@ static void file_transfer_message_upload_cancelled(void) { char* to; LinphoneChatRoom* chat_room; LinphoneChatMessage* message; - LinphoneContent content; + LinphoneChatMessageCbs *cbs; + LinphoneContent* content; const char* big_file_content="big file"; /* setting dummy file content to something */ LinphoneCoreManager* marie = linphone_core_manager_new( "marie_rc"); LinphoneCoreManager* pauline = linphone_core_manager_new( "pauline_rc"); @@ -650,29 +681,33 @@ static void file_transfer_message_upload_cancelled(void) { chat_room = linphone_core_create_chat_room(pauline->lc,to); /* create a file transfer message */ - memset(&content,0,sizeof(content)); - content.type="text"; - content.subtype="plain"; - content.size=sizeof(big_file); /*total size to be transfered*/ - content.name = "bigfile.txt"; - message = linphone_chat_room_create_file_transfer_message(chat_room, &content); + content = linphone_core_create_content(pauline->lc); + linphone_content_set_type(content,"text"); + linphone_content_set_subtype(content,"plain"); + linphone_content_set_size(content,sizeof(big_file)); /*total size to be transfered*/ + linphone_content_set_name(content,"bigfile.txt"); + message = linphone_chat_room_create_file_transfer_message(chat_room, content); { int dummy=0; wait_for_until(marie->lc,pauline->lc,&dummy,1,100); /*just to have time to purge message stored in the server*/ reset_counters(&marie->stat); reset_counters(&pauline->stat); } - linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,pauline->lc); + cbs = linphone_chat_message_get_callbacks(message); + linphone_chat_message_cbs_set_msg_state_changed(cbs, liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_message_cbs_set_file_transfer_progress_indication(cbs, file_transfer_progress_indication); + linphone_chat_room_send_chat_message(chat_room,message); /*wait for file to be 50% uploaded and cancel the transfer */ CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.progress_of_LinphoneFileTransfer, 50)); - linphone_chat_room_cancel_file_transfer(message); + linphone_chat_message_cancel_file_transfer(message); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&pauline->stat.number_of_LinphoneMessageNotDelivered,1)); CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageNotDelivered,1); CU_ASSERT_EQUAL(marie->stat.number_of_LinphoneMessageExtBodyReceived,0); + linphone_content_unref(content); linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); } @@ -724,11 +759,11 @@ static void file_transfer_message_download_cancelled(void) { if (marie->stat.last_received_chat_message ) { /* get last message and use it to download file */ - linphone_chat_message_start_file_download(marie->stat.last_received_chat_message, liblinphone_tester_chat_message_state_change); + linphone_chat_message_start_file_download(marie->stat.last_received_chat_message, liblinphone_tester_chat_message_state_change, marie->lc); /* wait for file to be 50% downloaded */ CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.progress_of_LinphoneFileTransfer, 50)); /* and cancel the transfer */ - linphone_chat_room_cancel_file_transfer(marie->stat.last_received_chat_message); + linphone_chat_message_cancel_file_transfer(marie->stat.last_received_chat_message); } CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageInProgress,1); @@ -748,6 +783,7 @@ static void text_message_with_send_error(void) { char* to = linphone_address_as_string(pauline->identity); LinphoneChatRoom* chat_room = linphone_core_create_chat_room(marie->lc,to); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); + LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(message); reset_counters(&marie->stat); reset_counters(&pauline->stat); @@ -759,7 +795,8 @@ static void text_message_with_send_error(void) { reset_counters(&marie->stat); reset_counters(&pauline->stat); } - linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,marie->lc); + linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_room_send_chat_message(chat_room,message); /* check transient message list: the message should be in it, and should be the only one */ CU_ASSERT_EQUAL(ms_list_size(chat_room->transient_messages), 1); @@ -784,6 +821,7 @@ static void text_message_denied(void) { char* to = linphone_address_as_string(pauline->identity); LinphoneChatRoom* chat_room = linphone_core_create_chat_room(marie->lc,to); LinphoneChatMessage* message = linphone_chat_room_create_message(chat_room,"Bli bli bli \n blu"); + LinphoneChatMessageCbs *cbs = linphone_chat_message_get_callbacks(message); /*pauline doesn't want to be disturbed*/ linphone_core_disable_chat(pauline->lc,LinphoneReasonDoNotDisturb); @@ -793,7 +831,8 @@ static void text_message_denied(void) { reset_counters(&marie->stat); reset_counters(&pauline->stat); } - linphone_chat_room_send_message2(chat_room,message,liblinphone_tester_chat_message_state_change,marie->lc); + linphone_chat_message_cbs_set_msg_state_changed(cbs,liblinphone_tester_chat_message_msg_state_changed); + linphone_chat_room_send_chat_message(chat_room,message); CU_ASSERT_TRUE(wait_for(pauline->lc,marie->lc,&marie->stat.number_of_LinphoneMessageNotDelivered,1)); CU_ASSERT_EQUAL(pauline->stat.number_of_LinphoneMessageReceived,0); @@ -828,12 +867,12 @@ static void info_message_with_args(bool_t with_content) { info=linphone_core_create_info_message(marie->lc); linphone_info_message_add_header(info,"Weather","still bad"); if (with_content) { - LinphoneContent ct={0}; - ct.type="application"; - ct.subtype="somexml"; - ct.data=(void*)info_content; - ct.size=strlen(info_content); - linphone_info_message_set_content(info,&ct); + LinphoneContent* ct=linphone_core_create_content(marie->lc); + linphone_content_set_type(ct,"application"); + linphone_content_set_subtype(ct,"somexml"); + linphone_content_set_buffer(ct,info_content,strlen(info_content)); + linphone_info_message_set_content(info,ct); + linphone_content_unref(ct); } { int dummy=0; @@ -857,13 +896,13 @@ static void info_message_with_args(bool_t with_content) { if (with_content){ CU_ASSERT_PTR_NOT_NULL(content); if (content) { - CU_ASSERT_PTR_NOT_NULL(content->data); - CU_ASSERT_PTR_NOT_NULL(content->type); - CU_ASSERT_PTR_NOT_NULL(content->subtype); - if (content->type) CU_ASSERT_TRUE(strcmp(content->type,"application")==0); - if (content->subtype) CU_ASSERT_TRUE(strcmp(content->subtype,"somexml")==0); - if (content->data)CU_ASSERT_TRUE(strcmp((const char*)content->data,info_content)==0); - CU_ASSERT_EQUAL(content->size,strlen(info_content)); + CU_ASSERT_PTR_NOT_NULL(linphone_content_get_buffer(content)); + CU_ASSERT_PTR_NOT_NULL(linphone_content_get_type(content)); + CU_ASSERT_PTR_NOT_NULL(linphone_content_get_subtype(content)); + if (linphone_content_get_type(content)) CU_ASSERT_TRUE(strcmp(linphone_content_get_type(content),"application")==0); + if (linphone_content_get_subtype(content)) CU_ASSERT_TRUE(strcmp(linphone_content_get_subtype(content),"somexml")==0); + if (linphone_content_get_buffer(content))CU_ASSERT_TRUE(strcmp((const char*)linphone_content_get_buffer(content),info_content)==0); + CU_ASSERT_EQUAL(linphone_content_get_size(content),strlen(info_content)); } } linphone_core_manager_destroy(marie); @@ -952,7 +991,9 @@ message_tester_copy_file(const char *from, const char *to) } static int check_no_strange_time(void* data,int argc, char** argv,char** cNames) { - CU_ASSERT_EQUAL(argc, 0); + CU_ASSERT_EQUAL(argc, 1); + CU_ASSERT_STRING_EQUAL(cNames[0], "COUNT(*)"); // count of non updated messages should be 0 + CU_ASSERT_STRING_EQUAL(argv[0], "0"); // count of non updated messages should be 0 return 0; } @@ -977,12 +1018,65 @@ static void message_storage_migration() { CU_ASSERT(ms_list_size(chatrooms) > 0); // check that all messages have been migrated to the UTC time storage - CU_ASSERT(sqlite3_exec(marie->lc->db, "SELECT * FROM history WHERE time != '-1';", check_no_strange_time, NULL, NULL) == SQLITE_OK ); + CU_ASSERT(sqlite3_exec(marie->lc->db, "SELECT COUNT(*) FROM history WHERE time != '-1';", check_no_strange_time, NULL, NULL) == SQLITE_OK ); linphone_core_manager_destroy(marie); remove(tmp_db); } +static void history_message_count_helper(LinphoneChatRoom* chatroom, int x, int y, int expected ){ + MSList* messages = linphone_chat_room_get_history_range(chatroom, x, y); + int size = ms_list_size(messages); + if( expected != size ){ + ms_warning("History retrieved from %d to %d returned %d records, but expected %d", x, y, size, expected); + } + CU_ASSERT_EQUAL(size, expected); + + ms_list_free_with_data(messages, (void (*)(void *))linphone_chat_message_unref); + +} + +static void history_range_full_test(){ + LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); + LinphoneAddress *jehan_addr = linphone_address_new(""); + LinphoneChatRoom *chatroom; + char src_db[256]; + char tmp_db[256]; + snprintf(src_db,sizeof(src_db), "%s/messages.db", liblinphone_tester_file_prefix); + snprintf(tmp_db,sizeof(tmp_db), "%s/tmp.db", liblinphone_tester_writable_dir_prefix); + + CU_ASSERT_EQUAL_FATAL(message_tester_copy_file(src_db, tmp_db), 0); + + linphone_core_set_chat_database_path(marie->lc, tmp_db); + + chatroom = linphone_core_get_chat_room(marie->lc, jehan_addr); + CU_ASSERT_PTR_NOT_NULL(chatroom); + if (chatroom){ + // We have 20 tests to perform to fully qualify the function, here they are: + history_message_count_helper(chatroom, 0, 0, 1); + history_message_count_helper(chatroom, -1, 0, 1); + history_message_count_helper(chatroom, 0, -1, 1270); + history_message_count_helper(chatroom, 1, 3, 3); + history_message_count_helper(chatroom, 3, 1, 1270-3); + history_message_count_helper(chatroom, 10, 10, 1); + history_message_count_helper(chatroom, -1, -1, 1270); + history_message_count_helper(chatroom, -1, -2, 1270); + history_message_count_helper(chatroom, -2, -1, 1270); + history_message_count_helper(chatroom, 3, -1, 1270-3); + history_message_count_helper(chatroom, 1, -3, 1270-1); + history_message_count_helper(chatroom, 2, -2, 1270-2); + history_message_count_helper(chatroom, 2, 0, 1270-2); + history_message_count_helper(chatroom, 0, 2, 3); + history_message_count_helper(chatroom, -1, 3, 4); + history_message_count_helper(chatroom, -2, 2, 3); + history_message_count_helper(chatroom, -3, 1, 2); + } + linphone_core_manager_destroy(marie); + linphone_address_destroy(jehan_addr); + remove(tmp_db); +} + + static void history_messages_count() { LinphoneCoreManager *marie = linphone_core_manager_new("marie_rc"); LinphoneAddress *jehan_addr = linphone_address_new(""); @@ -1000,25 +1094,41 @@ static void history_messages_count() { chatroom = linphone_core_get_chat_room(marie->lc, jehan_addr); CU_ASSERT_PTR_NOT_NULL(chatroom); if (chatroom){ - MSList *history=linphone_chat_room_get_history(chatroom,0); + messages=linphone_chat_room_get_history(chatroom,10); + CU_ASSERT_EQUAL(ms_list_size(messages), 10); + ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); + + messages=linphone_chat_room_get_history(chatroom,1); + CU_ASSERT_EQUAL(ms_list_size(messages), 1); + ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); + + messages=linphone_chat_room_get_history(chatroom,0); CU_ASSERT_EQUAL(linphone_chat_room_get_history_size(chatroom), 1270); - CU_ASSERT_EQUAL(ms_list_size(history), linphone_chat_room_get_history_size(chatroom)); + CU_ASSERT_EQUAL(ms_list_size(messages), 1270); /*check the second most recent message*/ - CU_ASSERT_STRING_EQUAL(linphone_chat_message_get_text((LinphoneChatMessage *)history->next->data), "Fore and aft follow each other."); + CU_ASSERT_STRING_EQUAL(linphone_chat_message_get_text((LinphoneChatMessage *)messages->next->data), "Fore and aft follow each other."); + ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); /*test offset+limit: retrieve the 42th latest message only and check its content*/ messages=linphone_chat_room_get_history_range(chatroom, 42, 42); CU_ASSERT_EQUAL(ms_list_size(messages), 1); CU_ASSERT_STRING_EQUAL(linphone_chat_message_get_text((LinphoneChatMessage *)messages->data), "If you open yourself to the Tao is intangible and evasive, yet prefers to keep us at the mercy of the kingdom, then all of the streams of hundreds of valleys because of its limitless possibilities."); + ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); /*test offset without limit*/ - CU_ASSERT_EQUAL(ms_list_size(linphone_chat_room_get_history_range(chatroom, 1265, -1)), 1270-1265); + messages = linphone_chat_room_get_history_range(chatroom, 1265, -1); + CU_ASSERT_EQUAL(ms_list_size(messages), 1270-1265); + ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); /*test limit without offset*/ - CU_ASSERT_EQUAL(ms_list_size(linphone_chat_room_get_history_range(chatroom, 0, 5)), 6); + messages = linphone_chat_room_get_history_range(chatroom, 0, 5); + CU_ASSERT_EQUAL(ms_list_size(messages), 6); + ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); /*test invalid start*/ - CU_ASSERT_EQUAL(ms_list_size(linphone_chat_room_get_history_range(chatroom, 1265, 1260)), 1270-1265); + messages = linphone_chat_room_get_history_range(chatroom, 1265, 1260); + CU_ASSERT_EQUAL(ms_list_size(messages), 1270-1265); + ms_list_free_with_data(messages, (void (*)(void*))linphone_chat_message_unref); } linphone_core_manager_destroy(marie); linphone_address_destroy(jehan_addr); @@ -1050,6 +1160,7 @@ test_t message_tests[] = { #ifdef MSG_STORAGE_ENABLED ,{ "Database migration", message_storage_migration } ,{ "History count", history_messages_count } + ,{ "History range", history_range_full_test } #endif }; diff --git a/tester/player_tester.c b/tester/player_tester.c index 7c37a95de..8f0c5af43 100644 --- a/tester/player_tester.c +++ b/tester/player_tester.c @@ -17,24 +17,7 @@ */ #include "liblinphone_tester.h" - -static const char *_get_default_video_renderer(void){ -#ifdef WIN32 - return "MSDrawDibDisplay"; -#elif defined(ANDROID) - return "MSAndroidDisplay"; -#elif __APPLE__ && !defined(__ios) - return "MSOSXGLDisplay"; -#elif defined (HAVE_XV) - return "MSX11Video"; -#elif defined(HAVE_GL) - return "MSGLXVideo"; -#elif defined(__ios) - return "IOSDisplay"; -#else - return "MSVideoOut"; -#endif -} +#include static bool_t wait_for_eof(bool_t *eof, int *time,int time_refresh, int timeout) { while(*time < timeout && !*eof) { @@ -49,7 +32,7 @@ static void eof_callback(LinphonePlayer *player, void *user_data) { *eof = TRUE; } -static void play_file(const char *filename, bool_t unsupported_format) { +static void play_file(const char *filename, bool_t unsupported_format, const char *audio_mime, const char *video_mime) { LinphoneCoreManager *lc_manager; LinphonePlayer *player; int res, time = 0; @@ -59,12 +42,15 @@ static void play_file(const char *filename, bool_t unsupported_format) { CU_ASSERT_PTR_NOT_NULL(lc_manager); if(lc_manager == NULL) return; - player = linphone_core_create_file_player(lc_manager->lc, ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()), _get_default_video_renderer(), NULL); + player = linphone_core_create_local_player(lc_manager->lc, ms_snd_card_manager_get_default_card(ms_snd_card_manager_get()), video_stream_get_default_video_renderer(), 0); CU_ASSERT_PTR_NOT_NULL(player); if(player == NULL) goto fail; res = linphone_player_open(player, filename, eof_callback, &eof); - if(unsupported_format) { + if(unsupported_format + || (audio_mime == NULL && video_mime == NULL) + || (video_mime == NULL && audio_mime && !ms_filter_codec_supported(audio_mime)) + || (audio_mime == NULL && video_mime && !ms_filter_codec_supported(video_mime))) { CU_ASSERT_EQUAL(res, -1); } else { CU_ASSERT_EQUAL(res, 0); @@ -79,16 +65,20 @@ static void play_file(const char *filename, bool_t unsupported_format) { linphone_player_close(player); fail: - if(player) linphone_file_player_destroy(player); + if(player) linphone_player_destroy(player); if(lc_manager) linphone_core_manager_destroy(lc_manager); } static void playing_test(void) { - play_file("sounds/hello_opus_h264.mkv", !linphone_file_player_matroska_supported()); + char *filename = ms_strdup_printf("%s/sounds/hello_opus_h264.mkv", liblinphone_tester_file_prefix); + const char *audio_mime = "opus"; + const char *video_mime = "h264"; + play_file(filename, !linphone_local_player_matroska_supported(), audio_mime, video_mime); + ms_free(filename); } test_t player_tests[] = { - { "Playing" , playing_test } + { "Local MKV file" , playing_test } }; test_suite_t player_test_suite = { diff --git a/tester/quality_reporting_tester.c b/tester/quality_reporting_tester.c index d0ad63968..33df384be 100644 --- a/tester/quality_reporting_tester.c +++ b/tester/quality_reporting_tester.c @@ -17,7 +17,6 @@ */ #include -#include "CUnit/Basic.h" #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -26,7 +25,7 @@ #define __strstr(x, y) ((x==NULL)?NULL:strstr(x,y)) void on_report_send_mandatory(const LinphoneCall *call, int stream_type, const LinphoneContent *content){ - char * body = (char *)content->data; + char * body = (char *)linphone_content_get_buffer(content); char * remote_metrics_start = __strstr(body, "RemoteMetrics:"); reporting_session_report_t * report = call->log->reporting.reports[stream_type]; MediaStream * ms; @@ -92,7 +91,7 @@ char * on_report_send_verify_metrics(const reporting_content_metrics_t *metrics, } void on_report_send_with_rtcp_xr_local(const LinphoneCall *call, int stream_type, const LinphoneContent *content){ - char * body = (char*)content->data; + char * body = (char*)linphone_content_get_buffer(content); char * remote_metrics_start = __strstr(body, "RemoteMetrics:"); reporting_session_report_t * report = call->log->reporting.reports[stream_type]; on_report_send_mandatory(call,stream_type,content); @@ -100,7 +99,7 @@ void on_report_send_with_rtcp_xr_local(const LinphoneCall *call, int stream_type CU_ASSERT_TRUE(!remote_metrics_start || on_report_send_verify_metrics(&report->local_metrics,body) < remote_metrics_start); } void on_report_send_with_rtcp_xr_remote(const LinphoneCall *call, int stream_type, const LinphoneContent *content){ - char * body = (char*)content->data; + char * body = (char*)linphone_content_get_buffer(content); reporting_session_report_t * report = call->log->reporting.reports[stream_type]; on_report_send_mandatory(call,stream_type,content); @@ -215,7 +214,7 @@ static void quality_reporting_not_sent_if_low_bandwidth() { } void on_report_send_remove_fields(const LinphoneCall *call, int stream_type, const LinphoneContent *content){ - char *body = (char*)content->data; + char *body = (char*)linphone_content_get_buffer(content); /*corrupt start of the report*/ strncpy(body, "corrupted report is corrupted", strlen("corrupted report is corrupted")); } @@ -275,14 +274,14 @@ static void quality_reporting_interval_report() { if (create_call_for_quality_reporting_tests(marie, pauline, &call_marie, &call_pauline, NULL, NULL)) { linphone_reporting_set_on_report_send(call_marie, on_report_send_mandatory); - linphone_proxy_config_set_quality_reporting_interval(call_marie->dest_proxy, 3); + linphone_proxy_config_set_quality_reporting_interval(call_marie->dest_proxy, 10); CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(marie->lc)); CU_ASSERT_PTR_NOT_NULL(linphone_core_get_current_call(pauline->lc)); // PUBLISH submission to the collector should be ok - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,3,25000)); - CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,3,25000)); + CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishProgress,3,60000)); + CU_ASSERT_TRUE(wait_for_until(marie->lc,pauline->lc,&marie->stat.number_of_LinphonePublishOk,3,60000)); } linphone_core_manager_destroy(marie); linphone_core_manager_destroy(pauline); diff --git a/tester/rcfiles/laure_rc b/tester/rcfiles/laure_rc index 54a682401..7f4d099f5 100644 --- a/tester/rcfiles/laure_rc +++ b/tester/rcfiles/laure_rc @@ -38,4 +38,7 @@ automatically_accept=0 device=StaticImage: Static picture [sound] -echocancellation=0 #to not overload cpu in case of VG \ No newline at end of file +echocancellation=0 #to not overload cpu in case of VG + +[net] +dns_srv_enabled=0 #no srv needed in general \ No newline at end of file diff --git a/tester/rcfiles/marie_rc b/tester/rcfiles/marie_rc index f4f9aa793..367353d06 100644 --- a/tester/rcfiles/marie_rc +++ b/tester/rcfiles/marie_rc @@ -17,7 +17,7 @@ realm=sip.example.org [proxy_0] reg_proxy=sip.example.org;transport=tcp reg_route=sip.example.org;transport=tcp;lr -reg_identity=sip:marie@sip.example.org +reg_identity="Super Marie" reg_expires=3600 reg_sendregister=1 publish=0 @@ -48,3 +48,6 @@ device=StaticImage: Static picture [sound] echocancellation=0 #to not overload cpu in case of VG + +[net] +dns_srv_enabled=0 #no srv needed in general diff --git a/tester/rcfiles/pauline_rc b/tester/rcfiles/pauline_rc index 09669b72c..7322fd99a 100644 --- a/tester/rcfiles/pauline_rc +++ b/tester/rcfiles/pauline_rc @@ -45,3 +45,6 @@ device=StaticImage: Static picture [sound] echocancellation=0 #to not overload cpu in case of VG + +[net] +dns_srv_enabled=0 #no srv needed in general \ No newline at end of file diff --git a/tester/register_tester.c b/tester/register_tester.c index d47ffa2df..907a10db7 100644 --- a/tester/register_tester.c +++ b/tester/register_tester.c @@ -36,7 +36,7 @@ static LinphoneCoreManager* create_lcm_with_auth(unsigned int with_auth) { LinphoneCoreManager* mgr=linphone_core_manager_new(NULL); if (with_auth) { - LinphoneCoreVTable* vtable = linphone_vtable_new(); + LinphoneCoreVTable* vtable = linphone_core_v_table_new(); vtable->auth_info_requested=auth_info_requested; linphone_core_add_listener(mgr->lc,vtable); } @@ -314,7 +314,7 @@ static void ha1_authenticated_register(){ static void authenticated_register_with_no_initial_credentials(){ LinphoneCoreManager *mgr; - LinphoneCoreVTable* vtable = linphone_vtable_new(); + LinphoneCoreVTable* vtable = linphone_core_v_table_new(); stats* counters; char route[256]; diff --git a/tester/sounds/hello8000.mkv b/tester/sounds/hello8000.mkv index 42fa387e5..812d62563 100644 Binary files a/tester/sounds/hello8000.mkv and b/tester/sounds/hello8000.mkv differ diff --git a/tester/tester.c b/tester/tester.c index 97b45713d..98186c134 100644 --- a/tester/tester.c +++ b/tester/tester.c @@ -17,7 +17,7 @@ */ #include -#include "CUnit/Basic.h" +#include "CUnit/TestRun.h" #include "linphonecore.h" #include "private.h" #include "liblinphone_tester.h" @@ -25,8 +25,6 @@ #include "CUnit/CUCurses.h" #endif -static LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, const char* file, void* user_data); - static test_suite_t **test_suite = NULL; static int nb_test_suites = 0; @@ -40,6 +38,7 @@ const char* auth_domain="sip.example.org"; const char* test_username="liblinphone_tester"; const char* test_password="secret"; const char* test_route="sip2.linphone.org"; +int liblinphone_tester_use_log_file=0; #if WINAPI_FAMILY_PHONE_APP const char *liblinphone_tester_file_prefix="Assets"; @@ -107,38 +106,61 @@ void reset_counters( stats* counters) { memset(counters,0,sizeof(stats)); } -static LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, const char* file, void* user_data) { +LinphoneCore* configure_lc_from(LinphoneCoreVTable* v_table, const char* path, const char* file, void* user_data) { LinphoneCore* lc; - char filepath[256]={0}; - char ringpath[256]={0}; - char ringbackpath[256]={0}; - char rootcapath[256]={0}; - char dnsuserhostspath[256]={0}; - char nowebcampath[256]={0}; + LpConfig* config = NULL; + char *filepath = NULL; + char *ringpath = NULL; + char *ringbackpath = NULL; + char *rootcapath = NULL; + char *dnsuserhostspath = NULL; + char *nowebcampath = NULL; if (path==NULL) path="."; if (file){ - sprintf(filepath, "%s/%s", path, file); + filepath = ms_strdup_printf("%s/%s", path, file); CU_ASSERT_TRUE_FATAL(ortp_file_exist(filepath)==0); + config = lp_config_new_with_factory(NULL,filepath); } - lc = linphone_core_new(v_table,NULL,*filepath!='\0' ? filepath : NULL, user_data); + + // setup dynamic-path assets + ringpath = ms_strdup_printf("%s/sounds/oldphone.wav",path); + ringbackpath = ms_strdup_printf("%s/sounds/ringback.wav", path); + nowebcampath = ms_strdup_printf("%s/images/nowebcamCIF.jpg", path); + rootcapath = ms_strdup_printf("%s/certificates/cn/cafile.pem", path); + dnsuserhostspath = ms_strdup_printf( "%s/%s", path, userhostsfile); + + + if( config != NULL ) { + lp_config_set_string(config, "sound", "remote_ring", ringbackpath); + lp_config_set_string(config, "sound", "local_ring" , ringpath); + lp_config_set_string(config, "sip", "root_ca" , rootcapath); + lc = linphone_core_new_with_config(v_table, config, user_data); + } else { + lc = linphone_core_new(v_table,NULL,(filepath!=NULL&&filepath[0]!='\0') ? filepath : NULL, user_data); + + linphone_core_set_ring(lc, ringpath); + linphone_core_set_ringback(lc, ringbackpath); + linphone_core_set_root_ca(lc,rootcapath); + } sal_enable_test_features(lc->sal,TRUE); - snprintf(rootcapath, sizeof(rootcapath), "%s/certificates/cn/cafile.pem", path); - linphone_core_set_root_ca(lc,rootcapath); - - sprintf(dnsuserhostspath, "%s/%s", path, userhostsfile); sal_set_dns_user_hosts_file(lc->sal, dnsuserhostspath); - - snprintf(ringpath,sizeof(ringpath), "%s/sounds/oldphone.wav",path); - snprintf(ringbackpath,sizeof(ringbackpath), "%s/sounds/ringback.wav", path); - linphone_core_set_ring(lc, ringpath); - linphone_core_set_ringback(lc, ringbackpath); - - snprintf(nowebcampath, sizeof(nowebcampath), "%s/images/nowebcamCIF.jpg", path); linphone_core_set_static_picture(lc,nowebcampath); + + + ms_free(ringpath); + ms_free(ringbackpath); + ms_free(nowebcampath); + ms_free(rootcapath); + ms_free(dnsuserhostspath); + + if( filepath ) ms_free(filepath); + + if( config ) lp_config_unref(config); + return lc; } @@ -211,9 +233,6 @@ LinphoneCoreManager* linphone_core_manager_new2(const char* rc_file, int check_f mgr->v_table.call_state_changed=call_state_changed; mgr->v_table.text_received=text_message_received; mgr->v_table.message_received=message_received; - mgr->v_table.file_transfer_recv=file_transfer_received; - mgr->v_table.file_transfer_send=file_transfer_send; - mgr->v_table.file_transfer_progress_indication=file_transfer_progress_indication; mgr->v_table.is_composing_received=is_composing_received; mgr->v_table.new_subscription_requested=new_subscription_requested; mgr->v_table.notify_presence_received=notify_presence_received; @@ -225,10 +244,13 @@ LinphoneCoreManager* linphone_core_manager_new2(const char* rc_file, int check_f mgr->v_table.configuring_status=linphone_configuration_status; mgr->v_table.call_encryption_changed=linphone_call_encryption_changed; mgr->v_table.network_reachable=network_reachable; + mgr->v_table.dtmf_received=dtmf_received; + mgr->v_table.call_stats_updated=call_stats_updated; reset_counters(&mgr->stat); if (rc_file) rc_path = ms_strdup_printf("rcfiles/%s", rc_file); mgr->lc=configure_lc_from(&mgr->v_table, liblinphone_tester_file_prefix, rc_path, mgr); + linphone_core_manager_check_accounts(mgr); /*CU_ASSERT_EQUAL(ms_list_size(linphone_core_get_proxy_config_list(lc)),proxy_count);*/ if (check_for_proxies && rc_file) /**/ proxy_count=ms_list_size(linphone_core_get_proxy_config_list(mgr->lc)); @@ -387,8 +409,10 @@ void liblinphone_tester_init(void) { add_test_suite(&flexisip_test_suite); add_test_suite(&remote_provisioning_test_suite); add_test_suite(&quality_reporting_test_suite); + add_test_suite(&log_collection_test_suite); add_test_suite(&transport_test_suite); add_test_suite(&player_test_suite); + add_test_suite(&dtmf_test_suite); } void liblinphone_tester_uninit(void) { @@ -399,6 +423,56 @@ void liblinphone_tester_uninit(void) { } } +/*derivated from cunit*/ +static void test_complete_message_handler(const CU_pTest pTest, + const CU_pSuite pSuite, + const CU_pFailureRecord pFailureList) { + int i; + CU_pFailureRecord pFailure = pFailureList; + if (pFailure) { + if (liblinphone_tester_use_log_file) ms_warning("Suite [%s], Test [%s] had failures:", pSuite->pName, pTest->pName); + liblinphone_tester_fprintf(stdout,"\nSuite [%s], Test [%s] had failures:", pSuite->pName, pTest->pName); + } else { + if (liblinphone_tester_use_log_file) ms_warning(" passed"); + liblinphone_tester_fprintf(stdout," passed"); + } + for (i = 1 ; (NULL != pFailure) ; pFailure = pFailure->pNext, i++) { + if (liblinphone_tester_use_log_file) ms_warning("\n %d. %s:%u - %s", i, + (NULL != pFailure->strFileName) ? pFailure->strFileName : "", + pFailure->uiLineNumber, + (NULL != pFailure->strCondition) ? pFailure->strCondition : ""); + liblinphone_tester_fprintf(stdout,"\n %d. %s:%u - %s", i, + (NULL != pFailure->strFileName) ? pFailure->strFileName : "", + pFailure->uiLineNumber, + (NULL != pFailure->strCondition) ? pFailure->strCondition : ""); + } + } + + +static void test_all_tests_complete_message_handler(const CU_pFailureRecord pFailure) { + if (liblinphone_tester_use_log_file) ms_warning("\n\n %s",CU_get_run_results_string()); + liblinphone_tester_fprintf(stdout,"\n\n %s",CU_get_run_results_string()); +} + +static void test_suite_init_failure_message_handler(const CU_pSuite pSuite) { + if (liblinphone_tester_use_log_file) ms_warning("Suite initialization failed for [%s].", pSuite->pName); + liblinphone_tester_fprintf(stdout,"Suite initialization failed for [%s].", pSuite->pName); +} + +static void test_suite_cleanup_failure_message_handler(const CU_pSuite pSuite) { + if (liblinphone_tester_use_log_file) ms_warning("Suite cleanup failed for '%s'.", pSuite->pName); + liblinphone_tester_fprintf(stdout,"Suite cleanup failed for [%s].", pSuite->pName); +} + +static void test_start_message_handler(const CU_pTest pTest, const CU_pSuite pSuite) { + if (liblinphone_tester_use_log_file) ms_warning("Suite [%s] Test [%s]", pSuite->pName,pTest->pName); + liblinphone_tester_fprintf(stdout,"\nSuite [%s] Test [%s]\n", pSuite->pName,pTest->pName); +} +static void test_suite_start_message_handler(const CU_pSuite pSuite) { + if (liblinphone_tester_use_log_file) ms_warning("Suite [%s]", pSuite->pName); + liblinphone_tester_fprintf(stdout,"\nSuite [%s]", pSuite->pName); +} + int liblinphone_tester_run_tests(const char *suite_name, const char *test_name) { int i; int ret; @@ -410,6 +484,14 @@ int liblinphone_tester_run_tests(const char *suite_name, const char *test_name) run_test_suite(test_suite[i]); } + CU_set_test_start_handler(test_start_message_handler); + CU_set_test_complete_handler(test_complete_message_handler); + CU_set_all_test_complete_handler(test_all_tests_complete_message_handler); + CU_set_suite_init_failure_handler(test_suite_init_failure_message_handler); + CU_set_suite_cleanup_failure_handler(test_suite_cleanup_failure_message_handler); + CU_set_suite_start_handler(test_suite_start_message_handler); + + #if !HAVE_CU_GET_SUITE if( suite_name ){ ms_warning("Tester compiled without CU_get_suite() function, running all tests instead of suite '%s'\n", suite_name); @@ -417,7 +499,6 @@ int liblinphone_tester_run_tests(const char *suite_name, const char *test_name) #else if (suite_name){ CU_pSuite suite; - CU_basic_set_mode(CU_BRM_VERBOSE); suite=CU_get_suite(suite_name); if (!suite) { ms_error("Could not find suite '%s'. Available suites are:", suite_name); @@ -431,11 +512,11 @@ int liblinphone_tester_run_tests(const char *suite_name, const char *test_name) liblinphone_tester_list_suite_tests(suite->pName); return -2; } else { - CU_ErrorCode err= CU_basic_run_test(suite, test); + CU_ErrorCode err= CU_run_test(suite, test); if (err != CUE_SUCCESS) ms_error("CU_basic_run_test error %d", err); } } else { - CU_basic_run_suite(suite); + CU_run_suite(suite); } } else @@ -450,8 +531,7 @@ int liblinphone_tester_run_tests(const char *suite_name, const char *test_name) #endif { /* Run all tests using the CUnit Basic interface */ - CU_basic_set_mode(CU_BRM_VERBOSE); - CU_basic_run_tests(); + CU_run_all_tests(); } } @@ -460,18 +540,21 @@ int liblinphone_tester_run_tests(const char *suite_name, const char *test_name) /* Redisplay list of failed tests on end */ if (CU_get_number_of_failure_records()){ CU_basic_show_failures(CU_get_failure_list()); - printf("\n"); + liblinphone_tester_fprintf(stdout,"\n"); } CU_cleanup_registry(); + account_manager_destroy(); return ret; } + int liblinphone_tester_fprintf(FILE * stream, const char * format, ...) { int result; va_list args; va_start(args, format); #ifndef ANDROID result = vfprintf(stream,format,args); + fflush(stream); #else /*used by liblinphone tester to retrieve suite list*/ result = 0; @@ -480,3 +563,22 @@ int liblinphone_tester_fprintf(FILE * stream, const char * format, ...) { va_end(args); return result; } + +int liblinphone_tester_ipv6_available(void){ + struct addrinfo *ai=belle_sip_ip_address_to_addrinfo(AF_INET6,"2a01:e00::2",53); + if (ai){ + struct sockaddr_storage ss; + struct addrinfo src; + socklen_t slen=sizeof(ss); + char localip[128]; + int port=0; + belle_sip_get_src_addr_for(ai->ai_addr,ai->ai_addrlen,(struct sockaddr*) &ss,&slen,4444); + src.ai_addr=(struct sockaddr*) &ss; + src.ai_addrlen=slen; + belle_sip_addrinfo_to_ip(&src,localip, sizeof(localip),&port); + freeaddrinfo(ai); + return strcmp(localip,"::1")!=0; + } + return FALSE; +} + diff --git a/tester/transport_tester.c b/tester/transport_tester.c index 8f0673d60..fdc4a194f 100644 --- a/tester/transport_tester.c +++ b/tester/transport_tester.c @@ -61,7 +61,6 @@ static char* get_public_contact_ip(LinphoneCore* lc) { } static void call_with_transport_base(LinphoneTunnelMode tunnel_mode, bool_t with_sip, LinphoneMediaEncryption encryption) { if (linphone_core_tunnel_available()){ - char *tmp_char; LinphoneCoreManager *pauline = linphone_core_manager_new( "pauline_rc"); LinphoneCoreManager *marie = linphone_core_manager_new( "marie_rc"); LinphoneCall *pauline_call; @@ -81,28 +80,23 @@ static void call_with_transport_base(LinphoneTunnelMode tunnel_mode, bool_t with LinphoneTunnel *tunnel = linphone_core_get_tunnel(pauline->lc); LinphoneTunnelConfig *config = linphone_tunnel_config_new(); - /*tunnel works only in UDP mode*/ - linphone_proxy_config_edit(proxy); - linphone_address_set_transport(server_addr, LinphoneTransportUdp); - linphone_address_set_transport(route, LinphoneTransportUdp); - tmp_char = linphone_address_as_string(server_addr); - linphone_proxy_config_set_server_addr(proxy, tmp_char); - ms_free(tmp_char); - tmp_char = linphone_address_as_string(route); - linphone_proxy_config_set_route(proxy, tmp_char); - ms_free(tmp_char); linphone_tunnel_config_set_host(config, "tunnel.linphone.org"); linphone_tunnel_config_set_port(config, 443); linphone_tunnel_config_set_remote_udp_mirror_port(config, 12345); linphone_tunnel_add_server(tunnel, config); linphone_tunnel_set_mode(tunnel, tunnel_mode); linphone_tunnel_enable_sip(tunnel, with_sip); - linphone_proxy_config_done(proxy); - /*enabling the tunnel cause another REGISTER to be made*/ - CU_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_LinphoneRegistrationOk,2)); + /* + * Enabling the tunnel with sip cause another REGISTER to be made. + * In automatic mode, the udp test should conclude (assuming we have a normal network), that no + * tunnel is needed. Thus the number of registrations should stay to 1. + * The library is missing a notification of "tunnel connectivity test finished" to enable the + * full testing of the automatic mode. + */ - if(tunnel_mode == LinphoneTunnelModeEnable) { + if(tunnel_mode == LinphoneTunnelModeEnable && with_sip) { + CU_ASSERT_TRUE(wait_for(pauline->lc,NULL,&pauline->stat.number_of_LinphoneRegistrationOk,2)); /* Ensure that we did use the tunnel. If so, we should see contact changed from: Contact: ;.[...] To: diff --git a/tools/generator.cc b/tools/generator.cc index 82f50c660..2b8ab0a39 100644 --- a/tools/generator.cc +++ b/tools/generator.cc @@ -52,7 +52,7 @@ void CplusplusGenerator::generate(Project *proj){ void CplusplusGenerator::writeEnumMember(ConstField *cf, bool isLast){ writeTabs(1); - mOutfile<getName(); + mOutfile<getName()<<"="<getValue(); if (!isLast) mOutfile<<","; if (!cf->getHelp().empty()) mOutfile<<"\t/**< "<getHelp()<<" */"; mOutfile< members=klass->getConstFields(); list::iterator it; string enum_name=getEnumName(klass); - int value=0; filename<getName())<<"/"<getHelp().empty()){ writeTabs(1); @@ -254,7 +253,7 @@ void JavascriptGenerator::writeEnum(Class *klass){ mOutfile<<"*/"<getName().substr(prefix_size,string::npos)<<" : "<getName().substr(prefix_size,string::npos)<<" : "<getValue(); if (++it!=members.end()) mOutfile<<","; mOutfile<setHelp(node.getChild("detaileddescription").getChild("para").getText()); list enumValues=node.getChildren("enumvalue"); list::iterator it; + int value = 0; for (it=enumValues.begin();it!=enumValues.end();++it){ - ConstField *cf=new ConstField(Type::getType("int"),(*it).getChild("name").getText()); + string initializer = (*it).getChild("initializer").getText(); + if ((initializer.length() > 1) && (initializer.at(0) == '=')) { + std::stringstream ss; + if ((initializer.length() > 2) && (initializer.at(1) == '0')) { + if ((initializer.length() > 3) && (initializer.at(2) == 'x')) { + ss << std::hex << initializer.substr(3); + } else { + ss << std::oct << initializer.substr(2); + } + } else { + ss << std::dec << initializer.substr(1); + } + ss >> value; + } + ConstField *cf=new ConstField(Type::getType("int"),(*it).getChild("name").getText(),value); cf->setHelp((*it).getChild("detaileddescription").getChild("para").getText()); klass->addConstField(cf); - + value++; } } diff --git a/tools/python/apixml2python.py b/tools/python/apixml2python.py index 357816a5a..f6248ca69 100755 --- a/tools/python/apixml2python.py +++ b/tools/python/apixml2python.py @@ -23,7 +23,7 @@ import sys import xml.etree.ElementTree as ET sys.path.append(os.path.realpath(__file__)) -from apixml2python.linphone import LinphoneModule +from apixml2python.linphone import LinphoneModule, HandWrittenClassMethod, HandWrittenInstanceMethod, HandWrittenProperty blacklisted_classes = [ @@ -58,7 +58,9 @@ blacklisted_functions = [ 'linphone_core_publish', # missing LinphoneContent 'linphone_core_remove_listener', 'linphone_core_serialize_logs', # There is no use to wrap this function + 'linphone_core_set_log_collection_max_file_size', # need to handle class properties 'linphone_core_set_log_collection_path', # need to handle class properties + 'linphone_core_set_log_collection_prefix', # need to handle class properties 'linphone_core_set_log_file', # There is no use to wrap this function 'linphone_core_set_log_handler', # Hand-written but put directly in the linphone module 'linphone_core_set_log_level', # There is no use to wrap this function @@ -82,11 +84,12 @@ blacklisted_functions = [ 'lp_config_section_to_dict' # missing LinphoneDictionary ] hand_written_functions = [ - 'linphone_chat_room_send_message2', - 'linphone_core_get_sound_devices', - 'linphone_core_get_video_devices', - 'linphone_core_new', - 'linphone_core_new_with_config' + HandWrittenInstanceMethod('ChatRoom', 'send_message2', 'linphone_chat_room_send_message2'), + HandWrittenProperty('Content', 'buffer', 'linphone_content_get_buffer', 'linphone_content_set_buffer'), + HandWrittenProperty('Core', 'sound_devices', 'linphone_core_get_sound_devices', None), + HandWrittenProperty('Core', 'video_devices', 'linphone_core_get_video_devices', None), + HandWrittenClassMethod('Core', 'new', 'linphone_core_new'), + HandWrittenClassMethod('Core', 'new_with_config', 'linphone_core_new_with_config') ] def generate(apixmlfile, outputfile): diff --git a/tools/python/apixml2python/handwritten_declarations.mustache b/tools/python/apixml2python/handwritten_declarations.mustache index d5be0a3c4..6f7ae5b92 100644 --- a/tools/python/apixml2python/handwritten_declarations.mustache +++ b/tools/python/apixml2python/handwritten_declarations.mustache @@ -13,3 +13,6 @@ MSVideoSize PyLinphoneVideoSize_AsMSVideoSize(PyObject *obj); PyObject * PyLinphoneVideoSize_FromMSVideoSize(MSVideoSize vs); time_t PyDateTime_As_time_t(PyObject *obj); PyObject * PyDateTime_From_time_t(time_t t); + +static PyObject * pylinphone_Content_get_buffer(PyObject *self, void *closure); +static int pylinphone_Content_set_buffer(PyObject *self, PyObject *value, void *closure); diff --git a/tools/python/apixml2python/handwritten_definitions.mustache b/tools/python/apixml2python/handwritten_definitions.mustache index 4ae90a9ac..52dfc7016 100644 --- a/tools/python/apixml2python/handwritten_definitions.mustache +++ b/tools/python/apixml2python/handwritten_definitions.mustache @@ -526,3 +526,58 @@ static PyMethodDef pylinphone_PayloadTypeType_ModuleMethods[] = { /* Sentinel */ { NULL, NULL, 0, NULL } }; + + +static PyObject * pylinphone_Content_get_buffer(PyObject *self, void *closure) { + void * cbuffer; + size_t csize; + PyObject * pyresult; + PyObject * pyret; + const char *pyret_fmt; + const LinphoneContent *native_ptr; + native_ptr = pylinphone_Content_get_native_ptr(self); + if (native_ptr == NULL) { + PyErr_SetString(PyExc_TypeError, "Invalid linphone.Content instance"); + return NULL; + } + + pylinphone_trace(1, "[PYLINPHONE] >>> %s(%p [%p])", __FUNCTION__, self, native_ptr); + cbuffer = linphone_content_get_buffer(native_ptr); + csize = linphone_content_get_size(native_ptr); + pylinphone_dispatch_messages(); + + pyresult = PyByteArray_FromStringAndSize((const char *)cbuffer, csize); + pyret = Py_BuildValue("O", pyresult); + pylinphone_trace(-1, "[PYLINPHONE] <<< %s -> %p", __FUNCTION__, pyret); + return pyret; +} + +static int pylinphone_Content_set_buffer(PyObject *self, PyObject *value, void *closure) { + LinphoneContent *native_ptr; + void * _buffer; + size_t _size; + LinphonePresenceModel * _presence_native_ptr = NULL; + native_ptr = pylinphone_Content_get_native_ptr(self); + if (native_ptr == NULL) { + PyErr_SetString(PyExc_TypeError, "Invalid linphone.Content instance"); + return -1; + } + + if (value == NULL) { + PyErr_SetString(PyExc_TypeError, "Cannot delete the 'buffer' attribute."); + return -1; + } + if ((value != Py_None) && !PyByteArray_Check(value)) { + PyErr_SetString(PyExc_TypeError, "The 'buffer' attribute value must be a ByteArray instance."); + return -1; + } + + _buffer = PyByteArray_AsString(value); + _size = PyByteArray_Size(value); + + pylinphone_trace(1, "[PYLINPHONE] >>> %s(%p [%p], %p [%p])", __FUNCTION__, self, native_ptr, value, _buffer); + linphone_content_set_buffer(native_ptr, _buffer, _size); + pylinphone_dispatch_messages(); + pylinphone_trace(-1, "[PYLINPHONE] <<< %s -> 0", __FUNCTION__); + return 0; +} diff --git a/tools/python/apixml2python/linphone.py b/tools/python/apixml2python/linphone.py index e90926f25..0d88af2ab 100644 --- a/tools/python/apixml2python/linphone.py +++ b/tools/python/apixml2python/linphone.py @@ -38,6 +38,32 @@ def compute_event_name(s): return event_name +class HandWrittenCode: + def __init__(self, _class, name, func_list): + self._class = _class + self.name = name + self.func_list = func_list + +class HandWrittenInstanceMethod(HandWrittenCode): + def __init__(self, _class, name, cfunction): + HandWrittenCode.__init__(self, _class, name, [cfunction]) + +class HandWrittenClassMethod(HandWrittenCode): + def __init__(self, _class, name, cfunction): + HandWrittenCode.__init__(self, _class, name, [cfunction]) + +class HandWrittenProperty(HandWrittenCode): + def __init__(self, _class, name, getter_cfunction = None, setter_cfunction = None): + func_list = [] + if getter_cfunction is not None: + func_list.append(getter_cfunction) + if setter_cfunction is not None: + func_list.append(setter_cfunction) + HandWrittenCode.__init__(self, _class, name, func_list) + self.getter_cfunction = getter_cfunction + self.setter_cfunction = setter_cfunction + + class ArgumentType: def __init__(self, basic_type, complete_type, contained_type, linphone_module): self.basic_type = basic_type @@ -308,7 +334,7 @@ class MethodDefinition: arg_names.append(arg_name + "_native_obj") else: arg_names.append(arg_name) - if self.return_type != 'void': + if self.return_complete_type != 'void': c_function_call_code += "cresult = " c_function_call_code += self.method_node.get('name') + "(" if self.self_arg is not None: @@ -806,12 +832,15 @@ class EventCallbackMethodDefinition(MethodDefinition): class LinphoneModule(object): - def __init__(self, tree, blacklisted_classes, blacklisted_events, blacklisted_functions, hand_written_functions): + def __init__(self, tree, blacklisted_classes, blacklisted_events, blacklisted_functions, hand_written_codes): self.internal_instance_method_names = ['destroy', 'ref', 'unref'] self.internal_property_names = ['user_data'] self.mslist_types = Set([]) self.enums = [] self.enum_names = [] + hand_written_functions = [] + for hand_written_code in hand_written_codes: + hand_written_functions += hand_written_code.func_list xml_enums = tree.findall("./enums/enum") for xml_enum in xml_enums: if xml_enum.get('deprecated') == 'true': @@ -872,6 +901,31 @@ class LinphoneModule(object): ev['event_name'] = compute_event_name(ev['event_cname']) ev['event_doc'] = self.__format_doc(xml_event.find('briefdescription'), xml_event.find('detaileddescription')) self.events.append(ev) + for hand_written_code in hand_written_codes: + if hand_written_code._class == c['class_name']: + if isinstance(hand_written_code, HandWrittenClassMethod): + print "HandWrittenClassMethod" + m = {} + m['method_name'] = hand_written_code.name + c['class_type_hand_written_methods'].append(m) + elif isinstance(hand_written_code, HandWrittenInstanceMethod): + print "HandWrittenInstanceMethod" + m = {} + m['method_name'] = hand_written_code.name + c['class_instance_hand_written_methods'].append(m) + elif isinstance(hand_written_code, HandWrittenProperty): + print "HandWrittenProperty" + p = {} + p['property_name'] = hand_written_code.name + if hand_written_code.getter_cfunction is None: + p['getter_reference'] = 'NULL' + else: + p['getter_reference'] = '(getter)pylinphone_' + c['class_name'] + '_get_' + p['property_name'] + if hand_written_code.setter_cfunction is None: + p['setter_reference'] = 'NULL' + else: + p['setter_reference'] = '(setter)pylinphone_' + c['class_name'] + '_set_' + p['property_name'] + c['class_hand_written_properties'].append(p) xml_type_methods = xml_class.findall("./classmethods/classmethod") for xml_type_method in xml_type_methods: if xml_type_method.get('deprecated') == 'true': @@ -881,9 +935,7 @@ class LinphoneModule(object): continue m = {} m['method_name'] = method_name.replace(c['class_c_function_prefix'], '') - if method_name in hand_written_functions: - c['class_type_hand_written_methods'].append(m) - else: + if method_name not in hand_written_functions: m['method_xml_node'] = xml_type_method c['class_type_methods'].append(m) c['class_instance_methods'] = [] @@ -898,9 +950,7 @@ class LinphoneModule(object): continue m = {} m['method_name'] = method_name.replace(c['class_c_function_prefix'], '') - if method_name in hand_written_functions: - c['class_instance_hand_written_methods'].append(m) - else: + if method_name not in hand_written_functions: m['method_xml_node'] = xml_instance_method c['class_instance_methods'].append(m) c['class_properties'] = [] @@ -915,45 +965,31 @@ class LinphoneModule(object): p['property_name'] = property_name xml_property_getter = xml_property.find("./getter") xml_property_setter = xml_property.find("./setter") - handwritten_property = False if xml_property_getter is not None: - if xml_property_getter.get('name') in blacklisted_functions or xml_property_getter.get('deprecated') == 'true': + if xml_property_getter.get('name') in blacklisted_functions or xml_property_getter.get('name') in hand_written_functions or xml_property_getter.get('deprecated') == 'true': continue - elif xml_property_getter.get('name') in hand_written_functions: - handwritten_property = True if xml_property_setter is not None: - if xml_property_setter.get('name') in blacklisted_functions or xml_property_setter.get('deprecated') == 'true': + if xml_property_setter.get('name') in blacklisted_functions or xml_property_setter.get('name') in hand_written_functions or xml_property_setter.get('deprecated') == 'true': continue - elif xml_property_setter.get('name') in hand_written_functions: - handwritten_property = True - if handwritten_property: - p['getter_reference'] = 'NULL' - p['setter_reference'] = 'NULL' - if xml_property_getter is not None: - p['getter_reference'] = '(getter)pylinphone_' + c['class_name'] + '_get_' + p['property_name'] - if xml_property_setter is not None: - p['setter_reference'] = '(setter)pylinphone_' + c['class_name'] + '_set_' + p['property_name'] - c['class_hand_written_properties'].append(p) + if xml_property_getter is not None: + xml_property_getter.set('property_name', property_name) + p['getter_name'] = xml_property_getter.get('name').replace(c['class_c_function_prefix'], '') + p['getter_xml_node'] = xml_property_getter + p['getter_reference'] = "(getter)pylinphone_" + c['class_name'] + "_" + p['getter_name'] + p['getter_definition_begin'] = "static PyObject * pylinphone_" + c['class_name'] + "_" + p['getter_name'] + "(PyObject *self, void *closure) {" + p['getter_definition_end'] = "}" else: - if xml_property_getter is not None: - xml_property_getter.set('property_name', property_name) - p['getter_name'] = xml_property_getter.get('name').replace(c['class_c_function_prefix'], '') - p['getter_xml_node'] = xml_property_getter - p['getter_reference'] = "(getter)pylinphone_" + c['class_name'] + "_" + p['getter_name'] - p['getter_definition_begin'] = "static PyObject * pylinphone_" + c['class_name'] + "_" + p['getter_name'] + "(PyObject *self, void *closure) {" - p['getter_definition_end'] = "}" - else: - p['getter_reference'] = "NULL" - if xml_property_setter is not None: - xml_property_setter.set('property_name', property_name) - p['setter_name'] = xml_property_setter.get('name').replace(c['class_c_function_prefix'], '') - p['setter_xml_node'] = xml_property_setter - p['setter_reference'] = "(setter)pylinphone_" + c['class_name'] + "_" + p['setter_name'] - p['setter_definition_begin'] = "static int pylinphone_" + c['class_name'] + "_" + p['setter_name'] + "(PyObject *self, PyObject *value, void *closure) {" - p['setter_definition_end'] = "}" - else: - p['setter_reference'] = "NULL" - c['class_properties'].append(p) + p['getter_reference'] = "NULL" + if xml_property_setter is not None: + xml_property_setter.set('property_name', property_name) + p['setter_name'] = xml_property_setter.get('name').replace(c['class_c_function_prefix'], '') + p['setter_xml_node'] = xml_property_setter + p['setter_reference'] = "(setter)pylinphone_" + c['class_name'] + "_" + p['setter_name'] + p['setter_definition_begin'] = "static int pylinphone_" + c['class_name'] + "_" + p['setter_name'] + "(PyObject *self, PyObject *value, void *closure) {" + p['setter_definition_end'] = "}" + else: + p['setter_reference'] = "NULL" + c['class_properties'].append(p) self.classes.append(c) # Format events definitions for ev in self.events: diff --git a/tools/software-desc.hh b/tools/software-desc.hh index 2d454e502..575f52fb0 100644 --- a/tools/software-desc.hh +++ b/tools/software-desc.hh @@ -294,7 +294,7 @@ private: class ConstField{ public: - ConstField(Type *type, const string &name, const string &value="") : mType(type), mName(name), mValue(value){ + ConstField(Type *type, const string &name, int value) : mType(type), mName(name), mValue(value){ } void setHelp(const string & help){ mHelp=help; @@ -308,7 +308,7 @@ public: Type *getType()const{ return mType; } - const string &getValue()const{ + int getValue()const{ return mValue; } static string getCommonPrefix(list fields){ @@ -338,7 +338,7 @@ public: private: Type *mType; string mName; - string mValue; + int mValue; string mHelp; };