diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..b22c32a --- /dev/null +++ b/.gitattributes @@ -0,0 +1,5 @@ +configure.ac filter=version +debian/changelog filter=version +src/woeusb filter=version +src/woeusb.1 filter=version +src/woeusbgui.1 filter=version diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000..bd19665 --- /dev/null +++ b/.gitconfig @@ -0,0 +1,5 @@ +# Project-specific Git Configuration +# DOC: man: git-config +[filter "version"] + clean = filters/clean-version.bash + smudge = filters/smudge-version.bash diff --git a/.github/The source code archives provided here is NOT supported, please use git-clone instead b/.github/The source code archives provided here is NOT supported, please use git-clone instead new file mode 100644 index 0000000..3baa09e --- /dev/null +++ b/.github/The source code archives provided here is NOT supported, please use git-clone instead @@ -0,0 +1 @@ +This is a dummy file for package uploaders to resolve the undenyable GitHub Release source code archives. \ No newline at end of file diff --git a/.github/issue_template.md b/.github/issue_template.md new file mode 100644 index 0000000..a87180d --- /dev/null +++ b/.github/issue_template.md @@ -0,0 +1,36 @@ +## Good Habit Checklist for Issue Reporting +Checkout [Mastering Markdown · GitHub Guides](https://guides.github.com/features/mastering-markdown/#GitHub-flavored-markdown) if you needs help on the GitHub-flavored Markdown syntax. You may remove sections and contents that don't apply. + +* [ ] I've searched the issue tracker and is pretty sure that there's no duplicate issue already filed +* [ ] I've built the latest development snapshot using the instructions in README and verified that the issue can still be reproduced (for bug reports) + +## Issue Reproduce Instructions +> 1. Launch WoeUSB by running `` +> 2. Do blablabla... + +## Expected Behavior +> No error + +## Current Behavior +> WoeUSB errors with message "blablabla" + +## Info of My Environment +### WoeUSB Version +> For source code build, run `git describe --tags --always --dirty` under the source tree, for prebuilt releases refer the source that provides WoeUSB + +### WoeUSB Source +> Built from source code, commit abcdefg +> Installed from Ubuntu 16.04 software archive +> Installed from WebUpd8 PPA + +### GNU Bash Version +> WoeUSB exploits several advanced features of the Bash scripting language and requires a relatively-recent Bash intepreter. Run `bash --version` in a terminal to acquire this information. + +### Information about the Operating System +> Different OS distributions provides different characteristics and may influence the result of running WoeUSB. Run `lsb_release --description` or `lsb_release -d` in a terminal to acquire this information. + +### Information about the Source Media +> "Windows 9 Professional Edition" downloaded from + +### Information about the Target Device +> Transcend JetFlash® 790K 64GB (USB 3.1 variant) diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..fa45edd --- /dev/null +++ b/.gitignore @@ -0,0 +1,42 @@ +# Git Tracking Ignore Rules +## Debian package build generated files +/debian/woeusb* +/debian/files +/src/stamp-h1 +/debian/.debhelper/ +/debian/autoreconf.* +/debian/debhelper-build-stamp + +## Files generated by Autoconf +*Makefile +Makefile.in +/config.* +/libtool +/src/config.hpp +/build-stamp +/autom4te.cache/ +/configure +/config.* +/aclocal.m4 +/depcomp +/missing +/install-sh +/ltmain.sh +/compile +/m4/ +/src/config.hpp.in + +## Files generated by WxWidgets build +/src/.deps/ + +## Compiled object code +*.o +*.pyc + +## Gettext compiled message catalogs +*.mo + +\.idea/ +doc/_build + +venv/ diff --git a/.travis.yml b/.travis.yml new file mode 100644 index 0000000..dd163fb --- /dev/null +++ b/.travis.yml @@ -0,0 +1,45 @@ +# Travis CI Configuration +# https://docs.travis-ci.com +## Lesser history +git: + depth: 30 + +## Use container-based infrastructure for quicker build start-up +sudo: false + +## We only support Ubuntu 14.04 and newer +dist: trusty + +addons: + apt: + packages: + - realpath # Not required least after 16.04 + - autotools-dev + - libwxgtk2.8-dev + - devscripts # For mk-build-deps + - equivs # mk-build-deps requires this to be installed + +language: cpp + +compiler: +- gcc + +script: +# For triggering smudge-version +- ./setup-development-environment.bash +- mk-build-deps && mv woeusb-build-deps*.deb .. +- autoreconf --force --install +- ./configure +- make + +deploy: + provider: releases + api_key: + secure: RJHRp/Ou83QtkZXdS/UXiOIf1hfsUzg1ZPVZNi18oNTQcMwcHut9IqsaJEb5ZmwdC9/0TIqkoXaPTXUatVS5G+OaPXhFh0FPWFlzpIKIa4xiM7juhoettvK50r7B0+QyfIcMuZ+wTP6h3itXkeGm97xTqOnMmGn2BpefmAQ8nMKcw6ehD9F1LFPIiGJSw16Sli5b4s9hkyJtslyxjriWsLypuIFA+z7/PAPFj4UmbAqNCTQH3yHUHkNPHomf0S405uecgGlV4eYqc10nNP0Y/2gN1pDwSx7HNbCSR/ufhLXc2dH+JBho7lJRCCaJKZ2PX2JeCndWOLAmKkuz2snV/aMcDzaXb6G5MQ3UPKsbaMJHaiKzz48LBDVeOsbhL7FF4cs+JdiPQGaTzTTSg35j6MXM28WirJ7VxEpVRxjrILgbRXasJIRXaB0Ttimgu2L2fJr2GDT3EBfVj5mT+GpXgsqwXlGP/QBKrB1170g4ATPHKmzmXqCYo7DZw6qZ5T1G0ZiZm9TX82OlYuNNo7fkuquo6Q7z6kJRlwmI0PPnR54IUuI6wrcOvWc/PoEBhRQvGpzyBadiLeFoQrAgHofcnGPfIbqmY/2cZiZza/XvnxVwa1NEHCGXZEcRYHeAQyRGtikxUNuhlP93sDLvPg61QuQVV/y+yXVVtuFDrLuL+L4= + file_glob: true + file: + - ../woeusb-build-deps*.deb + - ".github/The source code archives provided here is NOT supported, please use git-clone instead" + on: + repo: slacka/WoeUSB + tags: true diff --git a/AUTHORS b/AUTHORS new file mode 100644 index 0000000..13ccfd9 --- /dev/null +++ b/AUTHORS @@ -0,0 +1 @@ +Colin GILLE / congelli501 diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..6146b4f --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,73 @@ +# Contributing Guidelines +This document explains how to contribute to this project in many aspects. Please make sure to read this thoroughly before making any contributions. + +## Reporting Issues +The so-called "issue" includes but is not limited to software bugs and suggestions + +### Always Search for Duplicates Before Filing a New Issue +There is a possibility that your issue has already been filed, so please search the issue tracker before filing a new one + +When searching, use keywords instead of full sentences. For example, search "crash unbounded variable" instead of "The program crashes with 'unbounded variable' message printed on screen". + +### Report Software Bugs Effectively +How you report software bugs greatly affects how fast it can be processed and fixed, refer to [How to Report Bugs Effectively](http://www.chiark.greenend.org.uk/~sgtatham/bugs.html) for more information + +## Localize (Translate) the Software +If you are fluent in a language other than English, you may help this project by translating it to your language. This is called localization or L10N for short. This software has already been internationalized so that it is capable of displaying different languages. + +Also, please consider translating our documentation to the language that you are fluent in. + +## Improving Documentation +The documentation of this project may be outdated through time, and needs help to keep it up to date. + +### Manual Pages (manpages) +Refer to the following articles for reference on writing manpages: + +* [Linux Man Page Howto](http://www.schweikhardt.net/man_page_howto.html) +* [The GNU Troff Manual](https://www.gnu.org/software/groff/manual) + - [The GNU Troff Manual: Macro Packages » man » Usage](https://www.gnu.org/software/groff/manual/html_node/Man-usage.html#Man-usage) + - [The GNU Troff Manual: Escapes](https://www.gnu.org/software/groff/manual/html_node/Escapes.html#Escapes) + - [The GNU Troff Manual: Fonts and Symbols](https://www.gnu.org/software/groff/manual/html_node/Fonts-and-Symbols.html#Fonts-and-Symbols) + +## Improving Code +There are so many aspects of the code that can be improved, however, please consider the following topics while doing so. + +### Coding Style +It is required to mimic the coding style of the current code + +#### Indentation +This project uses tab characters for indentation as it's width can be flexibly configured in many text editors + +#### Padding Spaces +* Padding is required for operators +* Padding is avoided for the outer curly braces + +#### Word Separating Method +NOTE: This currently only applies to the GNU Bash shell scripts. + +* Underscore for variable names +* Underscore for function names + +### Defensive Bash Programming +* All parameters that are assigned a value should be declared as read-only parameter to remain unchanged throughout the code +* All non-readonly parameters should be UNSET right after they are not used. +* Function parameters should be caught by `local` parameters instead of directly referenced using positional parameter syntax +* To increase code reusability, avoid referencing global variables from a function, alway pass it by function arguments + +### Character Encoding of Files +We use UTF-8 encoding for all of our files + +## Promote This Project to Others +It is appreciated if you share this project with others. Also, if you write an article about this project, plese share it with us, we'd love to hear about it! + +## Design Artwork/Logos for This Software +All current artwork is stored under src/data. Please only use materials that are under a free license. + +## Hints on Using the Git VCS +### Create commits based on minimal independent changes +Avoid creating commits that do multiple things at once as this will help other developers understand the change history. + +### Write Comprehensible Commit Messages +Use concrete language on what the commit does in the commit message. + +### Avoid Changing History That Has Been Pushed to Remote Repository diff --git a/LICENSE b/COPYING similarity index 99% rename from LICENSE rename to COPYING index 94a9ed0..10926e8 100644 --- a/LICENSE +++ b/COPYING @@ -672,3 +672,4 @@ may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read . + diff --git a/ChangeLog b/ChangeLog new file mode 100644 index 0000000..e2d12a4 --- /dev/null +++ b/ChangeLog @@ -0,0 +1,3 @@ +2017-06-13 林博仁 + + * We no longer use ChangeLog as we use Git as our VCS, please refer `git log` or refer Commits · slacka/WoeUSB for changelog of WoeUSB. diff --git a/Makefile.am b/Makefile.am new file mode 100644 index 0000000..9046c6e --- /dev/null +++ b/Makefile.am @@ -0,0 +1,16 @@ + +SUBDIRS = \ + src\ + innoSetup\ + debian + +# M4 + +## Pour fichier COPYING +pkgdocdir=$(prefix) + +if IS_MINGW +pkgdoc_DATA = $(srcdir)/COPYING +endif + +EXTRA_DIST = $(srcdir)/os diff --git a/NEWS b/NEWS new file mode 100644 index 0000000..e69de29 diff --git a/README.md b/README.md index 622c434..d000a71 100644 --- a/README.md +++ b/README.md @@ -1,2 +1,80 @@ -# WoeUSB-ng -WoeUSB is a simple tool that enable you to create your own usb stick windows installer from an iso image or a real DVD. +# WoeUSB +[![Latest Release](https://img.shields.io/github/release/slacka/WoeUSB.svg)](https://github.com/WaxyMocha/WoeUSB-ng/releases) +[![WoeUSB License](https://img.shields.io/badge/license-gpl-blue.svg)](https://github.com/WaxyMocha/WoeUSB-ng/blob/master/COPYING) +[![Build Status](https://travis-ci.org/slacka/WoeUSB.svg?branch=master)](https://travis-ci.org/slacka/WoeUSB) + +![brand](src/data/woeusb-logo.png)[![thumbnail of GUI wrapper screenshot](dev/woeusbgui-screenshot.thumbnail.png)](dev/woeusbgui-screenshot.png)[![thumbnail of CLI application screenshot](dev/woeusb-screenshot.thumbnail.png)](dev/woeusb-screenshot.png) + +_A Linux program to create a Windows USB stick installer from a real Windows DVD or image._ + +This package contains two programs: + +* woeusb: A command-line utility that enables you to create your own bootable Windows installation USB storage device from an existing Windows Installation disc or disk image +* woeusbgui: A GUI wrapper of woeusb based on WxWidgets + +Supported images: + +Windows Vista, Windows 7, Window 8.x, Windows 10. All languages and any version (home, pro...) and Windows PE are supported. + +Supported bootmodes: + +* Legacy/MBR-style/IBM PC compatible bootmode +* Native UEFI booting is supported for Windows 7 and later images (limited to the FAT filesystem as the target) + +This project is a fork of [Congelli501's WinUSB software](http://en.congelli.eu/prog_info_winusb.html), which has not been maintained since 2012, according to the official website. + +## Installation +### Prebuilt Packages +Note that prebuilt packages are not necessarily the latest release and we are NOT responsible for the trustworthiness of these packages. Regarding any related issues contact its maintainer first. + +#### Official Distribution Packages +* [Fedora](https://src.fedoraproject.org/rpms/WoeUSB) packages maintained by mprahl + +#### Third-party Distribution Packages +* [Arch Linux](https://aur.archlinux.org/packages/woeusb-git/) packages maintained by darkfm +* [Ubuntu](https://launchpad.net/%7Enilarimogard/+archive/ubuntu/webupd8) packages maintained by [WebUpd8](http://www.webupd8.org/) + +### Build from Source +The following are the instructions to install WoeUSB if prebuilt version is not available or too old. + +#### Acquire WoeUSB's Source Code +Clone WoeUSB's Git repository to your local machine using `git clone https://github.com/slacka/WoeUSB.git` + +NOTE: We no longer support building from source archives provided in the GitHub Releases page as the software version is not set. + +#### Setting the Application Version String +This step is required for generating the proper version name based on the Git tags. This step should be repeated if the version is changed. + +```shell +$ ./setup-development-environment.bash +``` + +#### Install WoeUSB's Build Dependencies +```shell +# For Debian-based distributions (NOTE: For your convenience, this package is already provided in the release page) +$ sudo apt-get install devscripts equivs gdebi-core +$ cd +$ mk-build-deps # NOTE: Currently, due to Debian Bug #679101, this command will fail if the source path contains spaces. +$ sudo gdebi woeusb-build-deps__all.deb + +# For Fedora > 22 +$ sudo dnf install wxGTK3-devel + +# For Fedora 22 +$ sudo dnf install wxGTK-devel dh-autoreconf.noarch +``` +#### Build & Install WoeUSB +```shell +# For Debian-based distributions +$ dpkg-buildpackage -uc -b # NOTE: Currently, due to a bug in the build system, this command will fail if the source's path contains space or single quotes, refer to issue #84 for details +$ sudo gdebi ../woeusb__.deb + +# Generic method +$ autoreconf --force --install # Most non-Debian derived distros will need this +$ ./configure +$ make +$ sudo make install +``` + +## License +WoeUSB is distributed under the [GPL license](https://github.com/slacka/WoeUSB/blob/master/COPYING). diff --git a/acinclude.m4 b/acinclude.m4 new file mode 100644 index 0000000..02c115f --- /dev/null +++ b/acinclude.m4 @@ -0,0 +1,894 @@ +dnl --------------------------------------------------------------------------- +dnl MY_FIND_SFML() +dnl Find SFML lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_SFML], +[ + dnl OpenGL header + AM_CHECK_LIB_HEADER([GL], [gl], [GL/gl.h], [], [], AC_MSG_ERROR([ /!\ This programme requires OpenGL headers !])) + + dnl SFML + if test "$IS_MAC" = 'true'; then + CHECK_FRAMEWORK_LIST([SFML], [SFML sfml-graphics sfml-window sfml-system sfml-audio]) + else + AM_CHECK_LIB_HEADER([SFML], [sfml], [SFML/Graphics.hpp SFML/Window.hpp SFML/Audio.hpp SFML/System.hpp], [sfml-graphics sfml-window sfml-system sfml-audio], [], AC_MSG_ERROR([ /!\ This programme requires SFML !])) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl MY_FIND_LIBNOTIFY() +dnl Find LIBNOTIFY lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_LIBNOTIFY], +[ + dnl Pkg Config (cf man pkg-config => AUTOCONF MACROS) + PKG_PROG_PKG_CONFIG dnl Check is 'pkg-config' is installed + AH_TEMPLATE([USE_LIBNOTIFY], [Define if libnotify can be used.]) + AH_TEMPLATE([USE_LIBNOTIFY_NEW], [Define if libnotify version is more than 0.7.3 because Gnome decided to change the API.]) + + if test "$IS_MINGW" = 'true'; then + AC_DEFINE([USE_LIBNOTIFY], [0]) + else + PKG_CHECK_MODULES([LIBNOTIFY], [libnotify >= 0.4], AC_DEFINE([USE_LIBNOTIFY], [1]), AC_DEFINE([USE_LIBNOTIFY], [0])) + + PKG_CHECK_MODULES([LIBNOTIFY_NEW], [libnotify >= 0.7.3], AC_DEFINE([USE_LIBNOTIFY_NEW], [1]), AC_DEFINE([USE_LIBNOTIFY_NEW], [0])) + + LIBS_ALL="$LIBS_ALL ${LIBNOTIFY_LIBS}" + AC_SUBST([LIBS_ALL], [$LIBS_ALL]) + CFLAGS_ALL="$CFLAGS_ALL ${LIBNOTIFY_CFLAGS}" + AC_SUBST([CFLAGS_ALL], [$CFLAGS_ALL]) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl MY_FIND_WXWIDGETS() +dnl Find WXWIDGETS lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_WXWIDGETS], +[ + AM_OPTIONS_WXCONFIG + AM_PATH_WXCONFIG(2.8.4, wxWin=1, , [xrc,std]) + if test "$wxWin" != 1; then + AC_MSG_ERROR([ + wxWidgets must be installed on your system. + + Please check that wx-config is in path, the directory + where wxWidgets libraries are installed (returned by + 'wx-config --libs' or 'wx-config --static --libs' command) + is in LD_LIBRARY_PATH or equivalent variable and + wxWidgets version is 2.8.4 or above. + ]) + fi + + dnl All lib options + LIBS_ALL="$LIBS_ALL ${WX_LIBS}" + AC_SUBST([LIBS_ALL], [$LIBS_ALL]) + CFLAGS_ALL="$CFLAGS_ALL ${WX_CXXFLAGS}" + AC_SUBST([CFLAGS_ALL], [$CFLAGS_ALL]) + + if test "$IS_MINGW" = 'true'; then + EXTRA_WINDRES_ARG="$EXTRA_WINDRES_ARG $(echo "$WX_CXXFLAGS" | cut -d " " -f 1-2)" ## Pour n'avoir que les deux premiers chanps (inclue).' + AC_SUBST([EXTRA_WINDRES_ARG]) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl MY_FIND_BOOST() +dnl Find BOOST lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_BOOST], +[ + dnl Boost + AM_CHECK_LIB_HEADER([BOOST], [boost], [boost/config.hpp], [], [], AC_MSG_ERROR([ /!\ This programme requires boost !])) +]) + +dnl --------------------------------------------------------------------------- +dnl MY_FIND_GTK2() +dnl Find BOOST lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_GTK2], +[ + dnl gtk+2 + if test "$IS_MINGW" = 'false'; then + AM_CHECK_LIB_HEADER([GTK2], [gtk+-2.0], [gdk/gdkx.h gtk/gtk.h], [gtk-x11-2.0], [], AC_MSG_ERROR([ /!\ This programme requires gtk+ 2 !])) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl MY_FIND_LUA() +dnl Find LUA lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_LUA], +[ + dnl LUA + LUA_VERSION="5.1" dnl Sous windows, la lib s'appelle lua, et pas lua5.1, Sous Ubunut, la lib s'appelle lua ! + AM_CHECK_LIB_HEADER([LUA], [lua${LUA_VERSION}], [lua.hpp], [lua @ lua${LUA_VERSION}], [], [AC_MSG_ERROR([ /!\ This programme requires LUA !])]) +]) + +dnl --------------------------------------------------------------------------- +dnl MY_FIND_OPENGL() +dnl Find OPENGL lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_OPENGL], +[ + dnl OpenGL header + AM_CHECK_LIB_HEADER([GL], [gl], [GL/gl.h], [], [], AC_MSG_ERROR([ /!\ This programme requires OpenGL headers !])) + + dnl OpenGL WIN32 & MAC + if test "$IS_MINGW" = 'true'; then + dnl intl (gettext) + AM_CHECK_LIB_HEADER([OGLWIN], [], [], [opengl32 glu32], [], [AC_MSG_ERROR([ /!\ This programme requires intl (gettext) !])]) + elif test "$IS_MAC" = 'true'; then + CHECK_FRAMEWORK_LIST([SFML], [OpenGL GLUT]) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl MY_FIND_INTL() +dnl Find INTL lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_INTL], +[ + dnl intl (gettext) + if test "$IS_LINUX" = 'false'; then + AM_CHECK_LIB_HEADER([INTL], [intl], [libintl.h locale.h], [intl], [], [AC_MSG_ERROR([ /!\ This programme requires intl (gettext) !])]) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl MY_FIND_STDCPP() +dnl Find stdc++ lib +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_FIND_STDCPP], +[ + dnl STL, pas sous windows comme on passe en stdc++ static + if test "$IS_MINGW" = 'false'; then + AC_CHECK_LIB(stdc++, main,,AC_MSG_ERROR([ /!\ This programme requires libstdc++ !])) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl MY_PACKAGE_INIT(package full name) +dnl +dnl Init the source package +dnl +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_PACKAGE_INIT], +[ + AM_CONFIG_HEADER(src/config.hpp) + + AC_SUBST(VERSION) + + ISODATE=`date +%Y-%m-%d` + AC_SUBST([ISODATE]) + PACKAGE_NAME="$1" + AC_SUBST([PACKAGE_NAME]) + AC_DEFINE_UNQUOTED([PACKAGE_NAME], ["$PACKAGE_NAME"]) +]) + +dnl --------------------------------------------------------------------------- +dnl MY_INIT_CPP_PROGS() +dnl +dnl Init programs for C++ sources +dnl +dnl --------------------------------------------------------------------------- + +dnl AC_DEFUN([MY_INIT_CPP_PROGS], +dnl [ +dnl dnl Checks for programs. +dnl AC_PROG_INSTALL +dnl #AC_PROG_CC +dnl AC_PROG_CXX +dnl AC_PROG_CPP +dnl AC_PROG_LN_S +dnl ]) + +dnl --------------------------------------------------------------------------- +dnl MY_ECHO_BUILD_INFO() +dnl +dnl Init programs for C++ sources +dnl +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_ECHO_BUILD_INFO], +[ + # Autre + INFO_LINE="####################################" + + # Recap + MSG="The package is now configured. You should type make !" + + MSG="$MSG\n DEBUG MODE : " + if test "$DEBUG" = 1; then + debugModeStr="enable" + else + debugModeStr="disable" + fi + MSG="${MSG}${debugModeStr}." + + + MSG="$MSG\n TARGET PLATFORM : " + MSG="${MSG}${MY_TARGET_OS}." + MSG="$MSG\n INSTALLATION PREFIX : " + MSG="${MSG}${prefix}." + + echo -e "\n${INFO_LINE}\n\n${MSG}\n\n${INFO_LINE}\n" +]) + +dnl --------------------------------------------------------------------------- +dnl MY_INIT_LIBTOOL +dnl +dnl Init libtool +dnl +dnl --------------------------------------------------------------------------- + +dnl AC_DEFUN([MY_INIT_LIBTOOL], +dnl [ +dnl dnl To compile libs +dnl AM_PROG_LIBTOOL dnl indique que l'on utilise Libtool pour la compilation +dnl AC_PROG_MAKE_SET dnl indique que l'on doit disposer de make qui est utilisé par Libtool +dnl ]) + +dnl --------------------------------------------------------------------------- +dnl MY_INIT_DEBUG_SWITCH([Force debug]) +dnl +dnl Allow the user tu build the program in debug mode ; doesn't edit any cpp options ! +dnl +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_INIT_DEBUG_SWITCH], +[ + dnl debug + DEBUG=0 + AC_ARG_ENABLE([debug], [ --enable-debug Chose if the package should be built in debug mode], [DEBUG=1]) + + dnl Force debug + if test "$1" = "true" || test "$1" = "1"; then + DEBUG=1 + fi + + AC_MSG_CHECKING([if debug is enabled]) + + AH_TEMPLATE([DEBUG], [Define is a debug version sould be build]) + AM_CONDITIONAL([IS_DEBUG], [test "$DEBUG" -eq 1]) + AC_DEFINE_UNQUOTED([DEBUG], [$DEBUG]) + + if test "$DEBUG" -eq 1; then + AC_MSG_RESULT([yes]) + else + AC_MSG_RESULT([no]) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl MY_INIT_BUILD_OPTION(Debug option, no debug option) +dnl +dnl Init CXXFLAGS and CPPFLAGS +dnl +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_INIT_BUILD_OPTION], +[ + dnl Basic + warningOptions=' -Wall -Wclobbered -Wempty-body -Wmissing-field-initializers -Wsign-compare -Wtype-limits -Wuninitialized' # -Wignored-qualifiers + if test "$IS_MAC" = 'true'; then + warningOptions=' -Wall' + fi + + if test "$DEBUG" -eq 1; then + CXXFLAGS="$1 $warningOptions" + else + CXXFLAGS="$2 $warningOptions" + fi + + CPPFLAGS=${CXXFLAGS} + AC_SUBST([CXXFLAGS]) + AC_SUBST([CPPFLAGS]) + + dnl Extra LDFLAGS (for win32) + EXTRA_LDFLAGS='' + + if test "$IS_MINGW" = "true"; then + true + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -static-libgcc -static-libstdc++" dnl Static stdc++ + + if test "$DEBUG" -eq 0; then + EXTRA_LDFLAGS="$EXTRA_LDFLAGS -mwindows" + dnl -mwindows : Pour cacher la console sous windows. + fi + fi + + AC_SUBST([EXTRA_LDFLAGS]) + + dnl EXTRA_WINDRES_ARG + EXTRA_WINDRES_ARG="$EXTRA_WINDRES_ARG" + AC_SUBST([EXTRA_WINDRES_ARG]) +]) + +dnl --------------------------------------------------------------------------- +dnl MY_INIT_DATA_PATH +dnl +dnl Define data path for unix / win32 depending on the current target system +dnl +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_INIT_DATA_PATH], +[ + if test "$IS_MINGW" = true; then + mypkgdatadir="$prefix" + bindir="$prefix" + AC_SUBST([mypkgdatadir]) + AC_SUBST([prefix]) + else + mypkgdatadir="$datadir/$PACKAGE" + AC_SUBST([mypkgdatadir]) + fi +]) + +dnl --------------------------------------------------------------------------- +dnl AM_CHECK_LIB_HEADER(LIBNAME-MAJ, NAME, HEADERS, LIBS, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND]]) +dnl +dnl My lib & header check +dnl +dnl Example use: +dnl AM_CHECK_LIB_HEADER([LUA], [lua], [lua.hpp], [lua5.1], [], [Error]) +dnl --------------------------------------------------------------------------- + +AC_DEFUN([AM_CHECK_LIB_HEADER], +[ + declare $1_CFLAGS='' + declare $1_LIBS='' + + dnl Headers + dnl We try with check-headers + headerOk=1 + for headerName in $3; do + AC_CHECK_HEADERS([$headerName],[],[headerOk=0]) + done + + dnl Libs + backLibs="$LIBS" + + libsOk=1 + libsList='' + + isLastField=0 + fieldId=1 + while test "$isLastField" -eq 0; do + toTestLibsList='' + + if ! echo "$4" | grep '@' > '/dev/null'; then + dnl Only on field + isLastField=1 + toTestLibsList="$4" + else + toTestLibsList="$(echo $4 | cut -d'@' -f$fieldId)" + fi + + if test -n "$toTestLibsList"; then + libsList='' + libsOk=1 + + for libName in $toTestLibsList; do + AC_CHECK_LIB([$libName], [main], [], [libsOk=0]) + libsList="$libsList -l$libName" + done + else + isLastField=1 dnl Fin + libsList='' + + if test -n "$4"; then + dnl Liste se finie par "|" => pas ok ! + libsOk=0 + else + dnl Liste vide => ok ! + libsOk=1 + fi + fi + + if test "$libsOk" -eq 1; then + dnl On a trouvé une liste qui marche => on arrète ! + isLastField=1 + fi + + let fieldId=fieldId+1 + done + + AC_SUBST([LIBS], [$backLibs]) + + dnl pkg-config + if test "$headerOk" -eq 0 || test "$libsOk" -eq 0; then + if test -n "$2"; then + dnl We try with pkg-config + PKG_PROG_PKG_CONFIG + PKG_CHECK_MODULES([$1], [$2], [headerOk=1; libsOk=1], []) + + if test "$headerOk" -eq 0 || test "$libsOk" -eq 0; then + dnl Still not found + $6 + true # We need a command if $6 is empty + else + dnl All si Ok + $5 + true # We need a command if $5 is empty + fi + else + dnl Not found + $6 + true # We need a command if $6 is empty + fi + else + dnl All is Ok + AC_SUBST([$1_LIBS], [$libsList]) + AC_SUBST([$1_CFLAGS], ['']) + $5 + fi + + dnl All lib options + LIBS_ALL="$LIBS_ALL ${$1_LIBS}" + AC_SUBST([LIBS_ALL], [$LIBS_ALL]) + CFLAGS_ALL="$CFLAGS_ALL ${$1_CFLAGS}" + AC_SUBST([CFLAGS_ALL], [$CFLAGS_ALL]) +]) + +dnl --------------------------------------------------------------------------- +dnl CHECK_FRAMEWORK_LIST(libNameMaj, framework list) +dnl +dnl Check for windows ressources compiler (windres) +dnl +dnl Example use: +dnl CHECK_FRAMEWORK_LIST([SFML], [SFML sfml-graphics sfml-window sfml-system sfml-audio]) +dnl --------------------------------------------------------------------------- + +AC_DEFUN([CHECK_FRAMEWORK_LIST], +[ + frameworkPathList="/System/Library/Frameworks /Library/Frameworks" + + declare $1_CFLAGS='' + declare $1_LIBS='' + + frameworksOk=1 + frameworksList='' + + isLastField=0 + fieldId=1 + while test "$isLastField" -eq 0; do + toTestframeworksList='' + + if ! echo "$2" | grep '@' > '/dev/null'; then + dnl Only on field + isLastField=1 + toTestframeworksList="$2" + else + toTestframeworksList="$(echo $2 | cut -d'@' -f$fieldId)" + fi + + if test -n "$toTestframeworksList"; then + frameworksList='' + frameworksOk=1 + + for frameworkName in $toTestframeworksList; do + AC_MSG_CHECKING([for framework $frameworkName]) + isThisFrameworkOk=0 + + for frameworkPath in $frameworkPathList; do + dir="$frameworkPath/$frameworkName.framework/Versions/Current" + if test -d "$dir"; then + isThisFrameworkOk=1 + + frameworksList="$frameworksList -framework $frameworkName" + + AC_MSG_RESULT([yes : $dir]) + break + fi + done + + AC_MSG_RESULT([no]) + done + else + isLastField=1 dnl Fin + frameworksList='' + + if test -n "$2"; then + dnl Liste se finie par "|" => pas ok ! + frameworksOk=0 + else + dnl Liste vide => ok ! + frameworksOk=1 + fi + fi + + if test "$frameworksOk" -eq 1; then + dnl On a trouvé une liste qui marche => on arrète ! + isLastField=1 + fi + + let fieldId=fieldId+1 + done + + dnl Save + if test "$frameworksOk" -eq 1; then + AC_SUBST([$1_LIBS], [$frameworksList]) + AC_SUBST([$1_CFLAGS], [$frameworksList]) + + dnl All lib options + LIBS_ALL="$LIBS_ALL ${$1_LIBS}" + AC_SUBST([LIBS_ALL], [$LIBS_ALL]) + CFLAGS_ALL="$CFLAGS_ALL ${$1_CFLAGS}" + AC_SUBST([CFLAGS_ALL], [$CFLAGS_ALL]) + else + AC_MSG_ERROR([ /!\ This programme requires the folowing frameworks : $2 !]) + fi +]) + + +dnl --------------------------------------------------------------------------- +dnl AM_FIND_WINDRES() +dnl +dnl Check for windows ressources compiler (windres) +dnl +dnl Example use: +dnl AM_FIND_WINDRES() +dnl --------------------------------------------------------------------------- + +AC_DEFUN([AM_FIND_WINDRES], +[ + WINDRES='' + + if test "$IS_MINGW" = 'true'; then + AC_MSG_CHECKING([for windres]) + for name in 'windres' 'i586-pc-mingw32msvc'; do + if which "$name" > /dev/null; then + WINDRES="$name" + AM_CONDITIONAL([IS_MINGW], [true]) + AC_MSG_RESULT(["yes : $WINDRES"]) + break + fi + done + + if test -z "$WINDRES"; then + AC_MSG_RESULT(["no"]) + fi + fi + + AM_CONDITIONAL([HAVE_WINDRES], [test -n "$WINDRES"]) + AC_SUBST([WINDRES]) +]) + +dnl --------------------------------------------------------------------------- +dnl MY_DETECT_OS() +dnl +dnl Check for the target operation system +dnl +dnl Set: IS_MINGW (true or false) +dnl Set: IS_LINUX (true or false) +dnl Set: IS_MAC (true or false) +dnl Set: MY_TARGET_OS (mingw, linux or mac) +dnl Example use: +dnl AM_FIND_WINDRES() +dnl --------------------------------------------------------------------------- + +AC_DEFUN([MY_DETECT_OS], +[ + if echo $host | grep "linux" > /dev/null; then + MY_TARGET_OS="linux" + IS_MINGW="false" + IS_LINUX="true" + IS_MAC="false" + elif echo $host | grep "mingw" > /dev/null; then + MY_TARGET_OS="mingw" + IS_MINGW="true" + IS_LINUX="false" + IS_MAC="false" + elif echo $host | grep "darwin" > /dev/null; then + MY_TARGET_OS="darwin" + IS_MINGW="false" + IS_LINUX="false" + IS_MAC="true" + else + MY_TARGET_OS="unknown" + IS_MINGW="false" + IS_LINUX="false" + IS_MAC="false" + + AC_MSG_ERROR([ /!\ Unknown OS !]) + fi + + AC_SUBST([MY_TARGET_OS]) + AM_CONDITIONAL([IS_MINGW], [$IS_MINGW]) + AM_CONDITIONAL([IS_LINUX], [$IS_LINUX]) + AM_CONDITIONAL([IS_MAC], [$IS_MAC]) +]) + +dnl --------------------------------------------------------------------------- +dnl Macros for wxWidgets detection. Typically used in configure.in as: +dnl +dnl AC_ARG_ENABLE(...) +dnl AC_ARG_WITH(...) +dnl ... +dnl AM_OPTIONS_WXCONFIG +dnl ... +dnl ... +dnl AM_PATH_WXCONFIG(2.6.0, wxWin=1) +dnl if test "$wxWin" != 1; then +dnl AC_MSG_ERROR([ +dnl wxWidgets must be installed on your system +dnl but wx-config script couldn't be found. +dnl +dnl Please check that wx-config is in path, the directory +dnl where wxWidgets libraries are installed (returned by +dnl 'wx-config --libs' command) is in LD_LIBRARY_PATH or +dnl equivalent variable and wxWidgets version is 2.3.4 or above. +dnl ]) +dnl fi +dnl CPPFLAGS="$CPPFLAGS $WX_CPPFLAGS" +dnl CXXFLAGS="$CXXFLAGS $WX_CXXFLAGS_ONLY" +dnl CFLAGS="$CFLAGS $WX_CFLAGS_ONLY" +dnl +dnl LIBS="$LIBS $WX_LIBS" +dnl --------------------------------------------------------------------------- + +dnl --------------------------------------------------------------------------- +dnl AM_OPTIONS_WXCONFIG +dnl +dnl adds support for --wx-prefix, --wx-exec-prefix, --with-wxdir and +dnl --wx-config command line options +dnl --------------------------------------------------------------------------- + +AC_DEFUN([AM_OPTIONS_WXCONFIG], +[ + AC_ARG_WITH(wxdir, + [ --with-wxdir=PATH Use uninstalled version of wxWidgets in PATH], + [ wx_config_name="$withval/wx-config" + wx_config_args="--inplace"]) + AC_ARG_WITH(wx-config, + [ --with-wx-config=CONFIG wx-config script to use (optional)], + wx_config_name="$withval" ) + AC_ARG_WITH(wx-prefix, + [ --with-wx-prefix=PREFIX Prefix where wxWidgets is installed (optional)], + wx_config_prefix="$withval", wx_config_prefix="") + AC_ARG_WITH(wx-exec-prefix, + [ --with-wx-exec-prefix=PREFIX + Exec prefix where wxWidgets is installed (optional)], + wx_config_exec_prefix="$withval", wx_config_exec_prefix="") +]) + +dnl Helper macro for checking if wx version is at least $1.$2.$3, set's +dnl wx_ver_ok=yes if it is: +AC_DEFUN([_WX_PRIVATE_CHECK_VERSION], +[ + wx_ver_ok="" + if test "x$WX_VERSION" != x ; then + if test $wx_config_major_version -gt $1; then + wx_ver_ok=yes + else + if test $wx_config_major_version -eq $1; then + if test $wx_config_minor_version -gt $2; then + wx_ver_ok=yes + else + if test $wx_config_minor_version -eq $2; then + if test $wx_config_micro_version -ge $3; then + wx_ver_ok=yes + fi + fi + fi + fi + fi + fi +]) + +dnl --------------------------------------------------------------------------- +dnl AM_PATH_WXCONFIG(VERSION, [ACTION-IF-FOUND [, ACTION-IF-NOT-FOUND +dnl [, WX-LIBS [, ADDITIONAL-WX-CONFIG-FLAGS]]]]) +dnl +dnl Test for wxWidgets, and define WX_C*FLAGS, WX_LIBS and WX_LIBS_STATIC +dnl (the latter is for static linking against wxWidgets). Set WX_CONFIG_NAME +dnl environment variable to override the default name of the wx-config script +dnl to use. Set WX_CONFIG_PATH to specify the full path to wx-config - in this +dnl case the macro won't even waste time on tests for its existence. +dnl +dnl Optional WX-LIBS argument contains comma- or space-separated list of +dnl wxWidgets libraries to link against (it may include contrib libraries). If +dnl it is not specified then WX_LIBS and WX_LIBS_STATIC will contain flags to +dnl link with all of the core wxWidgets libraries. +dnl +dnl Optional ADDITIONAL-WX-CONFIG-FLAGS argument is appended to wx-config +dnl invocation command in present. It can be used to fine-tune lookup of +dnl best wxWidgets build available. +dnl +dnl Example use: +dnl AM_PATH_WXCONFIG([2.6.0], [wxWin=1], [wxWin=0], [html,core,net] +dnl [--unicode --debug]) +dnl --------------------------------------------------------------------------- + +dnl +dnl Get the cflags and libraries from the wx-config script +dnl +AC_DEFUN([AM_PATH_WXCONFIG], +[ + dnl do we have wx-config name: it can be wx-config or wxd-config or ... + if test x${WX_CONFIG_NAME+set} != xset ; then + WX_CONFIG_NAME=wx-config + fi + + if test "x$wx_config_name" != x ; then + WX_CONFIG_NAME="$wx_config_name" + fi + + dnl deal with optional prefixes + if test x$wx_config_exec_prefix != x ; then + wx_config_args="$wx_config_args --exec-prefix=$wx_config_exec_prefix" + WX_LOOKUP_PATH="$wx_config_exec_prefix/bin" + fi + if test x$wx_config_prefix != x ; then + wx_config_args="$wx_config_args --prefix=$wx_config_prefix" + WX_LOOKUP_PATH="$WX_LOOKUP_PATH:$wx_config_prefix/bin" + fi + if test "$cross_compiling" = "yes"; then + wx_config_args="$wx_config_args --host=$host_alias" + fi + + dnl don't search the PATH if WX_CONFIG_NAME is absolute filename + if test -x "$WX_CONFIG_NAME" ; then + AC_MSG_CHECKING(for wx-config) + WX_CONFIG_PATH="$WX_CONFIG_NAME" + AC_MSG_RESULT($WX_CONFIG_PATH) + else + AC_PATH_PROG(WX_CONFIG_PATH, $WX_CONFIG_NAME, no, "$WX_LOOKUP_PATH:$PATH") + fi + + if test "$WX_CONFIG_PATH" != "no" ; then + WX_VERSION="" + + min_wx_version=ifelse([$1], ,2.2.1,$1) + if test -z "$5" ; then + AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version]) + else + AC_MSG_CHECKING([for wxWidgets version >= $min_wx_version ($5)]) + fi + + WX_CONFIG_WITH_ARGS="$WX_CONFIG_PATH $wx_config_args $5 $4" + + WX_VERSION=`$WX_CONFIG_WITH_ARGS --version 2>/dev/null` + wx_config_major_version=`echo $WX_VERSION | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + wx_config_minor_version=`echo $WX_VERSION | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + wx_config_micro_version=`echo $WX_VERSION | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + + wx_requested_major_version=`echo $min_wx_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\1/'` + wx_requested_minor_version=`echo $min_wx_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\2/'` + wx_requested_micro_version=`echo $min_wx_version | \ + sed 's/\([[0-9]]*\).\([[0-9]]*\).\([[0-9]]*\)/\3/'` + + _WX_PRIVATE_CHECK_VERSION([$wx_requested_major_version], + [$wx_requested_minor_version], + [$wx_requested_micro_version]) + + if test -n "$wx_ver_ok"; then + + AC_MSG_RESULT(yes (version $WX_VERSION)) + WX_LIBS=`$WX_CONFIG_WITH_ARGS --libs` + + dnl is this even still appropriate? --static is a real option now + dnl and WX_CONFIG_WITH_ARGS is likely to contain it if that is + dnl what the user actually wants, making this redundant at best. + dnl For now keep it in case anyone actually used it in the past. + AC_MSG_CHECKING([for wxWidgets static library]) + WX_LIBS_STATIC=`$WX_CONFIG_WITH_ARGS --static --libs 2>/dev/null` + if test "x$WX_LIBS_STATIC" = "x"; then + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(yes) + fi + + dnl starting with version 2.2.6 wx-config has --cppflags argument + wx_has_cppflags="" + if test $wx_config_major_version -gt 2; then + wx_has_cppflags=yes + else + if test $wx_config_major_version -eq 2; then + if test $wx_config_minor_version -gt 2; then + wx_has_cppflags=yes + else + if test $wx_config_minor_version -eq 2; then + if test $wx_config_micro_version -ge 6; then + wx_has_cppflags=yes + fi + fi + fi + fi + fi + + dnl starting with version 2.7.0 wx-config has --rescomp option + wx_has_rescomp="" + if test $wx_config_major_version -gt 2; then + wx_has_rescomp=yes + else + if test $wx_config_major_version -eq 2; then + if test $wx_config_minor_version -ge 7; then + wx_has_rescomp=yes + fi + fi + fi + if test "x$wx_has_rescomp" = x ; then + dnl cannot give any useful info for resource compiler + WX_RESCOMP= + else + WX_RESCOMP=`$WX_CONFIG_WITH_ARGS --rescomp` + fi + + if test "x$wx_has_cppflags" = x ; then + dnl no choice but to define all flags like CFLAGS + WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags` + WX_CPPFLAGS=$WX_CFLAGS + WX_CXXFLAGS=$WX_CFLAGS + + WX_CFLAGS_ONLY=$WX_CFLAGS + WX_CXXFLAGS_ONLY=$WX_CFLAGS + else + dnl we have CPPFLAGS included in CFLAGS included in CXXFLAGS + WX_CPPFLAGS=`$WX_CONFIG_WITH_ARGS --cppflags` + WX_CXXFLAGS=`$WX_CONFIG_WITH_ARGS --cxxflags` + WX_CFLAGS=`$WX_CONFIG_WITH_ARGS --cflags` + + WX_CFLAGS_ONLY=`echo $WX_CFLAGS | sed "s@^$WX_CPPFLAGS *@@"` + WX_CXXFLAGS_ONLY=`echo $WX_CXXFLAGS | sed "s@^$WX_CFLAGS *@@"` + fi + + ifelse([$2], , :, [$2]) + + else + + if test "x$WX_VERSION" = x; then + dnl no wx-config at all + AC_MSG_RESULT(no) + else + AC_MSG_RESULT(no (version $WX_VERSION is not new enough)) + fi + + WX_CFLAGS="" + WX_CPPFLAGS="" + WX_CXXFLAGS="" + WX_LIBS="" + WX_LIBS_STATIC="" + WX_RESCOMP="" + ifelse([$3], , :, [$3]) + + fi + else + + WX_CFLAGS="" + WX_CPPFLAGS="" + WX_CXXFLAGS="" + WX_LIBS="" + WX_LIBS_STATIC="" + WX_RESCOMP="" + + ifelse([$3], , :, [$3]) + + fi + + AC_SUBST(WX_CPPFLAGS) + AC_SUBST(WX_CFLAGS) + AC_SUBST(WX_CXXFLAGS) + AC_SUBST(WX_CFLAGS_ONLY) + AC_SUBST(WX_CXXFLAGS_ONLY) + AC_SUBST(WX_LIBS) + AC_SUBST(WX_LIBS_STATIC) + AC_SUBST(WX_VERSION) + AC_SUBST(WX_RESCOMP) +]) diff --git a/configure.ac b/configure.ac new file mode 100644 index 0000000..a1d757b --- /dev/null +++ b/configure.ac @@ -0,0 +1,44 @@ +AC_INIT(woeusb, @@WOEUSB_VERSION@@) +AC_CONFIG_SRCDIR([src]) +AM_INIT_AUTOMAKE([foreign]) +AC_CONFIG_MACRO_DIR([m4]) + +MY_PACKAGE_INIT([WoeUSB]) + +dnl Checks for programs (must be here). +AC_LANG([C++]) +AC_PROG_INSTALL +AC_PROG_CXX +AC_PROG_CPP +AC_PROG_LN_S + +dnl To compile libs +LT_INIT +AM_PROG_LIBTOOL dnl indique que l'on utilise Libtool pour la compilation +AC_PROG_MAKE_SET dnl indique que l'on doit disposer de make qui est utilisé par Libtool + +MY_DETECT_OS dnl Detect OS +MY_INIT_DATA_PATH dnl Define data path for unix / win32 depending on the current target system +AM_FIND_WINDRES dnl Find windres is needed + +MY_INIT_DEBUG_SWITCH([false]) dnl Allow the user tu build the program in debug mode ; doesn't edit any cpp options ; true to force debug + +dnl Libs +MY_FIND_STDCPP +MY_FIND_WXWIDGETS + +AC_OUTPUT([Makefile + + src/Makefile + src/data/Makefile + src/linux-menu/Makefile + src/win32/Makefile + src/locale/Makefile + src/locale/fr/Makefile + src/locale/zh_TW/Makefile + src/locale/fr/LC_MESSAGES/Makefile + src/locale/zh_TW/LC_MESSAGES/Makefile + debian/Makefile + innoSetup/Makefile]) + +MY_ECHO_BUILD_INFO # Recap diff --git a/debian/Makefile.am b/debian/Makefile.am new file mode 100644 index 0000000..612b18f --- /dev/null +++ b/debian/Makefile.am @@ -0,0 +1,8 @@ +EXTRA_DIST = \ + $(srcdir)/changelog\ + $(srcdir)/compat\ + $(srcdir)/control\ + $(srcdir)/copyright\ + $(srcdir)/dirs\ + $(srcdir)/docs\ + $(srcdir)/rules diff --git a/debian/changelog b/debian/changelog new file mode 100644 index 0000000..98fd9cc --- /dev/null +++ b/debian/changelog @@ -0,0 +1,7 @@ +woeusb (@@WOEUSB_VERSION@@) unstable; urgency=low + + * This is a fake changelog for packaging purpose, for the actual changelog pl- + ease refer Commits · slacka/WoeUSB + + + -- 林博仁 (Buo-Ren, Lin) Wed, 15 Nov 2017 09:04:00 +0100 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..ec63514 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +9 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..32c301a --- /dev/null +++ b/debian/control @@ -0,0 +1,42 @@ +Source: woeusb +Homepage: https://github.com/slacka/WoeUSB +Section: utils +Priority: optional +Maintainer: 林博仁 (Buo-Ren, Lin) +Build-Depends: debhelper (>= 9), + dh-autoreconf, + git-core, + libwxgtk2.8-dev | libwxgtk3.0-dev, + realpath | coreutils (>= 8.23) +Standards-Version: 4.1.1 +Vcs-Browser: https://github.com/slacka/WoeUSB/ +Vcs-Git: https://github.com/slacka/WoeUSB.git + +Package: woeusb +Architecture: any +Depends: bash (>=4.3), + dosfstools, + gettext, + grub2-common, + grub-pc-bin, + ntfsprogs | ntfs-3g, + p7zip-full, + parted, + policykit-1, + realpath | coreutils (>= 8.23), + wget, + ${misc:Depends}, + ${shlibs:Depends} +Description: Bootable Windows installation/PE USB storage creator + This package contains two programs: + . + - woeusb: An command-line utility that enables you to create your own bootable + Windows installation USB storage device from an existing Windows Installation + DVD or its ISO image. + - woeusbgui: A woeusb's GUI wrapper program based on WxWidgets GUI library. + . + Supported images: Windows Vista~10+ installation media for any language and + edition(Home/Professional...) and Windows PE-based media. + . + WoeUSB is a fork of Colin GILLE / congelli501's WinUSB software. + http://en.congelli.eu/prog_info_winusb.html diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..719ec40 --- /dev/null +++ b/debian/copyright @@ -0,0 +1,20 @@ +Format: https://www.debian.org/doc/packaging-manuals/copyright-format/1.0/ +Upstream-Name: WoeUSB +Upstream-Contact: WoeUSB Issue Tracker +Source: https://github.com/slacka/WoeUSB +License: GPL-3.0+ + +Files: * +Copyright: Copyright 2013 Colin GILLE / congelli501 + Copyright 2017 slacka et. al. +License: GPL-3.0+ + +License: GPL-3.0+ + This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. + . + This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. + . + You should have received a copy of the GNU General Public License along with this program. If not, see . + . + On Debian systems, the full text of the GNU General Public License version 3 can be found in the file + `/usr/share/common-licenses/GPL-3'. diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..599294c --- /dev/null +++ b/debian/docs @@ -0,0 +1,3 @@ +NEWS +README.md +README.upstream diff --git a/debian/rules b/debian/rules new file mode 100644 index 0000000..2452ed7 --- /dev/null +++ b/debian/rules @@ -0,0 +1,8 @@ +#!/usr/bin/make -f +export DH_VERBOSE = 1 +export DEB_BUILD_MAINT_OPTIONS = hardening=+all +export DEB_CFLAGS_MAINT_APPEND = -Wall -pedantic +export DEB_LDFLAGS_MAINT_APPEND = -Wl,--as-needed + +%: + dh $@ --with autoreconf diff --git a/debian/rules.old b/debian/rules.old new file mode 100644 index 0000000..9820747 --- /dev/null +++ b/debian/rules.old @@ -0,0 +1,104 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + + +# These are used for cross-compiling and for saving the configure script +# from having to guess our platform (since we know it already) +DEB_HOST_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_HOST_GNU_TYPE) +DEB_BUILD_GNU_TYPE ?= $(shell dpkg-architecture -qDEB_BUILD_GNU_TYPE) +ifneq ($(DEB_HOST_GNU_TYPE),$(DEB_BUILD_GNU_TYPE)) +CROSS= --build $(DEB_BUILD_GNU_TYPE) --host $(DEB_HOST_GNU_TYPE) +else +CROSS= --build $(DEB_BUILD_GNU_TYPE) +endif + + + +config.status: configure + dh_testdir + # Add here commands to configure the package. +ifneq "$(wildcard /usr/share/misc/config.sub)" "" + cp -f /usr/share/misc/config.sub config.sub +endif +ifneq "$(wildcard /usr/share/misc/config.guess)" "" + cp -f /usr/share/misc/config.guess config.guess +endif + ./configure $(CROSS) --prefix=/usr --mandir=\$${prefix}/share/man --infodir=\$${prefix}/share/info CFLAGS="$(CFLAGS)" LDFLAGS="-Wl,-z,defs" + + +build: build-stamp + +build-stamp: config.status + dh_testdir + + # Add here commands to compile the package. + $(MAKE) + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp + + # Add here commands to clean up after the build process. + [ ! -f Makefile ] || $(MAKE) distclean + rm -f config.sub config.guess + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_prep + dh_installdirs + + # Add here commands to install the package into debian/woeusb. + $(MAKE) DESTDIR="$(CURDIR)/debian/woeusb" install + + +# Build architecture-independent files here. +binary-indep: install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: install + dh_testdir + dh_testroot + dh_installchangelogs ChangeLog + dh_installdocs + dh_installexamples +# dh_install +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip + dh_compress + dh_fixperms +# dh_perl +# dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install diff --git a/debian/source/format b/debian/source/format new file mode 100644 index 0000000..89ae9db --- /dev/null +++ b/debian/source/format @@ -0,0 +1 @@ +3.0 (native) diff --git a/dev/README.markdown b/dev/README.markdown new file mode 100644 index 0000000..f519af6 --- /dev/null +++ b/dev/README.markdown @@ -0,0 +1,2 @@ +# dev: Stuffs That Are Specific to WoeUSB's Development Only +These files should not be included into software build. diff --git a/dev/woeusb-screenshot.png b/dev/woeusb-screenshot.png new file mode 100644 index 0000000..b97b537 Binary files /dev/null and b/dev/woeusb-screenshot.png differ diff --git a/dev/woeusb-screenshot.thumbnail.png b/dev/woeusb-screenshot.thumbnail.png new file mode 100644 index 0000000..a3c183c Binary files /dev/null and b/dev/woeusb-screenshot.thumbnail.png differ diff --git a/dev/woeusbgui-screenshot.png b/dev/woeusbgui-screenshot.png new file mode 100644 index 0000000..3091ad7 Binary files /dev/null and b/dev/woeusbgui-screenshot.png differ diff --git a/dev/woeusbgui-screenshot.thumbnail.png b/dev/woeusbgui-screenshot.thumbnail.png new file mode 100644 index 0000000..a3d8815 Binary files /dev/null and b/dev/woeusbgui-screenshot.thumbnail.png differ diff --git a/doc/conf.py b/doc/conf.py new file mode 100644 index 0000000..891f471 --- /dev/null +++ b/doc/conf.py @@ -0,0 +1,168 @@ +# -*- coding: utf-8 -*- +# +# Configuration file for the Sphinx documentation builder. +# +# This file does only contain a selection of the most common options. For a +# full list see the documentation: +# http://www.sphinx-doc.org/en/master/config + +# -- Path setup -------------------------------------------------------------- + +# If extensions (or modules to document with autodoc) are in another directory, +# add these directories to sys.path here. If the directory is relative to the +# documentation root, use os.path.abspath to make it absolute, like shown here. +# +import os +import sys +sys.path.insert(0, os.path.abspath('../src')) + + +# -- Project information ----------------------------------------------------- + +project = 'WoeUSB' +copyright = '2018, congelli501, slacka and WaxyMocha et. al.' +author = 'congelli501, slacka and WaxyMocha et. al.' + +# The short X.Y version +version = '' +# The full version, including alpha/beta/rc tags +release = '1.0.0' + + +# -- General configuration --------------------------------------------------- + +# If your documentation needs a minimal Sphinx version, state it here. +# +# needs_sphinx = '1.0' + +# Add any Sphinx extension module names here, as strings. They can be +# extensions coming with Sphinx (named 'sphinx.ext.*') or your custom +# ones. +extensions = [ + 'sphinx.ext.autodoc', + 'sphinx.ext.todo', +] + +# Add any paths that contain templates here, relative to this directory. +templates_path = ['_templates'] + +# The suffix(es) of source filenames. +# You can specify multiple suffix as a list of string: +# +# source_suffix = ['.rst', '.md'] +source_suffix = '.rst' + +# The master toctree document. +master_doc = 'index' + +# The language for content autogenerated by Sphinx. Refer to documentation +# for a list of supported languages. +# +# This is also used if you do content translation via gettext catalogs. +# Usually you set "language" from the command line for these cases. +language = None + +# List of patterns, relative to source directory, that match files and +# directories to ignore when looking for source files. +# This pattern also affects html_static_path and html_extra_path . +exclude_patterns = ['_build', 'Thumbs.db', '.DS_Store'] + +# The name of the Pygments (syntax highlighting) style to use. +pygments_style = 'sphinx' + + +# -- Options for HTML output ------------------------------------------------- + +# The theme to use for HTML and HTML Help pages. See the documentation for +# a list of builtin themes. +# +html_theme = 'alabaster' + +# Theme options are theme-specific and customize the look and feel of a theme +# further. For a list of options available for each theme, see the +# documentation. +# +# html_theme_options = {} + +# Add any paths that contain custom static files (such as style sheets) here, +# relative to this directory. They are copied after the builtin static files, +# so a file named "default.css" will overwrite the builtin "default.css". +html_static_path = ['_static'] + +# Custom sidebar templates, must be a dictionary that maps document names +# to template names. +# +# The default sidebars (for documents that don't match any pattern) are +# defined by theme itself. Builtin themes are using these templates by +# default: ``['localtoc.html', 'relations.html', 'sourcelink.html', +# 'searchbox.html']``. +# +# html_sidebars = {} + + +# -- Options for HTMLHelp output --------------------------------------------- + +# Output file base name for HTML help builder. +htmlhelp_basename = 'WoeUSBdoc' + + +# -- Options for LaTeX output ------------------------------------------------ + +latex_elements = { + # The paper size ('letterpaper' or 'a4paper'). + # + # 'papersize': 'letterpaper', + + # The font size ('10pt', '11pt' or '12pt'). + # + # 'pointsize': '10pt', + + # Additional stuff for the LaTeX preamble. + # + # 'preamble': '', + + # Latex figure (float) alignment + # + # 'figure_align': 'htbp', +} + +# Grouping the document tree into LaTeX files. List of tuples +# (source start file, target name, title, +# author, documentclass [howto, manual, or own class]). +latex_documents = [ + (master_doc, 'WoeUSB.tex', 'WoeUSB Documentation', + 'congelli501, slacka and WaxyMocha et. al.', 'manual'), +] + + +# -- Options for manual page output ------------------------------------------ + +# One entry per manual page. List of tuples +# (source start file, name, description, authors, manual section). +man_pages = [ + (master_doc, 'woeusb', 'WoeUSB Documentation', + [author], 1) +] + + +# -- Options for Texinfo output ---------------------------------------------- + +# Grouping the document tree into Texinfo files. List of tuples +# (source start file, target name, title, author, +# dir menu entry, description, category) +texinfo_documents = [ + (master_doc, 'WoeUSB', 'WoeUSB Documentation', + author, 'WoeUSB', 'One line description of project.', + 'Miscellaneous'), +] + + +# -- Extension configuration ------------------------------------------------- + +# -- Options for todo extension ---------------------------------------------- + +# If true, `todo` and `todoList` produce output, else they produce nothing. +todo_include_todos = True + +html_logo = "../src/data/woeusb-logo.png" +html_favicon = "../src/data/icon.png" \ No newline at end of file diff --git a/doc/gui.rst b/doc/gui.rst new file mode 100644 index 0000000..8d258fd --- /dev/null +++ b/doc/gui.rst @@ -0,0 +1,6 @@ +GUI for WoeUSB +************************** + +.. automodule:: gui + :members: + :undoc-members: \ No newline at end of file diff --git a/doc/index.rst b/doc/index.rst new file mode 100644 index 0000000..d0b2c1b --- /dev/null +++ b/doc/index.rst @@ -0,0 +1,21 @@ +.. WoeUSB documentation master file, created by + sphinx-quickstart on Sun Jun 3 09:37:45 2018. + You can adapt this file completely to your liking, but it should at least + contain the root `toctree` directive. + +Welcome to WoeUSB's documentation! +================================== + +.. toctree:: + :caption: Contents: + + woeusb.rst + gui.rst + + +Indices and tables +================== + +* :ref:`genindex` +* :ref:`modindex` +* :ref:`search` diff --git a/doc/utils.rst b/doc/utils.rst new file mode 100644 index 0000000..2aa489a --- /dev/null +++ b/doc/utils.rst @@ -0,0 +1,6 @@ +utils.py +************************** + +.. automodule:: utils + :members: + :undoc-members: \ No newline at end of file diff --git a/doc/woeusb.rst b/doc/woeusb.rst new file mode 100644 index 0000000..21f2ed0 --- /dev/null +++ b/doc/woeusb.rst @@ -0,0 +1,12 @@ +WoeUSB +************************** +.. toctree:: + :maxdepth: 2 + :caption: Imported modules: + + utils.rst + workaround.rst + +.. automodule:: woeusb + :members: + :undoc-members: diff --git a/doc/workaround.rst b/doc/workaround.rst new file mode 100644 index 0000000..bd960cb --- /dev/null +++ b/doc/workaround.rst @@ -0,0 +1,5 @@ +workaround.py +************************** +.. automodule:: workaround + :members: + :undoc-members: \ No newline at end of file diff --git a/os b/os new file mode 100644 index 0000000..c7a7502 --- /dev/null +++ b/os @@ -0,0 +1 @@ +deb; diff --git a/polkit/com.github.slacka.woeusb.policy b/polkit/com.github.slacka.woeusb.policy new file mode 100644 index 0000000..d349780 --- /dev/null +++ b/polkit/com.github.slacka.woeusb.policy @@ -0,0 +1,94 @@ + + + + + The WoeUSB Project + https://github.com/slacka/WoeUSB + woeusbgui-icon + + + Run `woeusb` as SuperUser + 以超級使用者(SuperUser)身份執行 `woeusb` + Uruchom `woeusb` jako root + + Authentication is required to run `woeusb` as SuperUser. + 以超級使用者(SuperUser)身份執行 `woeusb` 需要通過身份驗證。 + Wymagana jest autoryzacja do uruchomienia `woeusb` jako root + + + auth_admin + auth_admin + auth_admin_keep + + + /usr/bin/woeusb + + + + Run `woeusb` as SuperUser + 以超級使用者(SuperUser)身份執行 `woeusb` + Uruchom `woeusb` jako root + + Authentication is required to run `woeusb` as SuperUser. + 以超級使用者(SuperUser)身份執行 `woeusb` 需要通過身份驗證。 + Wymagana jest autoryzacja do uruchomienia `woeusb` jako root + + + auth_admin + auth_admin + auth_admin_keep + + + /usr/bin/woeusbgui + true + + + + Run `woeusb` as SuperUser + 以超級使用者(SuperUser)身份執行 `woeusb` + Uruchom `woeusb` jako root + + Authentication is required to run `woeusb` as SuperUser. + 以超級使用者(SuperUser)身份執行 `woeusb` 需要通過身份驗證。 + Wymagana jest autoryzacja do uruchomienia `woeusb` jako root + + + auth_admin + auth_admin + auth_admin_keep + + + /usr/local/bin/woeusb + + + + WoeUSB running in --format mode. + WoeUSB 以 --format 模式運行 + + Superuser privilege is required for WoeUSB to modify your target device's partition table, create target partiton, format target filesystem, mount and unmount target filesystem, install bootloader and etc. + WoeUSB 需要「超級使用者(SuperUser)」權限以修改您目標裝置的分區表、建立目標分區、格式化目標檔案系統、掛載與解除掛載目標檔案系統、安裝開機載入器以及其他操作。 + + + auth_admin + auth_admin + auth_admin_keep + + + + + WoeUSB running in --install mode. + WoeUSB 以 --install 模式運行 + + Superuser privilege is required for WoeUSB to mount and unmount target filesystem, install bootloader and etc. + WoeUSB 需要「超級使用者(SuperUser)」權限以掛載與解除掛載目標檔案系統、安裝開機載入器以及其他操作。 + + + auth_admin + auth_admin + auth_admin_keep + + + \ No newline at end of file diff --git a/setup-development-environment.bash b/setup-development-environment.bash new file mode 100644 index 0000000..0101f2c --- /dev/null +++ b/setup-development-environment.bash @@ -0,0 +1,170 @@ +#!/usr/bin/env bash +#shellcheck disable=SC2034 + +## Makes debuggers' life easier - Unofficial Bash Strict Mode +## BASHDOC: Shell Builtin Commands - Modifying Shell Behavior - The Set Builtin +set -o errexit +set -o errtrace +set -o nounset +set -o pipefail + +for required_command in \ + realpath\ + basename\ + dirname\ + git\ + rm + do + if ! command -v "${required_command}" >/dev/null; then + printf\ + "Error: This program requires \"%s\" command in your \$PATH.\n"\ + "${required_command}"\ + 1>&2 + exit 1 + fi +done + +## Non-overridable Primitive Variables +## BASHDOC: Shell Variables » Bash Variables +## BASHDOC: Basic Shell Features » Shell Parameters » Special Parameters +if [ -v "BASH_SOURCE[0]" ]; then + RUNTIME_EXECUTABLE_PATH="$(realpath --strip "${BASH_SOURCE[0]}")" + RUNTIME_EXECUTABLE_FILENAME="$(basename "${RUNTIME_EXECUTABLE_PATH}")" + RUNTIME_EXECUTABLE_NAME="${RUNTIME_EXECUTABLE_FILENAME%.*}" + RUNTIME_EXECUTABLE_DIRECTORY="$(dirname "${RUNTIME_EXECUTABLE_PATH}")" + RUNTIME_COMMANDLINE_BASECOMMAND="${0}" + declare -r\ + RUNTIME_EXECUTABLE_FILENAME\ + RUNTIME_EXECUTABLE_DIRECTORY\ + RUNTIME_EXECUTABLE_NAME\ + RUNTIME_EXECUTABLE_PATHABSOLUTE\ + RUNTIME_COMMANDLINE_BASECOMMAND +fi +declare -ar RUNTIME_COMMANDLINE_PARAMETERS=("${@}") + +## init function: entrypoint of main program +## This function is called near the end of the file, +## with the script's command-line parameters as arguments +init(){ + if ! process_commandline_parameters; then + printf\ + "Error: %s: Invalid command-line parameters.\n"\ + "${FUNCNAME[0]}"\ + 1>&2 + print_help + exit 1 + fi + + export GIT_DIR="${RUNTIME_EXECUTABLE_DIRECTORY}/.git" + export GIT_WORK_TREE="${RUNTIME_EXECUTABLE_DIRECTORY}" + + printf "Setting Project-specific Git configuration..." + git config include.path ../.gitconfig\ + && printf "done\n" + + printf "Activating Git smudge filter...\n" + # git - How do I programmatically determine if there are uncommitted changes? - Stack Overflow + # https://stackoverflow.com/questions/3878624/how-do-i-programmatically-determine-if-there-are-uncommitted-changes + # DOC: git-diff-index(1) manpage: OPTIONS: --quiet, --exit-code + local stash_is_needed=false + if ! git diff-index --quiet HEAD --; then + stash_is_needed=true + fi + if test "${stash_is_needed}" = 'true'; then + git stash save &>/dev/null + fi + rm .git/index + git checkout HEAD -- "$(git rev-parse --show-toplevel)" >/dev/null + if test "${stash_is_needed}" = 'true'; then + git stash pop &>/dev/null + fi; unset stash_is_needed + printf "done.\n" + + exit 0 +}; declare -fr init + +## Traps: Functions that are triggered when certain condition occurred +## Shell Builtin Commands » Bourne Shell Builtins » trap +trap_errexit(){ + local line_number="${1}" + + printf\ + "An error occurred at line number %s and the script is prematurely aborted\n"\ + "${line_number}"\ + 1>&2 + + return 0 +}; declare -fr trap_errexit; trap 'trap_errexit ${LINENO}' ERR + +trap_exit(){ + return 0 +}; declare -fr trap_exit; trap trap_exit EXIT + +trap_return(){ + local returning_function="${1}" + + printf "DEBUG: %s: returning from %s\n" "${FUNCNAME[0]}" "${returning_function}" 1>&2 +}; declare -fr trap_return + +trap_interrupt(){ + printf "Recieved SIGINT, script is interrupted.\n" 1>&2 + return 0 +}; declare -fr trap_interrupt; trap trap_interrupt INT + +print_help(){ + printf "Currently no help messages are available for this program\n" 1>&2 + return 0 +}; declare -fr print_help; + +process_commandline_parameters() { + if [ "${#RUNTIME_COMMANDLINE_PARAMETERS[@]}" -eq 0 ]; then + return 0 + fi + + # modifyable parameters for parsing by consuming + local -a parameters=("${RUNTIME_COMMANDLINE_PARAMETERS[@]}") + + # Normally we won't want debug traces to appear during parameter parsing, so we add this flag and defer it activation till returning(Y: Do debug) + local enable_debug=N + + while true; do + if [ "${#parameters[@]}" -eq 0 ]; then + break + else + case "${parameters[0]}" in + "--help"\ + |"-h") + print_help; + exit 0 + ;; + "--debug"\ + |"-d") + enable_debug="Y" + ;; + *) + printf "ERROR: Unknown command-line argument \"%s\"\n" "${parameters[0]}" >&2 + return 1 + ;; + esac + # shift array by 1 = unset 1st then repack + unset "parameters[0]" + if [ "${#parameters[@]}" -ne 0 ]; then + parameters=("${parameters[@]}") + fi + fi + done + + if [ "${enable_debug}" = "Y" ]; then + trap 'trap_return "${FUNCNAME[0]}"' RETURN + set -o xtrace + fi + return 0 +}; declare -fr process_commandline_parameters; + +init "${@}" + +## This script is based on the GNU Bash Shell Script Template project +## https://github.com/Lin-Buo-Ren/GNU-Bash-Shell-Script-Template +## and is based on the following version: +declare -r META_BASED_ON_GNU_BASH_SHELL_SCRIPT_TEMPLATE_VERSION="v1.26.0-32-g317af27-dirty" +## You may rebase your script to incorporate new features and fixes from the template \ No newline at end of file diff --git a/src/core.py b/src/core.py new file mode 100644 index 0000000..1a63f6d --- /dev/null +++ b/src/core.py @@ -0,0 +1,742 @@ +#!/usr/bin/env python + +""" +A Linux program to create bootable Windows USB stick from a real Windows DVD or an image +Copyright © 2013 Colin GILLE / congelli501 +Copyright © 2017 slacka et. al. +Python port - 2018 WaxyMocha + +This file is part of WoeUSB. + +WoeUSB is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +WoeUSB 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 WoeUSB If not, see . +""" + + +import os +import time +import shutil +import argparse +import tempfile +import traceback +import threading +import subprocess +import urllib.request +from datetime import datetime + +import utils +import workaround + +application_name = 'WoeUSB' +application_version = '@@WOEUSB_VERSION@@' +DEFAULT_NEW_FS_LABEL = 'Windows USB' + +application_site_url = 'https://github.com/slacka/WoeUSB' +application_copyright_declaration = "Copyright © Colin GILLE / congelli501 2013\\nCopyright © slacka et.al. 2017" +application_copyright_notice = application_name + " is free software licensed under the GNU General Public License version 3(or any later version of your preference) that gives you THE 4 ESSENTIAL FREEDOMS\\nhttps://www.gnu.org/philosophy/" + +#: Increase verboseness, provide more information when required +verbose = False + +debug = False + +#: used in cleanup() +target_device = "" + +CopyFiles_handle = threading.Thread() + +#: Execution state for cleanup functions to determine if clean up is required +current_state = 'pre-init' + +gui = None + + +def init(from_cli=True, install_mode=None, source_media=None, target_media=None, workaround_bios_boot_flag=False, + target_filesystem_type="FAT", filesystem_label=DEFAULT_NEW_FS_LABEL): + """ + :param from_cli: + :type from_cli: bool + :param install_mode: + :param source_media: + :param target_media: + :param workaround_bios_boot_flag: + :param target_filesystem_type: + :param filesystem_label: + :return: List + """ + source_fs_mountpoint = "/media/woeusb_source_" + str( + round((datetime.today() - datetime.fromtimestamp(0)).total_seconds())) + "_" + str(os.getpid()) + target_fs_mountpoint = "/media/woeusb_target_" + str( + round((datetime.today() - datetime.fromtimestamp(0)).total_seconds())) + "_" + str(os.getpid()) + + temp_directory = tempfile.mkdtemp(prefix="WoeUSB.") + + verbose = False + + no_color = True + + debug = False + + parser = None + + if from_cli: + parser = setup_arguments() + args = parser.parse_args() + + if args.about: + print_application_info() + return 0 + + if args.device: + install_mode = "device" + elif args.partition: + install_mode = "partition" + else: + utils.print_with_color("You need to specify instalation type (--device or --partition") + return 1 + + #: source_media may be a optical disk drive or a disk image + source_media = args.source + #: target_media may be an entire usb storage device or just a partition + target_media = args.target + + workaround_bios_boot_flag = args.workaround_bios_boot_flag + + target_filesystem_type = args.target_filesystem + + filesystem_label = args.label + + verbose = args.verbose + + no_color = args.no_color + + debug = args.debug + + utils.no_color = no_color + utils.verbose = verbose + utils.gui = gui + + return [source_fs_mountpoint, target_fs_mountpoint, temp_directory, install_mode, source_media, target_media, + workaround_bios_boot_flag, target_filesystem_type, filesystem_label, verbose, debug, parser] + + +def main(source_fs_mountpoint, target_fs_mountpoint, source_media, target_media, install_mode, temp_directory, + target_filesystem_type, workaround_bios_boot_flag, parser): + """ + :param parser: + :param source_fs_mountpoint: + :param target_fs_mountpoint: + :param source_media: + :param target_media: + :param install_mode: + :param temp_directory: + :param target_filesystem_type: + :param workaround_bios_boot_flag: + :return: 0 - succes; 1 - failure + """ + global debug + global verbose + global no_color + global current_state + global target_device + + current_state = 'enter-init' + + command_mkdosfs, command_mkntfs, command_grubinstall = utils.check_runtime_dependencies(application_name) + if command_grubinstall == "grub-install": + name_grub_prefix = "grub" + else: + name_grub_prefix = "grub2" + + utils.print_with_color(application_name + " v" + application_version) + utils.print_with_color("==============================") + + if os.getuid() != 0: + utils.print_with_color("Warning: You are not running " + application_name + " as root!", "yellow") + utils.print_with_color("Warning: This might be the reason of the following failure.", "yellow") + + if utils.check_runtime_parameters(install_mode, source_media, target_media): + parser.print_help() + return 1 + + target_device, target_partition = utils.determine_target_parameters(install_mode, target_media) + + if utils.check_source_and_target_not_busy(install_mode, source_media, target_device, target_partition): + return 1 + + current_state = "start-mounting" + + if mount_source_filesystem(source_media, source_fs_mountpoint): + utils.print_with_color("Error: Unable to mount source filesystem", "red") + return 1 + + if target_filesystem_type == "FAT": + if utils.check_fat32_filesize_limitation(source_fs_mountpoint): + target_filesystem_type = "NTFS" + + if install_mode == "device": + wipe_existing_partition_table_and_filesystem_signatures(target_device) + create_target_partition_table(target_device, "legacy") + create_target_partition(target_device, target_partition, target_filesystem_type, target_filesystem_type, + command_mkdosfs, + command_mkntfs) + + if target_filesystem_type == "NTFS": + create_uefi_ntfs_support_partition(target_device) + install_uefi_ntfs_support_partition(target_device + "2", temp_directory) + + if install_mode == "partition": + utils.check_target_partition(target_partition, target_device) + utils.check_target_partition(target_partition, target_device) + + if mount_target_filesystem(target_partition, target_fs_mountpoint): + utils.print_with_color("Error: Unable to mount target filesystem", "red") + return 1 + + if utils.check_target_filesystem_free_space(target_fs_mountpoint, source_fs_mountpoint, target_partition): + return 1 + + current_state = "copying-filesystem" + + workaround.linux_make_writeback_buffering_not_suck(True) + + copy_filesystem_files(source_fs_mountpoint, target_fs_mountpoint) + + workaround.support_windows_7_uefi_boot(source_fs_mountpoint, target_fs_mountpoint) + + install_legacy_pc_bootloader_grub(target_fs_mountpoint, target_device, command_grubinstall) + + install_legacy_pc_bootloader_grub_config(target_fs_mountpoint, target_device, command_grubinstall, name_grub_prefix) + + if workaround_bios_boot_flag: + workaround.buggy_motherboards_that_ignore_disks_without_boot_flag_toggled(target_device) + + current_state = "finished" + + return 0 + + +def print_application_info(): + print(application_name + " " + application_version) + print(application_site_url) + print(application_copyright_declaration) + print(application_copyright_notice) + + +def wipe_existing_partition_table_and_filesystem_signatures(target_device): + """ + :param target_device: + :return: None + """ + utils.print_with_color("Wiping all existing partition table and filesystem signatures in " + target_device, "green") + subprocess.run(["wipefs", "--all", target_device]) + check_if_the_drive_is_really_wiped(target_device) + + +def check_if_the_drive_is_really_wiped(target_device): + """ + Some broken locked-down flash drive will appears to be successfully wiped but actually nothing is written into it and will shown previous partition scheme afterwards. This is the detection of the case and will bail out if such things happened + + :param target_device: The target device file to be checked + :return: 0 - success; 1 - failure + """ + utils.check_kill_signal() + + utils.print_with_color("Ensure that " + target_device + " is really wiped...") + + lsblk = subprocess.run(["lsblk", "--pairs", "--output", "NAME,TYPE", target_device], stdout=subprocess.PIPE).stdout + + grep = subprocess.Popen(["grep", "--count", "TYPE=\"part\""], stdin=subprocess.PIPE, stdout=subprocess.PIPE) + if grep.communicate(input=lsblk)[0].decode("utf-8").strip() != "0": + utils.print_with_color( + "Error: Partition is still detected after wiping all signatures, this indicates that the drive might be locked into readonly mode due to end of lifespan.") + return 1 + return 0 + + +def create_target_partition_table(target_device, partition_table_type): + """ + :param target_device: + :param partition_table_type: + :return: 0 - success; 1 - failure + """ + utils.check_kill_signal() + + utils.print_with_color("Creating new partition table on " + target_device + "...", "green") + + if partition_table_type in ["legacy", "msdos", "mbr", "pc"]: + parted_partiton_table_argument = "msdos" + elif partition_table_type in ["gpt", "guid"]: + utils.print_with_color("Error: Currently GUID partition table is not supported.", "red") + return 1 + else: + utils.print_with_color("Error: Partition table not supported.", "red") + return 1 + + # Create partition table(and overwrite the old one, whatever it was) + subprocess.run(["parted", "--script", target_device, "mklabel", parted_partiton_table_argument]) + + return 0 + + +def create_target_partition(target_device, target_partition, filesystem_type, filesystem_label, command_mkdosfs, + command_mkntfs): + """ + :param target_device: + :param target_partition: + :param filesystem_type: + :param filesystem_label: + :param command_mkdosfs: + :param command_mkntfs: + :return: 1,2 - failure + """ + utils.check_kill_signal() + + if filesystem_type in ["FAT", "vfat"]: + parted_mkpart_fs_type = "fat32" + elif filesystem_type in ["NTFS", "ntfs"]: + parted_mkpart_fs_type = "ntfs" + else: + utils.print_with_color("Error: Filesystem not supported", "red") + return 2 + + utils.print_with_color("Creating target partition...", "green") + + # Create target partition + # We start at 4MiB for grub (it needs a post-mbr gap for its code) and alignment of flash memery block erase segment in general, for details see http://www.gnu.org/software/grub/manual/grub.html#BIOS-installation and http://lwn.net/Articles/428584/ + # If NTFS filesystem is used we leave a 512KiB partition at the end for installing UEFI:NTFS partition for NTFS support + if parted_mkpart_fs_type == "fat32": + subprocess.run(["parted", + "--script", + target_device, + "mkpart", + "primary", + parted_mkpart_fs_type, + "4MiB", + "100%"]) # last sector of the disk + elif parted_mkpart_fs_type == "ntfs": + # Major partition for storing user files + # NOTE: Microsoft Windows has a bug that only recognize the first partition for removable storage devices, that's why this partition should always be the first one + subprocess.run(["parted", + "--script", + target_device, + "mkpart", + "primary", + parted_mkpart_fs_type, + "4MiB", + "--", + "-1025s"]) # Leave 512KiB==1024sector in traditional 512bytes/sector disk, disks with sector with more than 512bytes only result in partition size greater than 512KiB and is intentionally let-it-be. + # FIXME: Leave exact 512KiB in all circumstances is better, but the algorithm to do so is quite brainkilling. + else: + utils.print_with_color("FATAL: Illegal parted_mkpart_fs_type, please report bug.", "green") + + utils.check_kill_signal() + + workaround.make_system_realize_partition_table_changed(target_device) + + # Format target partition's filesystem + if filesystem_type in ["FAT", "vfat"]: + subprocess.run([command_mkdosfs, "-F", "32", target_partition]) + elif filesystem_type in ["NTFS", "ntfs"]: + subprocess.run([command_mkntfs, "--quick", "--label", filesystem_label, target_partition]) + else: + utils.print_with_color("FATAL: Shouldn't be here") + return 1 + + +def create_uefi_ntfs_support_partition(target_device): + """ + :param target_device: + :return: None + """ + utils.check_kill_signal() + + # FIXME: The partition type should be `fat12` but `fat12` isn't recognized by Parted... + # NOTE: The --align is set to none because this partition is indeed misaligned, but ignored due to it's small size + + subprocess.run(["parted", + "--align", "none", + "--script", + target_device, + "mkpart", + "primary", + "fat16", + "--", "-1024s", "-1s"]) + + +def install_uefi_ntfs_support_partition(uefi_ntfs_partition, download_directory): + """ + Install UEFI:NTFS partition by writing the partition image into the created partition + + FIXME: Currently this requires internet access to download the image from GitHub directly, it should be replaced by including the image in our datadir + + :param uefi_ntfs_partition: The previously allocated partition for installing UEFI:NTFS, requires at least 512KiB + :param download_directory: The temporary directory for downloading UEFI:NTFS image from GitHub + :return: 1 - failure + """ + utils.check_kill_signal() + + try: + file = urllib.request.urlretrieve("https://github.com/pbatard/rufus/raw/master/res/uefi/", "uefi-ntfs.img")[0] + except urllib.request.ContentTooShortError: + utils.print_with_color( + "Warning: Unable to download UEFI:NTFS partition image from GitHub, installation skipped. Target device might not be bootable if the UEFI firmware doesn't support NTFS filesystem.") + return 1 + + shutil.move(file, download_directory + "/" + file) # move file to download_directory + + shutil.copy2(download_directory + "/uefi-ntfs.img", uefi_ntfs_partition) + + +def mount_source_filesystem(source_media, source_fs_mountpoint): + """ + :param source_media: + :param source_fs_mountpoint: + :return: 1 - failure + """ + utils.check_kill_signal() + + utils.print_with_color("Mounting source filesystem...", "green") + + # os.makedirs(source_fs_mountpoint, exist_ok=True) + + if subprocess.run(["mkdir", "--parents", source_fs_mountpoint]).returncode != 0: + utils.print_with_color("Error: Unable to create " + source_fs_mountpoint + " mountpoint directory", "red") + return 1 + + if os.path.isfile(source_media): + if subprocess.run(["mount", + "--options", "loop,ro", + "--types", "udf,iso9660", + source_media, + source_fs_mountpoint]).returncode != 0: + utils.print_with_color("Error: Unable to mount source media", "red") + return 1 + else: + if subprocess.run(["mount", + "--options", "ro", + source_media, + source_fs_mountpoint]).returncode != 0: + utils.print_with_color("Error: Unable to mount source media", "red") + return 1 + + +def mount_target_filesystem(target_partition, target_fs_mountpoint): + """ + Mount target filesystem to existing path as mountpoint + + :param target_partition: The partition device file target filesystem resides, for example /dev/sdX1 + :param target_fs_mountpoint: The existing directory used as the target filesystem's mountpoint, for example /mnt/target_filesystem + :return: 1 - failure + """ + utils.check_kill_signal() + + utils.print_with_color("Mounting target filesystem...", "green") + + # os.makedirs(target_fs_mountpoint, exist_ok=True) + + if subprocess.run(["mkdir", "--parents", target_fs_mountpoint]).returncode != 0: + utils.print_with_color("Error: Unable to create " + target_fs_mountpoint + " mountpoint directory", "red") + return 1 + + if subprocess.run(["mount", + target_partition, + target_fs_mountpoint]).returncode != 0: + utils.print_with_color("Error: Unable to mount target media", "red") + return 1 + + +def copy_filesystem_files(source_fs_mountpoint, target_fs_mountpoint): + """ + Copying all files from one filesystem to another, with progress reporting + + :param source_fs_mountpoint: + :param target_fs_mountpoint: + :return: None + """ + global CopyFiles_handle + + utils.check_kill_signal() + + total_size = 0 + for dirpath, dirnames, filenames in os.walk(source_fs_mountpoint): + for file in filenames: + path = os.path.join(dirpath, file) + total_size += os.path.getsize(path) + + utils.print_with_color("Copying files from source media...", "green") + + CopyFiles_handle = ReportCopyProgress(source_fs_mountpoint, target_fs_mountpoint) + CopyFiles_handle.start() + + for dirpath, _, filenames in os.walk(source_fs_mountpoint): + utils.check_kill_signal() + + if not os.path.isdir(target_fs_mountpoint + dirpath.replace(source_fs_mountpoint, "")): + os.mkdir(target_fs_mountpoint + dirpath.replace(source_fs_mountpoint, "")) + for file in filenames: + path = os.path.join(dirpath, file) + CopyFiles_handle.file = path + + if os.path.getsize(path) > 5 * 1024 * 1024: # Files bigger than 5 MiB + copy_large_file(path, target_fs_mountpoint + path.replace(source_fs_mountpoint, "")) + else: + shutil.copy2(path, target_fs_mountpoint + path.replace(source_fs_mountpoint, "")) + + CopyFiles_handle.stop = True + + +def copy_large_file(source, target): + """ + Because python's copy is atomic it is not possible to do anything during process. + It is not a big problem when using cli (user can just hit ctrl+c and throw exception), + but when using gui this part of script needs to "ping" gui for progress reporting + and check if user didn't click "cancel" (see utils.check_kill_signal()) + + :param source: + :param target: + :return: None + """ + source_file = open(source, "rb") # Open for reading in byte mode + target_file = open(target, "wb") # Open for writing in byte mode + + while True: + utils.check_kill_signal() + + data = source_file.read(5 * 1024 * 1024) # Read 5 MiB, speeds of shitty pendrives can be as low as 2 MiB/s + if data == b"": + break + + target_file.write(data) + + source_file.close() + target_file.close() + + +def install_legacy_pc_bootloader_grub(target_fs_mountpoint, target_device, command_grubinstall): + """ + :param target_fs_mountpoint: + :param target_device: + :param command_grubinstall: + :return: None + """ + utils.check_kill_signal() + + utils.print_with_color("Installing GRUB bootloader for legacy PC booting support...", "green") + + subprocess.run([command_grubinstall, + "--target=i386-pc", + "--boot-directory=" + target_fs_mountpoint, + "--force", target_device]) + + +def install_legacy_pc_bootloader_grub_config(target_fs_mountpoint, target_device, command_grubinstall, + name_grub_prefix): + """ + Install a GRUB config file to chainload Microsoft Windows's bootloader in Legacy PC bootmode + + :param target_fs_mountpoint: Target filesystem's mountpoint(where GRUB is installed) + :param target_device: + :param command_grubinstall: + :param name_grub_prefix: May be different between distributions, so need to be specified (grub/grub2) + :return: None + """ + utils.check_kill_signal() + + utils.print_with_color("Installing custom GRUB config for legacy PC booting...", "green") + + grub_cfg = target_fs_mountpoint + "/" + name_grub_prefix + "/grub.cfg" + + os.makedirs(target_fs_mountpoint + "/" + name_grub_prefix, exist_ok=True) + + with open(grub_cfg, "w") as cfg: + cfg.write("ntldr /bootmgr\n") + cfg.write("boot") + + +def cleanup_mountpoint(fs_mountpoint): + """ + Unmount mounted filesystems and clean-up mountpoints before exiting program + + :param fs_mountpoint: + :return: unclean(2): Not fully clean, target device can be safely detach from host; unsafe(3): Target device cannot be safely detach from host + """ + if os.path.ismount(fs_mountpoint): # os.path.ismount() checks if path is a mount point + utils.print_with_color("Unmounting and removing " + fs_mountpoint + "...", "green") + if subprocess.run(["umount", fs_mountpoint]).returncode: + utils.print_with_color("Warning: Unable to unmount filesystem.", "yellow") + return 1 + + try: + os.rmdir(fs_mountpoint) + except OSError: + utils.print_with_color("Warning: Unable to remove source mountpoint", "yellow") + return 2 + + return 0 + + +def cleanup(source_fs_mountpoint, target_fs_mountpoint, temp_directory): + """ + :param source_fs_mountpoint: + :param target_fs_mountpoint: + :param temp_directory: + :return: None + """ + if CopyFiles_handle.is_alive(): + CopyFiles_handle.stop = True + + if current_state in ["copying-filesystem", "finished"]: + workaround.linux_make_writeback_buffering_not_suck(False) + + flag_unclean = False + flag_unsafe = False + + cleanup_result = cleanup_mountpoint(source_fs_mountpoint) + + if cleanup_result == 2: + flag_unclean = True + + cleanup_result = cleanup_mountpoint(target_fs_mountpoint) + + if cleanup_result == 1: + flag_unsafe = True + elif cleanup_result == 2: + flag_unclean = True + + if flag_unclean: + utils.print_with_color("Some mountpoints are not unmount/cleaned successfully and must be done manually", + "yellow") + + if flag_unsafe: + utils.print_with_color( + "We unable to unmount target filesystem for you, please make sure target filesystem is unmounted before detaching to prevent data corruption", + "yellow") + utils.print_with_color("Some mountpoints are not unmount/cleaned successfully and must be done manually", + "yellow") + + if utils.check_is_target_device_busy(target_device): + utils.print_with_color( + "Target device is busy, please make sure you unmount all filesystems on target device or shutdown the computer before detaching it.", + "yellow") + else: + utils.print_with_color("You may now safely detach the target device", "green") + + shutil.rmtree(temp_directory) + + if current_state == "finished": + utils.print_with_color("Done :)", "green") + utils.print_with_color("The target device should be bootable now", "green") + + +def setup_arguments(): + """ + :return: Setted up argparse.ArgumentParser object + """ + parser = argparse.ArgumentParser( + description="WoeUSB can create a bootable Microsoft Windows(R) USB storage device from an existing Windows optical disk or an ISO disk image.") + parser.add_argument("source", help="Source") + parser.add_argument("target", help="Target") + parser.add_argument("--device", "-d", action="store_true", + help="Completely WIPE the entire USB storage device, then build a bootable Windows USB device from scratch.") + parser.add_argument("--partition", "-p", action="store_true", + help="Copy Windows files to an existing partition of a USB storage device and make it bootable. This allows files to coexist as long as no filename conflict exists.") + + parser.add_argument("--verbose", "-v", action="store_true", help="Verbose mode") + parser.add_argument("--version", "-V", action="version", version=application_version, + help="Print application version") + parser.add_argument("--about", "-ab", action="store_true", help="Show info about this application") + parser.add_argument("--no-color", action="store_true", help="Disable message coloring") + parser.add_argument("--debug", action="store_true", help="Enable script debugging") + parser.add_argument("--label", "-l", default="Windows USB", + help="Specify label for the newly created file system in --device creation method") + parser.add_argument("--workaround-bios-boot-flag", action="store_true", + help="Workaround BIOS bug that won't include the device in boot menu if non of the partition's boot flag is toggled") + parser.add_argument("--target-filesystem", "--tgt-fs", choices=["FAT", "NTFS"], default="FAT", + help="Specify the filesystem to use as the target partition's filesystem.") + parser.add_argument('--for-gui', action="store_true", help=argparse.SUPPRESS) + + return parser + + +class ReportCopyProgress(threading.Thread): + """ + Classes for threading module + """ + file = "" + stop = False + + def __init__(self, source, target): + threading.Thread.__init__(self) + self.source = source + self.target = target + + def run(self): + source_size = utils.get_size(self.source) + len_ = 0 + file_old = None + + while not self.stop: + target_size = utils.get_size(self.target) + + if len_ != 0 and gui is None: + print('\033[3A') + print(" " * len_) + print(" " * 4) + print('\033[3A') + + # Prevent printing same filenames + if self.file != file_old: + file_old = self.file + utils.print_with_color(self.file.replace(self.source, "")) + + string = "Copied " + utils.convert_to_human_readable_format( + target_size) + " from a total of " + utils.convert_to_human_readable_format(source_size) + + len_ = len(string) + percentage = (target_size * 100) // source_size + + if gui is not None: + gui.state = string + gui.progress = percentage + else: + print(string) + print(str(percentage) + "%") + + time.sleep(0.05) + if gui is not None: + gui.progress = False + + return 0 + + +def run(): + source_fs_mountpoint, target_fs_mountpoint, temp_directory, \ + install_mode, source_media, target_media, \ + workaround_bios_boot_flag, target_filesystem_type, new_file_system_label, \ + verbose, debug, parser = init() + try: + main(source_fs_mountpoint, target_fs_mountpoint, source_media, target_media, install_mode, temp_directory, + target_filesystem_type, workaround_bios_boot_flag, parser) + except KeyboardInterrupt: + pass + except Exception as error: + utils.print_with_color(error, "red") + if debug: + traceback.print_exc() + + cleanup(source_fs_mountpoint, target_fs_mountpoint, temp_directory) + + +if __name__ == "__main__": + run() diff --git a/src/data/Makefile.am b/src/data/Makefile.am new file mode 100644 index 0000000..b77d7e2 --- /dev/null +++ b/src/data/Makefile.am @@ -0,0 +1,7 @@ +# Il faut mettre les fichiers dans le sous dossier data de share... +pkgdatadir=$(mypkgdatadir)/data + +dist_pkgdata_DATA = $(srcdir)/*.png + +bindir=${pkgdatadir} +dist_bin_SCRIPTS = listUsb listDvdDrive diff --git a/src/data/c501-logo.png b/src/data/c501-logo.png new file mode 100644 index 0000000..17312d2 Binary files /dev/null and b/src/data/c501-logo.png differ diff --git a/src/data/icon.png b/src/data/icon.png new file mode 100644 index 0000000..3c7a0cd Binary files /dev/null and b/src/data/icon.png differ diff --git a/src/data/woeusb-logo.png b/src/data/woeusb-logo.png new file mode 100644 index 0000000..abfe723 Binary files /dev/null and b/src/data/woeusb-logo.png differ diff --git a/src/linux-menu/Makefile.am b/src/linux-menu/Makefile.am new file mode 100644 index 0000000..a3678c3 --- /dev/null +++ b/src/linux-menu/Makefile.am @@ -0,0 +1,11 @@ + +if ! IS_MINGW +desktopdir = $(datadir)/applications +desktop_DATA = $(srcdir)/*.desktop + +pixmapdir = $(datadir)/pixmaps +pixmap_DATA = $(srcdir)/*.png + +endif + +EXTRA_DIST = $(srcdir)/*.desktop $(srcdir)/*.png diff --git a/src/linux-menu/woeusbgui-icon.png b/src/linux-menu/woeusbgui-icon.png new file mode 100644 index 0000000..3c7a0cd Binary files /dev/null and b/src/linux-menu/woeusbgui-icon.png differ diff --git a/src/linux-menu/woeusbgui.desktop b/src/linux-menu/woeusbgui.desktop new file mode 100644 index 0000000..03d0a98 --- /dev/null +++ b/src/linux-menu/woeusbgui.desktop @@ -0,0 +1,16 @@ +[Desktop Entry] +Version=1.0 +Exec=woeusbgui +Icon=woeusbgui-icon +Terminal=false +X-MultipleArgs=false +Type=Application +Categories=System; +Keywords=Windows;UEFI;EFI;booting; +StartupNotify=true +Name=WoeUSB +Name[fr_FR]=WoeUSB +Name[zh_TW]=WoeUSB Windows 可開機 USB 製作工具 +Comment=Create Windows USB stick installer from a real Windows DVD or an image. +Comment[fr_FR]=Créer des clés USB d'installation de Windows depuis une image CD ou un dvd original. +Comment[zh_TW]=從一個既有的 Windows DVD 或光碟映像檔建立 Windows 可開機 USB 安裝碟 diff --git a/src/list_devices.py b/src/list_devices.py new file mode 100644 index 0000000..c1ffec3 --- /dev/null +++ b/src/list_devices.py @@ -0,0 +1,107 @@ +#!/usr/bin/env python + +""" +This file is part of WoeUSB. + +WoeUSB is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +WoeUSB 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 WoeUSB. If not, see . +""" + +import os +import re +import subprocess + + +# Packed to class for clarity + + +def usb_drive(show_all=False): + devices_list = [] + + lsblk = subprocess.run(["lsblk", + "--output", "NAME", + "--noheadings", + "--nodeps"], stdout=subprocess.PIPE).stdout.decode("utf-8") + + devices = re.sub("sr[0-9]|cdrom[0-9]", "", lsblk).split() + + for device in devices: + if is_removable_and_writable_device(device): + if not show_all: + continue + + # FIXME: Needs a more reliable detection mechanism instead of simply assuming it is under /dev + block_device = "/dev/" + device + + device_capacity = subprocess.run(["lsblk", + "--output", "SIZE", + "--noheadings", + "--nodeps", + block_device], stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + + device_model = subprocess.run(["lsblk", + "--output", "MODEL", + "--noheadings", + "--nodeps", + block_device], stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + + if device_model != "": + devices_list.append([block_device, block_device + "(" + device_model + ", " + device_capacity + ")"]) + else: + devices_list.append([block_device, block_device + "(" + device_capacity + ")"]) + + return devices_list + + +def is_removable_and_writable_device(block_device_name): + sysfs_block_device_dir = "/sys/block/" + block_device_name + + # We consider device not removable if the removable sysfs item not exist + if os.path.isfile(sysfs_block_device_dir + "/removable"): + with open(sysfs_block_device_dir + "/removable") as removable: + removable_content = removable.read() + + with open(sysfs_block_device_dir + "/ro") as ro: + ro_content = ro.read() + + if removable_content.strip("\n") == "1" and ro_content.strip("\n") == "0": + return 0 + else: + return 1 + else: + return 1 + + +def dvd_drive(): + devices_list = [] + find = subprocess.run(["find", "/sys/block", + "-maxdepth", "1", + "-mindepth", "1"], stdout=subprocess.PIPE).stdout.decode("utf-8").split() + devices = [] + for device in find: + tmp = re.findall("sr[0-9]", device) + + if tmp == []: + continue + + devices.append([device, tmp[0]]) + + for device in devices: + optical_disk_drive_devfs_path = "/dev/" + device[1] + + with open(device[0] + "/device/model", "r") as model: + model_content = model.read().strip() + + devices_list.append([optical_disk_drive_devfs_path, optical_disk_drive_devfs_path + " - " + model_content]) + + return devices_list diff --git a/src/locale/Makefile.am b/src/locale/Makefile.am new file mode 100644 index 0000000..4b739e4 --- /dev/null +++ b/src/locale/Makefile.am @@ -0,0 +1,2 @@ +# Il faut mettre les fichiers dans le sous dossier locale de share... +SUBDIRS = fr zh_TW diff --git a/src/locale/fr/LC_MESSAGES/Makefile.am b/src/locale/fr/LC_MESSAGES/Makefile.am new file mode 100644 index 0000000..4cb6e55 --- /dev/null +++ b/src/locale/fr/LC_MESSAGES/Makefile.am @@ -0,0 +1,9 @@ +# Il faut mettre les fichiers dans le sous dossier locale/fr/LC_MESSAGES de share... +pkgdatadir=$(mypkgdatadir)/locale/fr/LC_MESSAGES + +%.mo: %.po + msgfmt -o $@ $< + +dist_pkgdata_DATA = \ + $(srcdir)/woeusb.mo\ + $(srcdir)/wxstd.mo diff --git a/src/locale/fr/LC_MESSAGES/woeusb.po b/src/locale/fr/LC_MESSAGES/woeusb.po new file mode 100644 index 0000000..78cd451 --- /dev/null +++ b/src/locale/fr/LC_MESSAGES/woeusb.po @@ -0,0 +1,154 @@ +msgid "" +msgstr "" +"Project-Id-Version: woeusb\n" +"Report-Msgid-Bugs-To: WoeUSB Issue Tracker \n" +"POT-Creation-Date: 2011-07-14 00:08+0100\n" +"PO-Revision-Date: 2011-07-14 00:13+0100\n" +"Last-Translator: GILLE Colin \n" +"Language-Team: WoeUSB Issue Tracker \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-Language: French\n" +"X-Poedit-Country: FRANCE\n" +"X-Poedit-SearchPath-0: ../../..\n" + +#: ../../../MainFrame.cpp:41 +msgid "Show all drives" +msgstr "Montrer tous les disques" + +#: ../../../MainFrame.cpp:41 +msgid "Show all drives, even those not detected as USB stick." +msgstr "Montrer tous les disques, même ceux qui ne sont pas détectés comme des clés USB." + +#: ../../../MainFrame.cpp:53 +msgid "&File" +msgstr "$Fichier" + +#: ../../../MainFrame.cpp:54 +msgid "&Help" +msgstr "&Aide" + +#: ../../../App.cpp:82 +msgid "Error : " +msgstr "Erreur :" + +#: ../../../App.cpp:82 +#: ../../../App.cpp:124 +msgid "Error..." +msgstr "Erreur..." + +#: ../../../App.cpp:117 +msgid "Unknown error as occurred!" +msgstr "Une erreur inconnue s'est produite!" + +#: ../../../App.cpp:124 +msgid "Fatal error : " +msgstr "Erreur fatale :" + +#: ../../../DialogAbout.cpp:46 +#, c-format +msgid "Version %s" +msgstr "Version %s" + +#: ../../../DialogAbout.cpp:55 +msgid "Developer" +msgstr "Développeur" + +#: ../../../DialogAbout.cpp:58 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" +"\n" +"%s 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 theGNU General Public License for more details.\n" +"\n" +"You should have received a copy of the GNU General Public Licensealong with %s. If not, see ." +msgstr "" +"%s est un logiciel libre ; vous pouvez le diffuser et/ou le modifier suivant les termes de la Licence Publique Générale GNU telle que publiée par la Free Software Foundation ; soit la version 3 de cette licence, soit (à votre convenance) une version ultérieure.\n" +"\n" +"%s est diffusé dans l'espoir qu'il sera utile, mais SANS AUCUNE GARANTIE ; sans même une garantie implicite de COMMERCIALISATION ou d'ADÉQUATION À UN USAGE PARTICULIER. Voyez la Licence Publique Générale GNU pour plus de détails.\n" +"\n" +"Vous devriez avoir reçu une copie de la Licence Publique Générale GNU avec %s ; sinon, veuillez écrire à la Free Software Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, États-Unis." + +#: ../../../DialogAbout.cpp:73 +msgid "License" +msgstr "Licence" + +#: ../../../MainPanel.cpp:45 +msgid "Source :" +msgstr "Source :" + +#: ../../../MainPanel.cpp:48 +msgid "From a disk image (iso)" +msgstr "Depuis une image disque (iso)" + +#: ../../../MainPanel.cpp:53 +msgid "Please select a disk image" +msgstr "Veuillez sélectionner une image disque" + +#: ../../../MainPanel.cpp:58 +msgid "From a CD/DVD drive" +msgstr "Depuis un lecteur de CD/DVD" + +#: ../../../MainPanel.cpp:70 +msgid "Target device :" +msgstr "Disque de destination :" + +#: ../../../MainPanel.cpp:81 +msgid "Install" +msgstr "Installer" + +#: ../../../MainPanel.cpp:247 +msgid "Installing.." +msgstr "Installation en cours..." + +#: ../../../MainPanel.cpp:247 +msgid "Please wait..." +msgstr "Veuillez patienter..." + +#: ../../../MainPanel.cpp:270 +#: ../../../MainPanel.cpp:289 +msgid "Are you sure you want to cancel the installation?" +msgstr "Êtes-vous sûr de vouloir annuler l'installation?" + +#: ../../../MainPanel.cpp:270 +#: ../../../MainPanel.cpp:289 +msgid "Cancel" +msgstr "Annuler" + +#: ../../../MainPanel.cpp:312 +msgid "Installation succeeded!" +msgstr "Installation réussie!" + +#: ../../../MainPanel.cpp:312 +#: ../../../MainPanel.cpp:316 +msgid "Installation" +msgstr "Installation" + +#: ../../../MainPanel.cpp:316 +msgid "Installation failed!" +msgstr "Erreur lors de l'installation!" + +#: ../../../findFile.cpp:54 +msgid "File not Found : " +msgstr "Fichier non trouvé :" + +#: ../../../findFile.cpp:54 +msgid "Error" +msgstr "Erreur" + +#: ../../../strWxStdConv.hpp:106 +msgid "bytes" +msgstr "octets" + +#: ../../../AppConfig.hpp:7 +msgid "WoeUSB" +msgstr "WoeUSB" + +#: ../../../DialogAbout.hpp:68 +msgid "About" +msgstr "À Propos" + diff --git a/src/locale/fr/LC_MESSAGES/wxstd.po b/src/locale/fr/LC_MESSAGES/wxstd.po new file mode 100644 index 0000000..3d33e51 --- /dev/null +++ b/src/locale/fr/LC_MESSAGES/wxstd.po @@ -0,0 +1,6968 @@ +# Initial translation by Stephane Junique +# Updated by Nicolas Velin +msgid "" +msgstr "" +"Project-Id-Version: wxstd\n" +"Report-Msgid-Bugs-To: WoeUSB Issue Tracker \n" +"POT-Creation-Date: 2008-04-24 09:56+0200\n" +"PO-Revision-Date: 2008-10-25 17:56+0100\n" +"Last-Translator: GILLE \n" +"Language-Team: French \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-Language: fr\n" +"X-Poedit-Country: FRANCE\n" +"plural-forms: nplurals=2; plural=n > 1\n" +"X-Poedit-SearchPath-0: ..\n" + +#: ../src/common/debugrpt.cpp:575 +#, c-format +msgid "\t%s: %s\n" +msgstr "\t%s : %s\n" + +#: ../src/common/debugrpt.cpp:578 +msgid "" +"\n" +"Please send this report to the program maintainer, thank you!\n" +msgstr "" +"\n" +"Veuillez envoyer ce rapport au responsable du programme.\n" + +#: ../src/richtext/richtextstyledlg.cpp:202 +#: ../src/richtext/richtextstyledlg.cpp:214 +#: ../src/palmos/utils.cpp:216 +msgid " " +msgstr " " + +#: ../src/generic/dbgrptg.cpp:322 +msgid " Thank you and we're sorry for the inconvenience!\n" +msgstr " Merci et désolé pour le dérangement.\n" + +#: ../src/common/log.cpp:246 +#, c-format +msgid " (error %ld: %s)" +msgstr " (erreur %ld : %s)" + +#: ../src/common/docview.cpp:1432 +msgid " - " +msgstr " - " + +#: ../src/common/strconv.cpp:3063 +#: ../src/common/strconv.cpp:3071 +msgid " Couldn't create the UnicodeConverter" +msgstr "Impossible de créer le UnicodeConverter" + +#: ../src/richtext/richtextprint.cpp:549 +#: ../src/html/htmprint.cpp:579 +msgid " Preview" +msgstr " Aperçu" + +#: ../src/msw/aboutdlg.cpp:52 +msgid " Version " +msgstr "Version " + +#: ../src/common/fontcmn.cpp:619 +msgid " bold" +msgstr "gras" + +#: ../src/common/fontcmn.cpp:635 +msgid " italic" +msgstr "italique" + +#: ../src/common/fontcmn.cpp:615 +msgid " light" +msgstr "léger" + +#: ../src/common/paper.cpp:119 +msgid "#10 Envelope, 4 1/8 x 9 1/2 in" +msgstr "Enveloppe n° 10 (4,125 x 9,5 pouces)" + +#: ../src/common/paper.cpp:120 +msgid "#11 Envelope, 4 1/2 x 10 3/8 in" +msgstr "Enveloppe n° 11 (4,5 x 10,375 pouces)" + +#: ../src/common/paper.cpp:121 +msgid "#12 Envelope, 4 3/4 x 11 in" +msgstr "Enveloppe n° 12 (4,75 x 11 pouces)" + +#: ../src/common/paper.cpp:122 +msgid "#14 Envelope, 5 x 11 1/2 in" +msgstr "Enveloppe n° 14 (5 x 11,5 pouces)" + +#: ../src/common/paper.cpp:118 +msgid "#9 Envelope, 3 7/8 x 8 7/8 in" +msgstr "Enveloppe n° 9 (3,875 x 8,875 pouces)" + +#: ../contrib/src/deprecated/resource.cpp:1808 +#: ../contrib/src/deprecated/resource.cpp:1938 +#: ../contrib/src/deprecated/resource.cpp:3036 +#, c-format +msgid "#define %s must be an integer." +msgstr "#define %s doit être un entier." + +#: ../src/common/filename.cpp:2377 +#, c-format +msgid "%.*f GB" +msgstr "%.*f GB" + +#: ../src/common/filename.cpp:2375 +#, c-format +msgid "%.*f MB" +msgstr "%.*f MB" + +#: ../src/common/filename.cpp:2379 +#, c-format +msgid "%.*f TB" +msgstr "%.*f TB" + +#: ../src/common/filename.cpp:2373 +#, c-format +msgid "%.*f kB" +msgstr "%.*f kB" + +#: ../src/html/helpwnd.cpp:1045 +#: ../src/html/helpwnd.cpp:1047 +#: ../src/html/helpwnd.cpp:1679 +#: ../src/html/helpwnd.cpp:1717 +#, c-format +msgid "%i of %i" +msgstr "%i de %i" + +#: ../src/generic/filedlgg.cpp:360 +#, c-format +msgid "%ld byte" +msgid_plural "%ld bytes" +msgstr[0] "%ld octet" +msgstr[1] "%ld octets" + +#: ../src/common/cmdline.cpp:870 +#, c-format +msgid "%s (or %s)" +msgstr "%s (ou %s)" + +#: ../src/common/filename.cpp:2371 +#, c-format +msgid "%s B" +msgstr "%s B" + +#: ../src/generic/logg.cpp:265 +#, c-format +msgid "%s Error" +msgstr "%s Erreur" + +#: ../src/generic/logg.cpp:273 +#, c-format +msgid "%s Information" +msgstr "%s Information" + +#: ../src/generic/logg.cpp:269 +#, c-format +msgid "%s Warning" +msgstr "%s Avertissement" + +#: ../src/common/tarstrm.cpp:1307 +#, c-format +msgid "%s did not fit the tar header for entry '%s'" +msgstr "%s ne rentre pas dans l'entête tar pour l'entrée '%s'" + +#: ../src/common/fldlgcmn.cpp:94 +#, c-format +msgid "%s files (%s)|%s" +msgstr "%s fichiers (%s)|%s" + +#: ../src/common/msgout.cpp:217 +#, c-format +msgid "%s message" +msgstr "%s message" + +#: ../contrib/src/deprecated/resource.cpp:2400 +#, c-format +msgid "%s not a bitmap resource specification." +msgstr "%s n'est pas une spécification d'une ressource bitmap." + +#: ../contrib/src/deprecated/resource.cpp:2554 +#, c-format +msgid "%s not an icon resource specification." +msgstr "%s n'est pas une spécification d'une ressource icône." + +#: ../contrib/src/deprecated/resource.cpp:1901 +#: ../contrib/src/deprecated/resource.cpp:2030 +#: ../contrib/src/deprecated/resource.cpp:3133 +#, c-format +msgid "%s: ill-formed resource file syntax." +msgstr "%s : syntaxe du fichier de ressource malformée." + +#: ../src/common/stockitem.cpp:110 +msgid "&About" +msgstr "À &propos..." + +#: ../src/html/helpfrm.cpp:123 +#: ../src/html/helpfrm.cpp:125 +msgid "&About..." +msgstr "À &propos..." + +#: ../src/common/stockitem.cpp:160 +msgid "&Actual Size" +msgstr "&Taille actuelle" + +#: ../src/richtext/richtextindentspage.cpp:296 +#, fuzzy +msgid "&After a paragraph:" +msgstr "Après un paragraphe:" + +#: ../src/richtext/richtextliststylepage.cpp:318 +#: ../src/richtext/richtextindentspage.cpp:138 +msgid "&Alignment" +msgstr "&Alignement" + +#: ../src/common/stockitem.cpp:112 +msgid "&Apply" +msgstr "&Appliquer" + +#: ../src/richtext/richtextstyledlg.cpp:237 +msgid "&Apply Style" +msgstr "&Appliquer le style" + +#: ../src/msw/mdi.cpp:175 +msgid "&Arrange Icons" +msgstr "&Arranger les icônes" + +#: ../src/common/stockitem.cpp:124 +msgid "&Back" +msgstr "&Retour" + +#: ../src/richtext/richtextstylepage.cpp:112 +msgid "&Based on:" +msgstr "&Basé sur:" + +#: ../src/richtext/richtextindentspage.cpp:284 +#, fuzzy +msgid "&Before a paragraph:" +msgstr "Avant un paragraphe:" + +#: ../src/common/stockitem.cpp:113 +msgid "&Bold" +msgstr "&Gras" + +#: ../src/richtext/richtextliststylepage.cpp:209 +#: ../src/richtext/richtextbulletspage.cpp:157 +msgid "&Bullet style:" +msgstr "Style de ti&ret:" + +#: ../src/common/stockitem.cpp:114 +#: ../src/generic/fontdlgg.cpp:377 +#: ../src/generic/fontdlgg.cpp:396 +#: ../src/generic/wizard.cpp:460 +#: ../src/mac/carbon/fontdlg.cpp:525 +msgid "&Cancel" +msgstr "&Annuler" + +#: ../src/msw/mdi.cpp:171 +msgid "&Cascade" +msgstr "&Cascade" + +#: ../src/richtext/richtextsymboldlg.cpp:438 +msgid "&Character code:" +msgstr "&Code caractère" + +#: ../src/common/stockitem.cpp:115 +msgid "&Clear" +msgstr "&Supprimer" + +#: ../src/common/prntbase.cpp:1102 +#: ../src/common/stockitem.cpp:116 +#: ../src/html/helpfrm.cpp:120 +#: ../src/generic/logg.cpp:515 +msgid "&Close" +msgstr "&Fermer" + +#: ../src/richtext/richtextfontpage.cpp:213 +msgid "&Colour:" +msgstr "C&ouleur :" + +#: ../src/common/stockitem.cpp:117 +#: ../src/richtext/richtextctrl.cpp:2582 +#: ../src/msw/textctrl.cpp:2304 +#: ../src/mac/carbon/textctrl.cpp:1043 +msgid "&Copy" +msgstr "&Copier" + +#: ../src/generic/hyperlink.cpp:160 +#, fuzzy +msgid "&Copy URL" +msgstr "&Copier" + +#: ../src/generic/dbgrptg.cpp:330 +msgid "&Debug report preview:" +msgstr "Aperçu du rapport de &débogage :" + +#: ../src/common/stockitem.cpp:119 +#: ../src/richtext/richtextctrl.cpp:2584 +#: ../src/richtext/richtexttabspage.cpp:141 +#: ../src/msw/textctrl.cpp:2306 +#: ../src/mac/carbon/textctrl.cpp:1045 +msgid "&Delete" +msgstr "&Supprimer" + +#: ../src/richtext/richtextstyledlg.cpp:255 +msgid "&Delete Style..." +msgstr "Su&pprimer le style" + +#: ../src/generic/logg.cpp:723 +msgid "&Details" +msgstr "&Détails" + +#: ../src/common/stockitem.cpp:125 +msgid "&Down" +msgstr "&Bas" + +#: ../src/common/stockitem.cpp:120 +msgid "&Edit" +msgstr "&Editer" + +#: ../src/richtext/richtextstyledlg.cpp:249 +msgid "&Edit Style..." +msgstr "Édit&er le style..." + +#: ../src/common/stockitem.cpp:122 +#: ../src/html/helpfrm.cpp:127 +msgid "&File" +msgstr "&Fichier" + +#: ../src/common/stockitem.cpp:121 +msgid "&Find" +msgstr "&Trouver" + +#: ../src/generic/wizard.cpp:655 +msgid "&Finish" +msgstr "&Finir" + +#: ../src/generic/fontdlgg.cpp:278 +msgid "&Font family:" +msgstr "&Famille de polices :" + +#: ../src/richtext/richtextliststylepage.cpp:193 +msgid "&Font for Level..." +msgstr "&Police de caractères pour le niveau..." + +#: ../src/richtext/richtextsymboldlg.cpp:399 +#: ../src/richtext/richtextfontpage.cpp:134 +msgid "&Font:" +msgstr "&Famille de polices :" + +#: ../src/common/stockitem.cpp:126 +msgid "&Forward" +msgstr "&Suivant" + +#: ../src/richtext/richtextsymboldlg.cpp:450 +msgid "&From:" +msgstr "De :" + +#: ../src/common/prntbase.cpp:1148 +msgid "&Goto..." +msgstr "&Aller à..." + +#: ../src/common/stockitem.cpp:128 +#: ../src/html/helpfrm.cpp:128 +#: ../src/generic/wizard.cpp:456 +#: ../src/generic/wizard.cpp:463 +msgid "&Help" +msgstr "&Aide" + +#: ../src/common/stockitem.cpp:129 +msgid "&Home" +msgstr "&Répertoire personnel" + +#: ../src/richtext/richtextliststylepage.cpp:371 +#: ../src/richtext/richtextindentspage.cpp:194 +msgid "&Indentation (tenths of a mm)" +msgstr "&Indentation (dixièmes de mm)" + +#: ../src/richtext/richtextliststylepage.cpp:355 +#: ../src/richtext/richtextindentspage.cpp:177 +msgid "&Indeterminate" +msgstr "&Indeterminé" + +#: ../src/common/stockitem.cpp:131 +msgid "&Index" +msgstr "&Index" + +#: ../src/common/stockitem.cpp:132 +msgid "&Italic" +msgstr "&Italique" + +#: ../src/richtext/richtextliststylepage.cpp:341 +#: ../src/richtext/richtextindentspage.cpp:163 +msgid "&Justified" +msgstr "&Justifié" + +#: ../src/richtext/richtextliststylepage.cpp:327 +#: ../src/richtext/richtextindentspage.cpp:149 +msgid "&Left" +msgstr "&Gauche" + +#: ../src/richtext/richtextliststylepage.cpp:380 +#: ../src/richtext/richtextindentspage.cpp:205 +msgid "&Left:" +msgstr "&Gauche:" + +#: ../src/richtext/richtextliststylepage.cpp:182 +msgid "&List level:" +msgstr "Niveau de &Liste:" + +#: ../src/generic/logg.cpp:516 +msgid "&Log" +msgstr "&Journal" + +#: ../src/univ/themes/win32.cpp:3734 +msgid "&Move" +msgstr "&Déplacer" + +#: ../src/common/stockitem.cpp:137 +#: ../src/richtext/richtexttabspage.cpp:135 +msgid "&New" +msgstr "&Nouveau" + +#: ../src/aui/tabmdi.cpp:108 +#: ../src/generic/mdig.cpp:118 +#: ../src/msw/mdi.cpp:176 +msgid "&Next" +msgstr "&Suivant" + +#: ../src/generic/wizard.cpp:459 +#: ../src/generic/wizard.cpp:655 +msgid "&Next >" +msgstr "&Suivant >" + +#: ../src/generic/tipdlg.cpp:274 +msgid "&Next Tip" +msgstr "&Astuce suivante" + +#: ../src/richtext/richtextstylepage.cpp:122 +msgid "&Next style:" +msgstr "&Style Suivant :" + +#: ../src/common/stockitem.cpp:138 +msgid "&No" +msgstr "&Non" + +#: ../src/generic/dbgrptg.cpp:352 +msgid "&Notes:" +msgstr "&Notes :" + +#: ../src/richtext/richtextbulletspage.cpp:262 +msgid "&Number:" +msgstr "&Numéro" + +#: ../src/common/stockitem.cpp:139 +#: ../src/generic/fontdlgg.cpp:382 +#: ../src/generic/fontdlgg.cpp:389 +#: ../src/mac/carbon/fontdlg.cpp:531 +msgid "&OK" +msgstr "&Accepter" + +#: ../src/common/stockitem.cpp:140 +msgid "&Open" +msgstr "&Ouvrir" + +#: ../src/html/helpfrm.cpp:118 +msgid "&Open..." +msgstr "&Ouvrir..." + +#: ../src/richtext/richtextindentspage.cpp:241 +#, fuzzy +msgid "&Outline level:" +msgstr "Niveau de &Liste:" + +#: ../src/common/stockitem.cpp:141 +#: ../src/richtext/richtextctrl.cpp:2583 +#: ../src/msw/textctrl.cpp:2305 +#: ../src/mac/carbon/textctrl.cpp:1044 +msgid "&Paste" +msgstr "&Coller" + +#: ../src/generic/fontdlgg.cpp:329 +msgid "&Point size:" +msgstr "Taille de &point :" + +#: ../src/richtext/richtexttabspage.cpp:113 +msgid "&Position (tenths of a mm):" +msgstr "&Position (dizièmes de mm):" + +#: ../src/common/stockitem.cpp:142 +msgid "&Preferences" +msgstr "&Préférences" + +#: ../src/aui/tabmdi.cpp:109 +#: ../src/generic/mdig.cpp:119 +#: ../src/msw/mdi.cpp:177 +msgid "&Previous" +msgstr "&Précédent" + +#: ../src/common/stockitem.cpp:143 +msgid "&Print" +msgstr "&Imprimer" + +#: ../src/common/prntbase.cpp:1107 +msgid "&Print..." +msgstr "&Imprimer..." + +#: ../src/common/stockitem.cpp:145 +msgid "&Properties" +msgstr "&Propriétés" + +#: ../src/common/stockitem.cpp:146 +msgid "&Quit" +msgstr "&Quitter" + +#: ../src/common/cmdproc.cpp:288 +#: ../src/common/cmdproc.cpp:295 +#: ../src/common/stockitem.cpp:147 +#: ../src/richtext/richtextctrl.cpp:2579 +#: ../src/msw/textctrl.cpp:2301 +#: ../src/mac/carbon/textctrl.cpp:1040 +msgid "&Redo" +msgstr "&Refaire" + +#: ../src/common/cmdproc.cpp:284 +#: ../src/common/cmdproc.cpp:304 +msgid "&Redo " +msgstr "&Refaire " + +#: ../src/richtext/richtextstyledlg.cpp:243 +msgid "&Rename Style..." +msgstr "&Renommer le style..." + +#: ../src/generic/fdrepdlg.cpp:178 +msgid "&Replace" +msgstr "&Remplacer" + +#: ../src/richtext/richtextstyledlg.cpp:273 +msgid "&Restart numbering" +msgstr "&Recommencer la numérotation" + +#: ../src/univ/themes/win32.cpp:3733 +msgid "&Restore" +msgstr "&Restaurer" + +#: ../src/richtext/richtextliststylepage.cpp:334 +#: ../src/richtext/richtextindentspage.cpp:156 +msgid "&Right" +msgstr "&Droite" + +#: ../src/richtext/richtextliststylepage.cpp:402 +#: ../src/richtext/richtextindentspage.cpp:229 +msgid "&Right:" +msgstr "&Droite :" + +#: ../src/common/stockitem.cpp:151 +msgid "&Save" +msgstr "&Enregistrer" + +#: ../src/generic/logg.cpp:511 +msgid "&Save..." +msgstr "&Enregistrer..." + +#: ../src/generic/tipdlg.cpp:268 +msgid "&Show tips at startup" +msgstr "&Afficher les astuces au démarrage" + +#: ../src/univ/themes/win32.cpp:3736 +msgid "&Size" +msgstr "&Taille" + +#: ../src/richtext/richtextfontpage.cpp:152 +msgid "&Size:" +msgstr "&Taille :" + +#: ../src/richtext/richtextliststylepage.cpp:422 +#: ../src/richtext/richtextindentspage.cpp:272 +msgid "&Spacing (tenths of a mm)" +msgstr "E&spacement (dixièmes de mm)" + +#: ../src/common/stockitem.cpp:154 +msgid "&Stop" +msgstr "&Arrêter" + +#: ../src/richtext/richtextfontpage.cpp:225 +msgid "&Strikethrough" +msgstr "" + +#: ../src/richtext/richtextstylepage.cpp:103 +#: ../src/generic/fontdlgg.cpp:289 +msgid "&Style:" +msgstr "&Style :" + +#: ../src/richtext/richtextstyledlg.cpp:190 +msgid "&Styles:" +msgstr "&Style :" + +#: ../src/richtext/richtextsymboldlg.cpp:412 +msgid "&Subset:" +msgstr "&Sous-ensemble:" + +#: ../src/richtext/richtextliststylepage.cpp:267 +#: ../src/richtext/richtextbulletspage.cpp:217 +msgid "&Symbol:" +msgstr "&Symbole :" + +#: ../src/common/stockitem.cpp:156 +#: ../src/generic/fontdlgg.cpp:351 +msgid "&Underline" +msgstr "&Souligner" + +#: ../src/richtext/richtextfontpage.cpp:200 +msgid "&Underlining:" +msgstr "So&uligner:" + +#: ../src/common/cmdproc.cpp:266 +#: ../src/common/stockitem.cpp:157 +#: ../src/richtext/richtextctrl.cpp:2578 +#: ../src/msw/textctrl.cpp:2300 +#: ../src/mac/carbon/textctrl.cpp:1039 +msgid "&Undo" +msgstr "&Annuler" + +#: ../src/common/cmdproc.cpp:260 +msgid "&Undo " +msgstr "&Annuler " + +#: ../src/common/stockitem.cpp:158 +msgid "&Unindent" +msgstr "&Désindenter" + +#: ../src/common/stockitem.cpp:127 +msgid "&Up" +msgstr "&Haut" + +#: ../src/generic/fontdlgg.cpp:300 +msgid "&Weight:" +msgstr "&Largeur :" + +#: ../src/aui/tabmdi.cpp:300 +#: ../src/aui/tabmdi.cpp:316 +#: ../src/aui/tabmdi.cpp:318 +#: ../src/generic/mdig.cpp:298 +#: ../src/generic/mdig.cpp:314 +#: ../src/generic/mdig.cpp:318 +#: ../src/msw/mdi.cpp:1436 +#: ../src/msw/mdi.cpp:1443 +#: ../src/msw/mdi.cpp:1473 +msgid "&Window" +msgstr "&Fenêtre" + +#: ../src/common/stockitem.cpp:159 +msgid "&Yes" +msgstr "&Oui" + +#: ../src/common/config.cpp:469 +#: ../src/msw/regconf.cpp:253 +#, c-format +msgid "'%s' has extra '..', ignored." +msgstr "« %s » a trop de « .. » : ils sont ignorés." + +#: ../src/common/valtext.cpp:128 +#: ../src/common/valtext.cpp:158 +#: ../src/common/valtext.cpp:164 +#, c-format +msgid "'%s' is invalid" +msgstr "« %s » n'est pas valable" + +#: ../src/common/cmdline.cpp:786 +#, c-format +msgid "'%s' is not a correct numeric value for option '%s'." +msgstr "« %s » n'est pas une valeur numérique correcte pour l'option « %s »." + +#: ../src/common/intl.cpp:1202 +#, c-format +msgid "'%s' is not a valid message catalog." +msgstr "« %s » n'est pas un catalogue valable de messages." + +#: ../src/common/textbuf.cpp:245 +#, c-format +msgid "'%s' is probably a binary buffer." +msgstr "« %s » est probablement un tampon binaire." + +#: ../src/common/valtext.cpp:153 +#, c-format +msgid "'%s' should be numeric." +msgstr "« %s » doit être numérique." + +#: ../src/common/valtext.cpp:135 +#, c-format +msgid "'%s' should only contain ASCII characters." +msgstr "« %s » ne doit contenir que des caractères ASCII." + +#: ../src/common/valtext.cpp:141 +#, c-format +msgid "'%s' should only contain alphabetic characters." +msgstr "« %s » ne doit contenir que des caractères alphabétiques." + +#: ../src/common/valtext.cpp:147 +#, c-format +msgid "'%s' should only contain alphabetic or numeric characters." +msgstr "« %s » ne doit contenir que des caractères alphanumériques." + +#: ../src/richtext/richtextliststylepage.cpp:228 +#: ../src/richtext/richtextbulletspage.cpp:177 +msgid "(*)" +msgstr "(*)" + +#: ../src/html/helpwnd.cpp:980 +msgid "(Help)" +msgstr "(Aide)" + +#: ../src/richtext/richtextliststylepage.cpp:483 +#: ../src/richtext/richtextbulletspage.cpp:281 +msgid "(None)" +msgstr "(Aucun)" + +#: ../src/richtext/richtextsymboldlg.cpp:524 +msgid "(Normal text)" +msgstr "(Texte normale)" + +#: ../src/html/helpwnd.cpp:412 +#: ../src/html/helpwnd.cpp:1116 +#: ../src/html/helpwnd.cpp:1744 +msgid "(bookmarks)" +msgstr "(signets)" + +#: ../src/richtext/richtextformatdlg.cpp:627 +msgid "(none)" +msgstr "(aucun)" + +#: ../src/richtext/richtextliststylepage.cpp:494 +#: ../src/richtext/richtextbulletspage.cpp:292 +msgid "*" +msgstr "*" + +#: ../src/richtext/richtextliststylepage.cpp:235 +#: ../src/richtext/richtextbulletspage.cpp:184 +msgid "*)" +msgstr "*)" + +#: ../src/richtext/richtextliststylepage.cpp:497 +#: ../src/richtext/richtextbulletspage.cpp:295 +msgid "+" +msgstr "+" + +#: ../contrib/src/deprecated/resource.cpp:1840 +#: ../contrib/src/deprecated/resource.cpp:1970 +#: ../contrib/src/deprecated/resource.cpp:3072 +msgid "" +", expected static, #include or #define\n" +"while parsing resource." +msgstr "" +", static, #include ou #define\n" +"attendu lors de l'analyse des ressources." + +#: ../src/richtext/richtextliststylepage.cpp:495 +#: ../src/richtext/richtextbulletspage.cpp:293 +msgid "-" +msgstr "-" + +#: ../src/richtext/richtextindentspage.cpp:246 +msgid "1" +msgstr "" + +#: ../src/richtext/richtextliststylepage.cpp:460 +#: ../src/richtext/richtextindentspage.cpp:315 +msgid "1.5" +msgstr "1,5" + +#: ../src/common/paper.cpp:142 +msgid "10 x 11 in" +msgstr "10 x 11 pouces" + +#: ../src/common/paper.cpp:115 +msgid "10 x 14 in" +msgstr "10 x 14 pouces" + +#: ../src/common/paper.cpp:116 +msgid "11 x 17 in" +msgstr "11 x 17 pouces" + +#: ../src/common/paper.cpp:186 +msgid "12 x 11 in" +msgstr "12 x 11 pouces" + +#: ../src/common/paper.cpp:143 +msgid "15 x 11 in" +msgstr "15 x 11 pouces" + +#: ../src/richtext/richtextliststylepage.cpp:461 +#: ../src/richtext/richtextindentspage.cpp:247 +#: ../src/richtext/richtextindentspage.cpp:316 +msgid "2" +msgstr "2" + +#: ../src/richtext/richtextindentspage.cpp:248 +msgid "3" +msgstr "" + +#: ../src/richtext/richtextindentspage.cpp:249 +msgid "4" +msgstr "" + +#: ../src/richtext/richtextindentspage.cpp:250 +msgid "5" +msgstr "" + +#: ../src/richtext/richtextindentspage.cpp:251 +msgid "6" +msgstr "" + +#: ../src/common/paper.cpp:134 +msgid "6 3/4 Envelope, 3 5/8 x 6 1/2 in" +msgstr "Enveloppe 6 3/4 (3,625 x 6,5 pouces)" + +#: ../src/richtext/richtextindentspage.cpp:252 +msgid "7" +msgstr "" + +#: ../src/richtext/richtextindentspage.cpp:253 +msgid "8" +msgstr "" + +#: ../src/richtext/richtextindentspage.cpp:254 +msgid "9" +msgstr "" + +#: ../src/common/paper.cpp:141 +msgid "9 x 11 in" +msgstr "9 x 11 pouces" + +#: ../src/html/htmprint.cpp:303 +msgid ": file does not exist!" +msgstr " : le fichier n'existe pas." + +#: ../src/common/fontmap.cpp:197 +msgid ": unknown charset" +msgstr " : jeu de caractères inconnu" + +#: ../src/common/fontmap.cpp:411 +msgid ": unknown encoding" +msgstr " : codage inconnu" + +#: ../src/generic/wizard.cpp:465 +msgid "< &Back" +msgstr "< &Retour" + +#: ../src/common/prntbase.cpp:1130 +msgid "<<" +msgstr "<<" + +#: ../src/mac/carbon/fontdlg.cpp:545 +#: ../src/mac/carbon/fontdlg.cpp:752 +#: ../src/mac/carbon/fontdlg.cpp:772 +msgid "" +msgstr "" + +#: ../src/mac/carbon/fontdlg.cpp:546 +#: ../src/mac/carbon/fontdlg.cpp:754 +#: ../src/mac/carbon/fontdlg.cpp:774 +msgid "" +msgstr "" + +#: ../src/mac/carbon/fontdlg.cpp:544 +#: ../src/mac/carbon/fontdlg.cpp:750 +#: ../src/mac/carbon/fontdlg.cpp:770 +msgid "" +msgstr "" + +#: ../src/mac/carbon/fontdlg.cpp:547 +#: ../src/mac/carbon/fontdlg.cpp:756 +#: ../src/mac/carbon/fontdlg.cpp:776 +msgid "" +msgstr "" + +#: ../src/mac/carbon/fontdlg.cpp:548 +#: ../src/mac/carbon/fontdlg.cpp:761 +#: ../src/mac/carbon/fontdlg.cpp:780 +msgid "" +msgstr "" + +#: ../src/mac/carbon/fontdlg.cpp:549 +#: ../src/mac/carbon/fontdlg.cpp:758 +#: ../src/mac/carbon/fontdlg.cpp:778 +msgid "" +msgstr "" + +#: ../src/mac/carbon/fontdlg.cpp:543 +msgid "" +msgstr "" + +#: ../src/generic/filedlgg.cpp:331 +#: ../src/generic/filedlgg.cpp:354 +msgid "" +msgstr "" + +#: ../src/generic/filedlgg.cpp:335 +#: ../src/generic/filedlgg.cpp:358 +msgid "" +msgstr "" + +#: ../src/generic/filedlgg.cpp:333 +#: ../src/generic/filedlgg.cpp:356 +msgid "" +msgstr "" + +#: ../src/html/helpwnd.cpp:1272 +msgid "Bold italic face.
" +msgstr "Gras italique.
" + +#: ../src/html/helpwnd.cpp:1276 +msgid "bold italic underlined
" +msgstr "gras italique souligné
" + +#: ../src/html/helpwnd.cpp:1271 +msgid "Bold face. " +msgstr "Gras. " + +#: ../src/html/helpwnd.cpp:1270 +msgid "Italic face. " +msgstr "Italique. " + +#: ../src/richtext/richtextliststylepage.cpp:496 +#: ../src/richtext/richtextbulletspage.cpp:294 +msgid ">" +msgstr ">" + +#: ../src/common/prntbase.cpp:1136 +msgid ">>" +msgstr ">>" + +#: ../src/common/prntbase.cpp:1142 +msgid ">>|" +msgstr ">>|" + +#: ../src/generic/dbgrptg.cpp:314 +msgid "A debug report has been generated in the directory\n" +msgstr "Un rapport de débogage a été créé dans le dossier\n" + +#: ../src/common/debugrpt.cpp:565 +#, fuzzy +msgid "A debug report has been generated. It can be found in" +msgstr "Un rapport de débogage a été créé dans le dossier\n" + +#: ../src/common/xtixml.cpp:406 +msgid "A non empty collection must consist of 'element' nodes" +msgstr "Une collection non vide doit comprendre des noeuds « éléments »" + +#: ../src/richtext/richtextliststylepage.cpp:303 +#: ../src/richtext/richtextliststylepage.cpp:305 +#: ../src/richtext/richtextbulletspage.cpp:255 +#: ../src/richtext/richtextbulletspage.cpp:257 +msgid "A standard bullet name." +msgstr "Un nom de tiret standard." + +#: ../src/common/paper.cpp:161 +msgid "A2 420 x 594 mm" +msgstr "A2 420 x 594 mm" + +#: ../src/common/paper.cpp:158 +msgid "A3 Extra 322 x 445 mm" +msgstr "A3 Extra 322 x 445 mm" + +#: ../src/common/paper.cpp:163 +msgid "A3 Extra Transverse 322 x 445 mm" +msgstr "A3 Extra, Paysage, 322 x 445 mm" + +#: ../src/common/paper.cpp:172 +msgid "A3 Rotated 420 x 297 mm" +msgstr "A3 Paysage 420 x 297 mm" + +#: ../src/common/paper.cpp:162 +msgid "A3 Transverse 297 x 420 mm" +msgstr "A3 Portrait 297 x 420 mm" + +#: ../src/common/paper.cpp:108 +msgid "A3 sheet, 297 x 420 mm" +msgstr "Feuille A3, 297 x 420 mm" + +#: ../src/common/paper.cpp:148 +msgid "A4 Extra 9.27 x 12.69 in" +msgstr "A4 Extra 9.27 x 12.69 pouces" + +#: ../src/common/paper.cpp:155 +msgid "A4 Plus 210 x 330 mm" +msgstr "A4 Plus 210 x 330 mm" + +#: ../src/common/paper.cpp:173 +msgid "A4 Rotated 297 x 210 mm" +msgstr "A4 Paysage 297 x 210 mm" + +#: ../src/common/paper.cpp:150 +msgid "A4 Transverse 210 x 297 mm" +msgstr "A4 Portrait 210 x 297 mm" + +#: ../src/common/paper.cpp:99 +msgid "A4 sheet, 210 x 297 mm" +msgstr "Feuille A4, 210 x 297 mm" + +#: ../src/common/paper.cpp:109 +msgid "A4 small sheet, 210 x 297 mm" +msgstr "Petite feuille A4, 210 x 297 mm" + +#: ../src/common/paper.cpp:159 +msgid "A5 Extra 174 x 235 mm" +msgstr "A5 Extra 174 x 235 mm" + +#: ../src/common/paper.cpp:174 +msgid "A5 Rotated 210 x 148 mm" +msgstr "A5 Paysage 210 x 148 mm" + +#: ../src/common/paper.cpp:156 +msgid "A5 Transverse 148 x 210 mm" +msgstr "A5 Portrait 148 x 210 mm" + +#: ../src/common/paper.cpp:110 +msgid "A5 sheet, 148 x 210 mm" +msgstr "Feuille A5, 148 x 210 mm" + +#: ../src/common/paper.cpp:166 +msgid "A6 105 x 148 mm" +msgstr "A6 105 x 148 mm" + +#: ../src/common/paper.cpp:179 +msgid "A6 Rotated 148 x 105 mm" +msgstr "A6 Paysage 148 x 105 mm" + +#: ../src/richtext/richtextformatdlg.cpp:416 +#: ../src/generic/fontdlgg.cpp:87 +#: ../src/mac/carbon/fontdlg.cpp:276 +msgid "ABCDEFGabcdefg12345" +msgstr "ABCDEFGabcdefg12345" + +#: ../src/common/menucmn.cpp:94 +msgid "ADD" +msgstr "AJOUTER" + +#: ../src/common/ftp.cpp:381 +#: ../src/richtext/richtextsymboldlg.cpp:457 +#: ../src/richtext/richtextsymboldlg.cpp:459 +#: ../src/richtext/richtextsymboldlg.cpp:460 +msgid "ASCII" +msgstr "ASCII" + +#: ../src/generic/aboutdlgg.cpp:106 +#: ../src/msw/aboutdlg.cpp:61 +msgid "About " +msgstr "À propos" + +#: ../src/common/stockitem.cpp:111 +msgid "Add" +msgstr "Ajouter" + +#: ../src/html/helpwnd.cpp:425 +msgid "Add current page to bookmarks" +msgstr "Ajouter la page courante aux signets" + +#: ../src/generic/colrdlgg.cpp:291 +msgid "Add to custom colours" +msgstr "Ajouter aux couleurs personnalisées" + +#: ../include/wx/xti.h:898 +msgid "AddToPropertyCollection called on a generic accessor" +msgstr "AddToPropertyCollection appelé sur un assesseur générique" + +#: ../include/wx/xti.h:845 +msgid "AddToPropertyCollection called w/o valid adder" +msgstr "AddToPropertyCollection appelé sans additionneur valable" + +#: ../src/html/helpctrl.cpp:139 +#, c-format +msgid "Adding book %s" +msgstr "Ajouter le manuel %s" + +#: ../src/richtext/richtextliststylepage.cpp:442 +msgid "After a paragraph:" +msgstr "Après un paragraphe:" + +#: ../src/common/stockitem.cpp:135 +msgid "Align Left" +msgstr "Aligner à gauche" + +#: ../src/common/stockitem.cpp:136 +msgid "Align Right" +msgstr "Aligner à droite" + +#: ../src/generic/prntdlgg.cpp:214 +msgid "All" +msgstr "Tout" + +#: ../src/common/fldlgcmn.cpp:77 +#, c-format +msgid "All files (%s)|%s" +msgstr "Tous les fichiers (%s)|%s" + +#: ../include/wx/defs.h:2334 +msgid "All files (*)|*" +msgstr "Tous les fichiers (*)|*" + +#: ../src/html/helpwnd.cpp:1554 +msgid "All files (*.*)|*" +msgstr "Tous les fichiers (*.*)|*" + +#: ../include/wx/defs.h:2331 +msgid "All files (*.*)|*.*" +msgstr "Tous les fichiers (*.*)|*.*" + +#: ../src/richtext/richtextstyles.cpp:848 +msgid "All styles" +msgstr "Tous les styles" + +#: ../src/common/xtistrm.cpp:381 +msgid "Already Registered Object passed to SetObjectClassInfo" +msgstr "Objet déjà enregistré envoyé à SetObjectClassInfo" + +#: ../src/unix/dialup.cpp:356 +msgid "Already dialling ISP." +msgstr "Déjà en cours d'appel du FAI." + +#: ../src/common/menucmn.cpp:314 +msgid "Alt-" +msgstr "Alt-" + +#: ../src/common/debugrpt.cpp:568 +#, fuzzy +msgid "And includes the following files:\n" +msgstr "*** Et inclut les fichiers suivants :\n" + +#: ../src/generic/animateg.cpp:163 +#, c-format +msgid "Animation file is not of type %ld." +msgstr "Le fichier animé n'est pas du type %ld." + +#: ../src/generic/logg.cpp:1169 +#, c-format +msgid "Append log to file '%s' (choosing [No] will overwrite it)?" +msgstr "Ajouter le journal au fichier « %s » (choisir [Non] l'écrasera) ?" + +#: ../src/richtext/richtextliststylepage.cpp:484 +#: ../src/richtext/richtextbulletspage.cpp:282 +msgid "Arabic" +msgstr "Arabe" + +#: ../src/common/fmapbase.cpp:111 +msgid "Arabic (ISO-8859-6)" +msgstr "Arabe (ISO-8859-6)" + +#: ../src/html/chm.cpp:564 +msgid "Archive doesnt contain #SYSTEM file" +msgstr "L'archive ne contient pas de fichier #SYSTEM" + +#: ../src/generic/aboutdlgg.cpp:150 +msgid "Artists" +msgstr "" + +#: ../src/generic/filedlgg.cpp:515 +msgid "Attributes" +msgstr "Attributs" + +#: ../src/richtext/richtextliststylepage.cpp:293 +#: ../src/richtext/richtextbulletspage.cpp:243 +#: ../src/richtext/richtextbulletspage.cpp:245 +msgid "Available fonts." +msgstr "Polices de caractères disponibles." + +#: ../src/common/paper.cpp:139 +msgid "B4 (ISO) 250 x 353 mm" +msgstr "B4 (ISO) 250 x 353 mm" + +#: ../src/common/paper.cpp:175 +msgid "B4 (JIS) Rotated 364 x 257 mm" +msgstr "B4 (JIS) Paysage 364 x 257 mm" + +#: ../src/common/paper.cpp:129 +msgid "B4 Envelope, 250 x 353 mm" +msgstr "Enveloppe B4, 250 x 353 mm" + +#: ../src/common/paper.cpp:111 +msgid "B4 sheet, 250 x 354 mm" +msgstr "Feuille B4, 250 x 354 mm" + +#: ../src/common/paper.cpp:160 +msgid "B5 (ISO) Extra 201 x 276 mm" +msgstr "B5 (ISO) Extra 201 x 276 mm" + +#: ../src/common/paper.cpp:176 +msgid "B5 (JIS) Rotated 257 x 182 mm" +msgstr "B5 (JIS) Paysage 257 x 182 mm" + +#: ../src/common/paper.cpp:157 +msgid "B5 (JIS) Transverse 182 x 257 mm" +msgstr "B5 (JIS), Paysage, 182 x 257 mm" + +#: ../src/common/paper.cpp:130 +msgid "B5 Envelope, 176 x 250 mm" +msgstr "Enveloppe B5, 176 x 250 mm" + +#: ../src/common/paper.cpp:112 +msgid "B5 sheet, 182 x 257 millimeter" +msgstr "Feuille B5, 182 x 257 mm" + +#: ../src/common/paper.cpp:184 +msgid "B6 (JIS) 128 x 182 mm" +msgstr "B6 (JIS) 128 x 182 mm" + +#: ../src/common/paper.cpp:185 +msgid "B6 (JIS) Rotated 182 x 128 mm" +msgstr "B6 (JIS) Paysage 182 x 128 mm" + +#: ../src/common/paper.cpp:131 +msgid "B6 Envelope, 176 x 125 mm" +msgstr "Enveloppe B6, 176 x 125 mm" + +#: ../src/common/menucmn.cpp:67 +msgid "BACK" +msgstr "RETOUR" + +#: ../src/common/fmapbase.cpp:152 +msgid "BIG5" +msgstr "BIG5" + +#: ../src/common/imagbmp.cpp:474 +#: ../src/common/imagbmp.cpp:490 +msgid "BMP: Couldn't allocate memory." +msgstr "BMP : impossible d'allouer de la mémoire." + +#: ../src/common/imagbmp.cpp:91 +msgid "BMP: Couldn't save invalid image." +msgstr "BMP : impossible de sauvegarder une image non valable." + +#: ../src/common/imagbmp.cpp:295 +msgid "BMP: Couldn't write RGB color map." +msgstr "BMP : impossible d'écrire la palette de couleurs RGB." + +#: ../src/common/imagbmp.cpp:428 +msgid "BMP: Couldn't write data." +msgstr "BMP : impossible d'écrire les données." + +#: ../src/common/imagbmp.cpp:200 +msgid "BMP: Couldn't write the file (Bitmap) header." +msgstr "BMP : impossible d'écrire l'en-tête du fichier (Bitmap)." + +#: ../src/common/imagbmp.cpp:221 +msgid "BMP: Couldn't write the file (BitmapInfo) header." +msgstr "BMP : impossible d'écrire l'en-tête du fichier (BitmapInfo)." + +#: ../src/common/imagbmp.cpp:125 +msgid "BMP: wxImage doesn't have own wxPalette." +msgstr "BMP : wxImage n'a pas sa propre wxPalette." + +#: ../src/mac/carbon/fontdlg.cpp:343 +msgid "Background colour" +msgstr "Couleur d'arrière plan" + +#: ../src/common/fmapbase.cpp:118 +msgid "Baltic (ISO-8859-13)" +msgstr "Balte (ISO-8859-13)" + +#: ../src/common/fmapbase.cpp:109 +msgid "Baltic (old) (ISO-8859-4)" +msgstr "Balte (ancien) (ISO-8859-4)" + +#: ../src/richtext/richtextliststylepage.cpp:431 +msgid "Before a paragraph:" +msgstr "Avant un paragraphe:" + +#: ../src/richtext/richtextliststylepage.cpp:491 +#: ../src/richtext/richtextbulletspage.cpp:289 +msgid "Bitmap" +msgstr "Image bitmap" + +#: ../contrib/src/deprecated/resource.cpp:2534 +#, c-format +msgid "Bitmap resource specification %s not found." +msgstr "Spécification %s de la ressource bitmap introuvable." + +#: ../src/richtext/richtextfontpage.cpp:269 +#: ../src/richtext/richtextfontpage.cpp:340 +#: ../src/richtext/richtextfontpage.cpp:592 +#: ../src/generic/fontdlgg.cpp:240 +#: ../src/mac/carbon/fontdlg.cpp:477 +msgid "Bold" +msgstr "Gras" + +#: ../src/generic/prntdlgg.cpp:891 +msgid "Bottom margin (mm):" +msgstr "Marge de bas de page (mm) :" + +#: ../src/richtext/richtextliststylepage.cpp:244 +#: ../src/richtext/richtextbulletspage.cpp:193 +msgid "Bullet &Alignment:" +msgstr "&Alignement des tirets:" + +#: ../src/richtext/richtextliststylepage.cpp:308 +msgid "Bullet style" +msgstr "Style des tirets" + +#: ../src/richtext/richtextformatdlg.cpp:293 +msgid "Bullets" +msgstr "Tirets" + +#: ../src/common/paper.cpp:100 +msgid "C sheet, 17 x 22 in" +msgstr "Feuille C, 17 x 22 mm" + +#: ../src/generic/logg.cpp:513 +msgid "C&lear" +msgstr "&Effacer" + +#: ../src/generic/fontdlgg.cpp:313 +msgid "C&olour:" +msgstr "C&ouleur :" + +#: ../src/common/paper.cpp:125 +msgid "C3 Envelope, 324 x 458 mm" +msgstr "Enveloppe C3, 324 x 458 mm" + +#: ../src/common/paper.cpp:126 +msgid "C4 Envelope, 229 x 324 mm" +msgstr "Enveloppe C4, 229 x 324 mm" + +#: ../src/common/paper.cpp:124 +msgid "C5 Envelope, 162 x 229 mm" +msgstr "Enveloppe C5, 162 x 229 mm" + +#: ../src/common/paper.cpp:127 +msgid "C6 Envelope, 114 x 162 mm" +msgstr "Enveloppe C6, 114 x 162 mm" + +#: ../src/common/paper.cpp:128 +msgid "C65 Envelope, 114 x 229 mm" +msgstr "Enveloppe C65, 114 x 229 mm" + +#: ../src/common/menucmn.cpp:84 +msgid "CANCEL" +msgstr "ANNULER" + +#: ../src/common/menucmn.cpp:88 +msgid "CAPITAL" +msgstr "MAJUSCULE" + +#: ../src/html/chm.cpp:797 +#: ../src/html/chm.cpp:856 +msgid "CHM handler currently supports only local files!" +msgstr "Le gestionnaire CHM ne gère actuellement que les fichiers locaux." + +#: ../src/common/menucmn.cpp:85 +msgid "CLEAR" +msgstr "SUPPRIMER" + +#: ../src/common/menucmn.cpp:129 +msgid "COMMAND" +msgstr "COMMANDE" + +#: ../src/richtext/richtextfontpage.cpp:232 +msgid "Ca&pitals" +msgstr "" + +#: ../src/os2/thread.cpp:116 +msgid "Can not create mutex." +msgstr "Impossible de créer le mutex." + +#: ../src/common/filefn.cpp:1383 +#, c-format +msgid "Can not enumerate files '%s'" +msgstr "Impossible d'énumérer les fichiers « %s »" + +#: ../src/unix/dir.cpp:228 +#: ../src/msw/dir.cpp:201 +#, c-format +msgid "Can not enumerate files in directory '%s'" +msgstr "Impossible d'énumérer les fichiers dans le répertoire « %s »" + +#: ../src/os2/thread.cpp:516 +#, c-format +msgid "Can not resume thread %lu" +msgstr "Impossible de reprendre le processus %lu" + +#: ../src/msw/thread.cpp:889 +#: ../src/mac/classic/thread.cpp:487 +#, c-format +msgid "Can not resume thread %x" +msgstr "Impossible de reprendre le processus %x" + +#: ../src/msw/thread.cpp:525 +msgid "Can not start thread: error writing TLS." +msgstr "Impossible de lancer le processus : erreur lors de l'écriture de TLS." + +#: ../src/os2/thread.cpp:502 +#, c-format +msgid "Can not suspend thread %lu" +msgstr "Impossible de suspendre le processus %lu" + +#: ../src/msw/thread.cpp:874 +#: ../src/mac/classic/thread.cpp:460 +#, c-format +msgid "Can not suspend thread %x" +msgstr "Impossible de suspendre le processus %x" + +#: ../src/msw/thread.cpp:793 +msgid "Can not wait for thread termination" +msgstr "Impossible d'attendre la fin du processus" + +#: ../src/common/cmdproc.cpp:262 +msgid "Can't &Undo " +msgstr "Impossible d'&annuler " + +#: ../src/common/image.cpp:2643 +#, c-format +msgid "Can't check image format of file '%s': file does not exist." +msgstr "Impossible de vérifier le format d'image du fichier « %s » : le fichier n'existe pas." + +#: ../src/msw/registry.cpp:448 +#, c-format +msgid "Can't close registry key '%s'" +msgstr "Impossible de fermer la clé de registre « %s »" + +#: ../src/msw/registry.cpp:524 +#, c-format +msgid "Can't copy values of unsupported type %d." +msgstr "Impossible de copier les valeurs de type %d non géré." + +#: ../src/msw/registry.cpp:429 +#, c-format +msgid "Can't create registry key '%s'" +msgstr "Impossible de créer la clé de registre « %s »" + +#: ../src/os2/thread.cpp:483 +#: ../src/msw/thread.cpp:651 +#: ../src/mac/classic/thread.cpp:435 +#: ../src/mac/carbon/mpthread.cpp:906 +msgid "Can't create thread" +msgstr "Impossible de créer le processus" + +#: ../src/msw/window.cpp:3605 +#, c-format +msgid "Can't create window of class %s" +msgstr "Impossible de créer la fenêtre de classe %s" + +#: ../src/msw/registry.cpp:700 +#, c-format +msgid "Can't delete key '%s'" +msgstr "Impossible d'effacer la clé « %s »" + +#: ../src/os2/iniconf.cpp:466 +#: ../src/msw/iniconf.cpp:435 +#, c-format +msgid "Can't delete the INI file '%s'" +msgstr "Impossible d'effacer le fichier INI « %s »" + +#: ../src/msw/registry.cpp:728 +#, c-format +msgid "Can't delete value '%s' from key '%s'" +msgstr "Impossible d'effacer la valeur « %s » de la clé « %s »" + +#: ../src/msw/registry.cpp:1080 +#, c-format +msgid "Can't enumerate subkeys of key '%s'" +msgstr "Impossible d'énumérer les sous-clés de la clé « %s »" + +#: ../src/msw/registry.cpp:1035 +#, c-format +msgid "Can't enumerate values of key '%s'" +msgstr "Impossible d'énumérer les valeurs de la clé « %s »" + +#: ../src/msw/registry.cpp:1297 +#, c-format +msgid "Can't export value of unsupported type %d." +msgstr "Impossible d'exporter les valeurs de type non géré %d." + +#: ../src/common/ffile.cpp:238 +#, c-format +msgid "Can't find current position in file '%s'" +msgstr "Impossible de trouver la position courante dans le fichier « %s »" + +#: ../src/msw/registry.cpp:357 +#, c-format +msgid "Can't get info about registry key '%s'" +msgstr "Impossible d'obtenir des informations sur la clé de registre « %s »" + +#: ../src/common/zstream.cpp:330 +msgid "Can't initialize zlib deflate stream." +msgstr "Impossible d'initialiser le flux de déchargement de zlib" + +#: ../src/common/zstream.cpp:176 +msgid "Can't initialize zlib inflate stream." +msgstr "Impossible d'initialiser le flux de chargement de zlib" + +#: ../src/common/image.cpp:2035 +#: ../src/common/image.cpp:2057 +#, c-format +msgid "Can't load image from file '%s': file does not exist." +msgstr "Impossible de charger l'image du fichier « %s » : le fichier n'existe pas." + +#: ../src/msw/registry.cpp:393 +#, c-format +msgid "Can't open registry key '%s'" +msgstr "Impossible d'ouvrir la clé de registre « %s »" + +#: ../src/common/zstream.cpp:246 +#, c-format +msgid "Can't read from inflate stream: %s" +msgstr "Impossible de lire le flux de chargement : %s" + +#: ../src/common/zstream.cpp:239 +msgid "Can't read inflate stream: unexpected EOF in underlying stream." +msgstr "Impossible de lire le flux de chargement : EOF inattendu dans le flux inférieur." + +#: ../src/msw/registry.cpp:968 +#, c-format +msgid "Can't read value of '%s'" +msgstr "Impossible de lire la valeur de « %s »" + +#: ../src/msw/registry.cpp:801 +#: ../src/msw/registry.cpp:831 +#: ../src/msw/registry.cpp:891 +#, c-format +msgid "Can't read value of key '%s'" +msgstr "Impossible de lire la valeur de la clé « %s »" + +#: ../src/common/image.cpp:2078 +#, c-format +msgid "Can't save image to file '%s': unknown extension." +msgstr "Impossible d'enregistrer l'image dans le fichier « %s » : extension inconnue." + +#: ../src/generic/logg.cpp:575 +#: ../src/generic/logg.cpp:1026 +msgid "Can't save log contents to file." +msgstr "Impossible d'enregistrer le contenu du journal dans le fichier." + +#: ../src/os2/thread.cpp:466 +#: ../src/msw/thread.cpp:607 +msgid "Can't set thread priority" +msgstr "Impossible de spécifier la priorité du processus" + +#: ../src/msw/registry.cpp:818 +#: ../src/msw/registry.cpp:860 +#: ../src/msw/registry.cpp:984 +#, c-format +msgid "Can't set value of '%s'" +msgstr "Impossible de spécifier la valeur de « %s »" + +#: ../src/common/zstream.cpp:414 +#, c-format +msgid "Can't write to deflate stream: %s" +msgstr "impossible d'écrire pour décharger le flux : %s" + +#: ../src/richtext/richtextstyledlg.cpp:289 +#: ../src/gtk1/fontdlg.cpp:145 +#: ../src/generic/dirdlgg.cpp:105 +#: ../src/motif/msgdlg.cpp:203 +#: ../src/mac/carbon/msgdlg.cpp:68 +#: ../contrib/src/deprecated/proplist.cpp:514 +msgid "Cancel" +msgstr "Annuler" + +#: ../src/xrc/xmlres.cpp:1268 +#: ../src/xrc/xmlres.cpp:1316 +msgid "Cannot convert dialog units: dialog unknown." +msgstr "Impossible de convertir les unités de la fenêtre de dialogue : fenêtre de dialogue inconnue." + +#: ../src/common/strconv.cpp:3482 +#, c-format +msgid "Cannot convert from the charset '%s'!" +msgstr "Impossible de convertir depuis le jeu de caractères « %s »." + +#: ../src/msw/dialup.cpp:547 +#, c-format +msgid "Cannot find active dialup connection: %s" +msgstr "Impossible de trouver une connexion active : %s" + +#: ../src/xrc/xmlres.cpp:347 +#, c-format +msgid "Cannot find container for unknown control '%s'." +msgstr "Impossible de trouver un conteneur pour le contrôle inconnu « %s »" + +#: ../src/xrc/xmlres.cpp:1351 +#, c-format +msgid "Cannot find font node '%s'." +msgstr "Impossible de trouver le noeud de la police de caractères « %s »." + +#: ../src/msw/dialup.cpp:858 +msgid "Cannot find the location of address book file" +msgstr "Impossible de trouver l'emplacement du fichier du manuel des adresses" + +#: ../src/unix/threadpsx.cpp:1128 +#, c-format +msgid "Cannot get priority range for scheduling policy %d." +msgstr "Impossible d'obtenir une gamme de priorités pour la charte de planification %d." + +#: ../src/unix/utilsunx.cpp:809 +msgid "Cannot get the hostname" +msgstr "Impossible d'obtenir le nom d'hôte" + +#: ../src/unix/utilsunx.cpp:845 +msgid "Cannot get the official hostname" +msgstr "Impossible d'obtenir le nom d'hôte officiel" + +#: ../src/msw/dialup.cpp:952 +msgid "Cannot hang up - no active dialup connection." +msgstr "Impossible de raccrocher - pas de connexion active." + +#: ../include/wx/msw/ole/oleutils.h:46 +msgid "Cannot initialize OLE" +msgstr "Impossible d'initialiser l'OLE" + +#: ../src/mgl/app.cpp:283 +msgid "Cannot initialize SciTech MGL!" +msgstr "Impossible d'initialiser SciTech MGL." + +#: ../src/mgl/window.cpp:547 +msgid "Cannot initialize display." +msgstr "Impossible d'initialiser l'affichage." + +#: ../src/msw/volume.cpp:600 +#, c-format +msgid "Cannot load icon from '%s'." +msgstr "Impossible de charger l'icône depuis « %s »." + +#: ../src/xrc/xmlres.cpp:478 +#, c-format +msgid "Cannot load resources from file '%s'." +msgstr "Impossible de charger les ressources du fichier « %s »." + +#: ../src/html/htmlfilt.cpp:158 +#, c-format +msgid "Cannot open HTML document: %s" +msgstr "Impossible d'ouvrir le document HTML : %s" + +#: ../src/html/helpdata.cpp:665 +#, c-format +msgid "Cannot open HTML help book: %s" +msgstr "Impossible d'ouvrir le manuel d'aide HTML : %s" + +#: ../src/html/helpdata.cpp:305 +#, c-format +msgid "Cannot open contents file: %s" +msgstr "Impossible d'ouvrir le fichier de table des matières : %s" + +#: ../src/xrc/xmlres.cpp:442 +#, c-format +msgid "Cannot open file '%s'." +msgstr "Impossible d'ouvrir le fichier « %s »." + +#: ../src/generic/dcpsg.cpp:1583 +msgid "Cannot open file for PostScript printing!" +msgstr "Impossible d'ouvrir le fichier pour une impression PostScript." + +#: ../src/html/helpdata.cpp:319 +#, c-format +msgid "Cannot open index file: %s" +msgstr "Impossible d'ouvrir le fichier d'index : %s" + +#: ../src/common/intl.cpp:1258 +#, c-format +msgid "Cannot parse Plural-Forms:'%s'" +msgstr "Impossible de parcourir l'en-tête Plural-Forms : « %s »" + +#: ../src/xrc/xmlres.cpp:1252 +#, c-format +msgid "Cannot parse coordinates from '%s'." +msgstr "Impossible de parcourir les coordonnées dans « %s »." + +#: ../src/xrc/xmlres.cpp:1300 +#, c-format +msgid "Cannot parse dimension from '%s'." +msgstr "Impossible de parcourir les dimensions dans « %s »." + +#: ../src/html/helpwnd.cpp:1538 +msgid "Cannot print empty page." +msgstr "Impossible d'imprimer une page vide." + +#: ../src/msw/volume.cpp:158 +#: ../src/msw/volume.cpp:490 +#, c-format +msgid "Cannot read typename from '%s'!" +msgstr "Impossible de lire le nom de type de « %s »." + +#: ../src/unix/threadpsx.cpp:1109 +msgid "Cannot retrieve thread scheduling policy." +msgstr "Impossible de récupérer la charte de planification des processus." + +#: ../src/unix/threadpsx.cpp:732 +msgid "Cannot start thread: error writing TLS" +msgstr "Impossible de lancer le processus : erreur lors de l'écriture de TLS" + +#: ../src/mac/carbon/mpthread.cpp:972 +msgid "Cannot wait for thread termination." +msgstr "Impossible d'attendre la fin du processus." + +#: ../src/mac/carbon/mpthread.cpp:888 +msgid "Cant create the thread event queue" +msgstr "Impossible de créer la queue d'événements du processus" + +#: ../src/html/helpwnd.cpp:532 +msgid "Case sensitive" +msgstr "Sensible à la casse" + +#: ../src/common/fmapbase.cpp:119 +msgid "Celtic (ISO-8859-14)" +msgstr "Celtique (ISO-8859-14)" + +#: ../src/richtext/richtextliststylepage.cpp:348 +#: ../src/richtext/richtextindentspage.cpp:170 +msgid "Cen&tred" +msgstr "Cen&tré" + +#: ../src/common/stockitem.cpp:133 +msgid "Centered" +msgstr "Centré" + +#: ../src/common/fmapbase.cpp:107 +msgid "Central European (ISO-8859-2)" +msgstr "Europe centrale (ISO-8859-2)" + +#: ../src/richtext/richtextliststylepage.cpp:249 +#: ../src/richtext/richtextbulletspage.cpp:198 +msgid "Centre" +msgstr "Centre" + +#: ../src/richtext/richtextliststylepage.cpp:350 +#: ../src/richtext/richtextliststylepage.cpp:352 +#: ../src/richtext/richtextindentspage.cpp:172 +#: ../src/richtext/richtextindentspage.cpp:174 +msgid "Centre text." +msgstr "Centrer le texte." + +#: ../src/richtext/richtextliststylepage.cpp:279 +#: ../src/richtext/richtextbulletspage.cpp:230 +msgid "Ch&oose..." +msgstr "&Choisir..." + +#: ../src/richtext/richtextbuffer.cpp:2808 +msgid "Change List Style" +msgstr "Changer la liste de styles" + +#: ../src/richtext/richtextbuffer.cpp:1773 +msgid "Change Style" +msgstr "Changer le style" + +#: ../src/richtext/richtextstyles.cpp:850 +msgid "Character styles" +msgstr "Styles de caractères" + +#: ../src/richtext/richtextliststylepage.cpp:223 +#: ../src/richtext/richtextliststylepage.cpp:225 +#: ../src/richtext/richtextbulletspage.cpp:172 +#: ../src/richtext/richtextbulletspage.cpp:174 +msgid "Check to add a period after the bullet." +msgstr "Cochez pour ajouter un point après le tiret." + +#: ../src/richtext/richtextliststylepage.cpp:237 +#: ../src/richtext/richtextliststylepage.cpp:239 +#: ../src/richtext/richtextbulletspage.cpp:186 +#: ../src/richtext/richtextbulletspage.cpp:188 +msgid "Check to add a right parenthesis." +msgstr "Cocher pour ajouter une parenthèse à droite." + +#: ../src/richtext/richtextliststylepage.cpp:230 +#: ../src/richtext/richtextliststylepage.cpp:232 +#: ../src/richtext/richtextbulletspage.cpp:179 +#: ../src/richtext/richtextbulletspage.cpp:181 +msgid "Check to enclose the bullet in parentheses." +msgstr "Cocher pour mettre le tiret entre parenthèses." + +#: ../src/mac/carbon/fontdlg.cpp:479 +#: ../src/mac/carbon/fontdlg.cpp:481 +msgid "Check to make the font bold." +msgstr "Cochez pour mettre la police en gras." + +#: ../src/mac/carbon/fontdlg.cpp:486 +#: ../src/mac/carbon/fontdlg.cpp:488 +msgid "Check to make the font italic." +msgstr "Cochez pour mettre la police en italique." + +#: ../src/mac/carbon/fontdlg.cpp:495 +#: ../src/mac/carbon/fontdlg.cpp:497 +msgid "Check to make the font underlined." +msgstr "Cochez pour mettre la police en souligné." + +#: ../src/richtext/richtextstyledlg.cpp:275 +#: ../src/richtext/richtextstyledlg.cpp:277 +msgid "Check to restart numbering." +msgstr "Cocher pour recommencer la numérotation." + +#: ../src/richtext/richtextfontpage.cpp:227 +#: ../src/richtext/richtextfontpage.cpp:229 +#, fuzzy +msgid "Check to show a line through the text." +msgstr "Cochez pour ajouter un point après le tiret." + +#: ../src/richtext/richtextfontpage.cpp:234 +#: ../src/richtext/richtextfontpage.cpp:236 +#, fuzzy +msgid "Check to show the text in capitals." +msgstr "Cochez pour mettre la police en italique." + +#: ../src/richtext/richtextfontpage.cpp:248 +#: ../src/richtext/richtextfontpage.cpp:250 +#, fuzzy +msgid "Check to show the text in subscript." +msgstr "Cliquez pour changer la couleur du texte." + +#: ../src/richtext/richtextfontpage.cpp:241 +#: ../src/richtext/richtextfontpage.cpp:243 +#, fuzzy +msgid "Check to show the text in superscript." +msgstr "Cocher pour mettre le tiret entre parenthèses." + +#: ../src/msw/dialup.cpp:793 +msgid "Choose ISP to dial" +msgstr "Choisir le FAI à appeler" + +#: ../src/gtk/colordlg.cpp:41 +#: ../src/generic/colrdlgg.cpp:144 +#: ../src/palmos/colordlg.cpp:74 +msgid "Choose colour" +msgstr "Choisir la couleur" + +#: ../src/gtk/fontdlg.cpp:107 +#: ../src/gtk1/fontdlg.cpp:126 +msgid "Choose font" +msgstr "Choisir la police" + +#: ../src/common/module.cpp:78 +#, c-format +msgid "Circular dependency involving module \"%s\" detected." +msgstr "Dépendance en boucle détectée, impliquant le module \"%s\"." + +#: ../src/aui/tabmdi.cpp:105 +#: ../src/generic/mdig.cpp:115 +msgid "Cl&ose" +msgstr "&Fermer" + +#: ../src/generic/logg.cpp:513 +msgid "Clear the log contents" +msgstr "Effacer le contenu du journal" + +#: ../src/richtext/richtextstyledlg.cpp:238 +#: ../src/richtext/richtextstyledlg.cpp:240 +msgid "Click to apply the selected style." +msgstr "Cliquez pour appliquer le style sélectionné." + +#: ../src/richtext/richtextliststylepage.cpp:280 +#: ../src/richtext/richtextliststylepage.cpp:282 +#: ../src/richtext/richtextbulletspage.cpp:231 +#: ../src/richtext/richtextbulletspage.cpp:233 +msgid "Click to browse for a symbol." +msgstr "Cliquer pour rechercher un symbole" + +#: ../src/mac/carbon/fontdlg.cpp:526 +#: ../src/mac/carbon/fontdlg.cpp:528 +msgid "Click to cancel changes to the font." +msgstr "Cliquez pour annuler les changements sur la police." + +#: ../src/generic/fontdlgg.cpp:379 +#: ../src/generic/fontdlgg.cpp:398 +msgid "Click to cancel the font selection." +msgstr "Cliquer pour annuler la sélection de la police." + +#: ../src/richtext/richtextstyledlg.cpp:290 +#: ../src/richtext/richtextstyledlg.cpp:292 +msgid "Click to cancel this window." +msgstr "Cliquez pour annuler cette fenêtre." + +#: ../src/mac/carbon/fontdlg.cpp:507 +#: ../src/mac/carbon/fontdlg.cpp:509 +msgid "Click to change the font colour." +msgstr "Cliquez pour changer la couleur de la police." + +#: ../src/richtext/richtextfontpage.cpp:217 +#: ../src/richtext/richtextfontpage.cpp:219 +msgid "Click to change the text colour." +msgstr "Cliquez pour changer la couleur du texte." + +#: ../src/richtext/richtextliststylepage.cpp:194 +#: ../src/richtext/richtextliststylepage.cpp:196 +msgid "Click to choose the font for this level." +msgstr "Cliquez pour choisir la police de ce niveau." + +#: ../src/richtext/richtextstyledlg.cpp:265 +#: ../src/richtext/richtextstyledlg.cpp:267 +msgid "Click to close this window." +msgstr "Cliquez pour fermer cette fenêtre." + +#: ../src/mac/carbon/fontdlg.cpp:533 +#: ../src/mac/carbon/fontdlg.cpp:535 +msgid "Click to confirm changes to the font." +msgstr "Cliquez pour confirmer les changements de la police." + +#: ../src/generic/fontdlgg.cpp:384 +#: ../src/generic/fontdlgg.cpp:386 +#: ../src/generic/fontdlgg.cpp:391 +#: ../src/generic/fontdlgg.cpp:393 +msgid "Click to confirm the font selection." +msgstr "Cliquer pour confirmer la sélection de la police." + +#: ../src/richtext/richtextstyledlg.cpp:284 +#: ../src/richtext/richtextstyledlg.cpp:286 +msgid "Click to confirm your selection." +msgstr "Cliquez pour confirmer votre sélection." + +#: ../src/richtext/richtextstyledlg.cpp:218 +#: ../src/richtext/richtextstyledlg.cpp:220 +msgid "Click to create a new character style." +msgstr "Cliquer pour créer un nouveau style de caractère." + +#: ../src/richtext/richtextstyledlg.cpp:230 +#: ../src/richtext/richtextstyledlg.cpp:232 +msgid "Click to create a new list style." +msgstr "Cliquez pour créer un nouveau style de liste." + +#: ../src/richtext/richtextstyledlg.cpp:224 +#: ../src/richtext/richtextstyledlg.cpp:226 +msgid "Click to create a new paragraph style." +msgstr "Cliquer pour créer un nouveau style de paragraphe." + +#: ../src/richtext/richtexttabspage.cpp:136 +#: ../src/richtext/richtexttabspage.cpp:138 +msgid "Click to create a new tab position." +msgstr "Cliquez pour créer une nouvelle position de tabulation." + +#: ../src/richtext/richtexttabspage.cpp:148 +#: ../src/richtext/richtexttabspage.cpp:150 +msgid "Click to delete all tab positions." +msgstr "Cliquez pour supprimer toutes les positions de tabulation." + +#: ../src/richtext/richtextstyledlg.cpp:256 +#: ../src/richtext/richtextstyledlg.cpp:258 +msgid "Click to delete the selected style." +msgstr "Cliquez suprimer le style sélectionné." + +#: ../src/richtext/richtexttabspage.cpp:142 +#: ../src/richtext/richtexttabspage.cpp:144 +msgid "Click to delete the selected tab position." +msgstr "Cliquez pour supprimer la position de tabulation sélectionnée." + +#: ../src/richtext/richtextstyledlg.cpp:250 +#: ../src/richtext/richtextstyledlg.cpp:252 +msgid "Click to edit the selected style." +msgstr "Cliquez éditer le style sélectionné." + +#: ../src/richtext/richtextstyledlg.cpp:244 +#: ../src/richtext/richtextstyledlg.cpp:246 +msgid "Click to rename the selected style." +msgstr "Cliquez renommer le style sélectionné." + +#: ../src/richtext/richtextstyledlg.cpp:263 +#: ../src/richtext/richtextsymboldlg.cpp:481 +#: ../src/richtext/richtextsymboldlg.cpp:495 +#: ../src/html/helpdlg.cpp:91 +#: ../src/generic/dbgrptg.cpp:93 +#: ../src/generic/progdlgg.cpp:652 +#: ../src/generic/progdlgg.cpp:657 +#: ../contrib/src/deprecated/proplist.cpp:509 +msgid "Close" +msgstr "Fermer" + +#: ../src/univ/themes/win32.cpp:3742 +msgid "Close\tAlt-F4" +msgstr "Fermer\tAlt-F4" + +#: ../src/aui/tabmdi.cpp:106 +#: ../src/generic/mdig.cpp:116 +msgid "Close All" +msgstr "Fermer tout" + +#: ../src/common/stockitem.cpp:211 +msgid "Close current document" +msgstr "Fermer le document courant" + +#: ../src/generic/logg.cpp:515 +msgid "Close this window" +msgstr "Fermer cette fenêtre" + +#: ../src/richtext/richtextsymboldlg.cpp:482 +#: ../src/richtext/richtextsymboldlg.cpp:484 +#: ../src/richtext/richtextsymboldlg.cpp:496 +#: ../src/richtext/richtextsymboldlg.cpp:498 +msgid "Closes the dialog without inserting a symbol." +msgstr "Ferme la fenêtre sans insérer de symbole." + +#: ../src/richtext/richtextformatdlg.cpp:517 +#, fuzzy +msgid "Colour" +msgstr "Couleur :" + +#: ../src/mac/carbon/fontdlg.cpp:503 +msgid "Colour:" +msgstr "Couleur :" + +#: ../src/common/init.cpp:189 +#, c-format +msgid "Command line argument %d couldn't be converted to Unicode and will be ignored." +msgstr "" + +#: ../src/html/helpwnd.cpp:1552 +msgid "Compressed HTML Help file (*.chm)|*.chm|" +msgstr "Fichier HTML compilé (*.chm)|*.chm|" + +#: ../src/generic/dirctrlg.cpp:606 +msgid "Computer" +msgstr "L'ordinateur" + +#: ../src/common/fileconf.cpp:1003 +#, c-format +msgid "Config entry name cannot start with '%c'." +msgstr "Le nom d'entrée de configuration ne peut pas commencer par « %c »." + +#: ../src/gtk/filedlg.cpp:61 +#: ../src/generic/filedlgg.cpp:1470 +msgid "Confirm" +msgstr "Confirmer" + +#: ../src/msw/mimetype.cpp:705 +msgid "Confirm registry update" +msgstr "Confirmer la mise à jour du registre" + +#: ../src/html/htmlwin.cpp:517 +msgid "Connecting..." +msgstr "Connexion en cours..." + +#: ../src/html/helpwnd.cpp:468 +msgid "Contents" +msgstr "Table des matières" + +#: ../src/common/strconv.cpp:1732 +#, c-format +msgid "Conversion to charset '%s' doesn't work." +msgstr "La conversion vers le jeu de caractères « %s » ne fonctionne pas." + +#: ../src/html/htmlwin.cpp:941 +#, c-format +msgid "Copied to clipboard:\"%s\"" +msgstr "Copié dans le presse-papiers « %s »" + +#: ../src/generic/prntdlgg.cpp:247 +msgid "Copies:" +msgstr "Copies :" + +#: ../src/common/stockitem.cpp:203 +msgid "Copy selection" +msgstr "Copier la sélection" + +#: ../src/html/chm.cpp:703 +#, c-format +msgid "Could not create temporary file '%s'" +msgstr "Impossible de créer le fichier temporaire « %s »" + +#: ../src/html/chm.cpp:274 +#, c-format +msgid "Could not extract %s into %s: %s" +msgstr "Impossible d'extraire %s de %s : %s" + +#: ../contrib/src/deprecated/resource.cpp:1830 +#: ../contrib/src/deprecated/resource.cpp:1960 +#, c-format +msgid "Could not find resource include file %s." +msgstr "Impossible de trouver le fichier de ressources inclus %s." + +#: ../src/generic/tabg.cpp:1049 +msgid "Could not find tab for id" +msgstr "Impossible de trouver l'onglet pour l'identifiant" + +#: ../src/html/chm.cpp:445 +#, c-format +msgid "Could not locate file '%s'." +msgstr "Impossible de localiser le fichier « %s »." + +#: ../contrib/src/deprecated/resource.cpp:829 +#, c-format +msgid "" +"Could not resolve control class or id '%s'. Use (non-zero) integer instead\n" +" or provide #define (see manual for caveats)" +msgstr "" +"Impossible de résoudre la classe de contrôle ou l'identifiant « %s ».\n" +"Utiliser à la place un entier (non nul) ou spécifier un #define\n" +"(voir le manuel pour les mises en garde)" + +#: ../contrib/src/deprecated/resource.cpp:1278 +#, c-format +msgid "" +"Could not resolve menu id '%s'. Use (non-zero) integer instead\n" +"or provide #define (see manual for caveats)" +msgstr "" +"Impossible de résoudre l'identifiant « %s » du menu. Utiliser à la place\n" +"un entier (non nul) ou spécifier un #define (voir le manuel pour les mises\n" +"en garde)" + +#: ../src/common/prntbase.cpp:1521 +msgid "Could not start document preview." +msgstr "Impossible de lancer l'aperçu du document." + +#: ../src/gtk/gnome/gprint.cpp:893 +#: ../src/generic/printps.cpp:181 +#: ../src/msw/printwin.cpp:230 +msgid "Could not start printing." +msgstr "Impossible de lancer l'impression." + +#: ../src/common/wincmn.cpp:1555 +msgid "Could not transfer data to window" +msgstr "Impossible de transférer les données à la fenêtre" + +#: ../src/mac/carbon/mpthread.cpp:222 +#: ../src/mac/carbon/mpthread.cpp:301 +msgid "Could not unlock mutex" +msgstr "Impossible de déverrouiller le mutex" + +#: ../src/os2/thread.cpp:149 +msgid "Couldn't acquire a mutex lock" +msgstr "Impossible de récupérer un verrou pour le mutex" + +#: ../src/msw/dragimag.cpp:156 +#: ../src/msw/dragimag.cpp:195 +#: ../src/msw/imaglist.cpp:147 +#: ../src/msw/imaglist.cpp:165 +#: ../src/msw/imaglist.cpp:177 +msgid "Couldn't add an image to the image list." +msgstr "Impossible d'ajouter une image à la liste des images." + +#: ../src/os2/timer.cpp:144 +#: ../src/msw/timer.cpp:101 +msgid "Couldn't create a timer" +msgstr "Impossible de créer un minuteur" + +#: ../src/mgl/cursor.cpp:132 +#: ../src/mgl/cursor.cpp:163 +msgid "Couldn't create cursor." +msgstr "Impossible de créer un curseur." + +#: ../src/mac/carbon/overlay.cpp:125 +msgid "Couldn't create the overlay window" +msgstr "Impossible de créer une fenêtre de recouvrement" + +#: ../src/mac/carbon/overlay.cpp:161 +msgid "Couldn't end the context on the overlay window" +msgstr "Impossible de changer le contexte de le fenêtre de recouvrement" + +#: ../src/common/dynlib.cpp:199 +#, c-format +msgid "Couldn't find symbol '%s' in a dynamic library" +msgstr "Impossible de trouver le symbole « %s » dans la bibliothèque dynamique" + +#: ../src/msw/thread.cpp:915 +#: ../src/mac/classic/thread.cpp:517 +msgid "Couldn't get the current thread pointer" +msgstr "Impossible d'obtenir le pointeur du processus actuel" + +#: ../src/mac/carbon/overlay.cpp:132 +msgid "Couldn't init the context on the overlay window" +msgstr "Impossible d'initialiser le contexte de la fenêtre de recouvrement" + +#: ../src/common/imagpng.cpp:621 +msgid "Couldn't load a PNG image - file is corrupted or not enough memory." +msgstr "Impossible de charger une image PNG - fichier corrompu ou mémoire insuffisante" + +#: ../src/unix/sound.cpp:471 +#, c-format +msgid "Couldn't load sound data from '%s'." +msgstr "Impossible de charger les données sonores depuis « %s »." + +#: ../src/unix/sound_sdl.cpp:228 +#, c-format +msgid "Couldn't open audio: %s" +msgstr "Impossible d'ouvrir le fichier audio : %s" + +#: ../src/msw/ole/dataobj.cpp:144 +#, c-format +msgid "Couldn't register clipboard format '%s'." +msgstr "Impossible d'enregistrer le format de presse-papiers « %s »." + +#: ../src/os2/thread.cpp:166 +msgid "Couldn't release a mutex" +msgstr "Impossible de libérer un mutex" + +#: ../src/msw/listctrl.cpp:727 +#, c-format +msgid "Couldn't retrieve information about list control item %d." +msgstr "Impossible de récupérer des informations sur l'élément « %d » de contrôle des listes." + +#: ../src/common/imagpng.cpp:670 +#: ../src/common/imagpng.cpp:679 +#: ../src/common/imagpng.cpp:687 +msgid "Couldn't save PNG image." +msgstr "Impossible de sauvegarder l'image PNG." + +#: ../src/msw/thread.cpp:668 +#: ../src/mac/classic/thread.cpp:775 +msgid "Couldn't terminate thread" +msgstr "Impossible d'arrêter le processus" + +#: ../src/common/xtistrm.cpp:157 +msgid "Create Parameter not found in declared RTTI Parameters" +msgstr "Paramètre de création non trouvé dans les paramètres RTTI déclarés" + +#: ../src/generic/dirdlgg.cpp:315 +msgid "Create directory" +msgstr "Créer le répertoire" + +#: ../src/generic/dirdlgg.cpp:129 +#: ../src/generic/filedlgg.cpp:1090 +msgid "Create new directory" +msgstr "Créer un nouveau répertoire" + +#: ../src/common/menucmn.cpp:316 +msgid "Ctrl-" +msgstr "Ctrl-ctrl" + +#: ../src/common/stockitem.cpp:118 +#: ../src/richtext/richtextctrl.cpp:2581 +#: ../src/msw/textctrl.cpp:2303 +#: ../src/mac/carbon/textctrl.cpp:1042 +msgid "Cu&t" +msgstr "Cou&per" + +#: ../src/generic/filedlgg.cpp:1101 +msgid "Current directory:" +msgstr "Répertoire courant :" + +#: ../src/common/stockitem.cpp:204 +msgid "Cut selection" +msgstr "Couper la sélection" + +#: ../src/common/fmapbase.cpp:110 +msgid "Cyrillic (ISO-8859-5)" +msgstr "Cyrillique (ISO-8859-5)" + +#: ../src/common/paper.cpp:101 +msgid "D sheet, 22 x 34 in" +msgstr "Feuille D, 22 x 34 mm" + +#: ../src/msw/dde.cpp:627 +msgid "DDE poke request failed" +msgstr "Échec de la demande de transfert DDE" + +#: ../src/common/menucmn.cpp:97 +msgid "DECIMAL" +msgstr "DECIMAL" + +#: ../src/common/menucmn.cpp:65 +msgid "DEL" +msgstr "EFFACER" + +#: ../src/common/menucmn.cpp:66 +msgid "DELETE" +msgstr "EFFACER" + +#: ../src/common/imagbmp.cpp:918 +msgid "DIB Header: Encoding doesn't match bitdepth." +msgstr "En-tête DIB : le codage ne correspond pas au nombre de bits par pixel." + +#: ../src/common/imagbmp.cpp:880 +msgid "DIB Header: Image height > 32767 pixels for file." +msgstr "En-tête DIB : hauteur de l'image supérieure à 32 767 pixels pour le fichier." + +#: ../src/common/imagbmp.cpp:874 +msgid "DIB Header: Image width > 32767 pixels for file." +msgstr "En-tête DIB : largeur de l'image supérieure à 32 767 pixels pour le fichier." + +#: ../src/common/imagbmp.cpp:894 +msgid "DIB Header: Unknown bitdepth in file." +msgstr "En-tête DIB : nombre de bits par pixel inconnu dans le fichier." + +#: ../src/common/imagbmp.cpp:904 +msgid "DIB Header: Unknown encoding in file." +msgstr "En-tête DIB : codage inconnu dans le fichier." + +#: ../src/common/menucmn.cpp:98 +msgid "DIVIDE" +msgstr "DIVISER" + +#: ../src/common/paper.cpp:123 +msgid "DL Envelope, 110 x 220 mm" +msgstr "Enveloppe DL, 110 x 220 mm" + +#: ../src/common/menucmn.cpp:77 +msgid "DOWN" +msgstr "BAS" + +#: ../src/generic/dbgrptg.cpp:296 +#, c-format +msgid "Debug report \"%s\"" +msgstr "Rapport de débogage « %s »" + +#: ../src/common/debugrpt.cpp:209 +msgid "Debug report couldn't be created." +msgstr "Échec de la création du rapport de débogage." + +#: ../src/common/debugrpt.cpp:545 +msgid "Debug report generation has failed." +msgstr "Échec de la création du rapport de débogage." + +#: ../src/generic/fontdlgg.cpp:230 +msgid "Decorative" +msgstr "Décoratif" + +#: ../src/common/fmapbase.cpp:661 +msgid "Default encoding" +msgstr "Codage par défaut" + +#: ../src/generic/prntdlgg.cpp:508 +msgid "Default printer" +msgstr "Imprimante par défaut" + +#: ../src/richtext/richtextbuffer.cpp:5478 +msgid "Delete" +msgstr "Supprimer" + +#: ../src/richtext/richtexttabspage.cpp:147 +msgid "Delete A&ll" +msgstr "&Tout supprimer" + +#: ../src/richtext/richtextstyledlg.cpp:734 +msgid "Delete Style" +msgstr "Supprimer le style" + +#: ../src/richtext/richtextctrl.cpp:625 +#: ../src/richtext/richtextctrl.cpp:661 +msgid "Delete Text" +msgstr "Supprimer le texte" + +#: ../contrib/src/gizmos/editlbox.cpp:156 +msgid "Delete item" +msgstr "Supprimer l'élément" + +#: ../src/common/stockitem.cpp:205 +msgid "Delete selection" +msgstr "Effacer la sélection" + +#: ../src/richtext/richtextstyledlg.cpp:734 +#, c-format +msgid "Delete style %s?" +msgstr "Supprimer le style %s?" + +#: ../src/unix/snglinst.cpp:296 +#, c-format +msgid "Deleted stale lock file '%s'." +msgstr "Suppression du fichier verrou périmé « %s »." + +#: ../src/common/module.cpp:124 +#, c-format +msgid "Dependency \"%s\" of module \"%s\" doesn't exist." +msgstr "La dépendance \"%s\" du module \"%s\" n'existe pas." + +#: ../src/generic/dirctrlg.cpp:672 +msgid "Desktop" +msgstr "Bureau" + +#: ../src/generic/aboutdlgg.cpp:71 +msgid "Developed by " +msgstr "Développé par " + +#: ../src/generic/aboutdlgg.cpp:142 +#, fuzzy +msgid "Developers" +msgstr "Développé par " + +#: ../src/msw/dialup.cpp:396 +msgid "Dial up functions are unavailable because the remote access service (RAS) is not installed on this machine. Please install it." +msgstr "Les fonctions d'appel ne sont pas disponibles car le service d'accès à distance (RAS) n'est pas installé sur cet ordinateur. Veuillez l'installer." + +#: ../src/generic/tipdlg.cpp:228 +msgid "Did you know..." +msgstr "Saviez-vous que..." + +#: ../src/dfb/wrapdfb.cpp:59 +#, c-format +msgid "DirectFB error %d occured." +msgstr "L'erreur DirectFB %d est survenue." + +#: ../src/motif/filedlg.cpp:216 +msgid "Directories" +msgstr "Dossiers" + +#: ../src/common/filefn.cpp:1257 +#, c-format +msgid "Directory '%s' couldn't be created" +msgstr "Le répertoire « %s » n'a pas pu être créé" + +#: ../src/mgl/dirmgl.cpp:211 +#, c-format +msgid "Directory '%s' doesn't exist!" +msgstr "Répertoire « %s » inexistant." + +#: ../src/generic/dirdlgg.cpp:231 +msgid "Directory does not exist" +msgstr "Répertoire inexistant" + +#: ../src/generic/filedlgg.cpp:1448 +msgid "Directory doesn't exist." +msgstr "Répertoire inexistant." + +#: ../src/html/helpwnd.cpp:498 +msgid "Display all index items that contain given substring. Search is case insensitive." +msgstr "Afficher tous les éléments de l'index qui contiennent une sous-chaîne donnée. Recherche non sensible à la casse." + +#: ../src/html/helpwnd.cpp:695 +msgid "Display options dialog" +msgstr "Dialogue d'options de l'affichage" + +#: ../src/html/helpwnd.cpp:325 +msgid "Displays help as you browse the books on the left." +msgstr "Affiche l'aide pendant que vous parcourez les livre sur la gauche." + +#: ../src/msw/mimetype.cpp:698 +msgid "" +"Do you want to overwrite the command used to %s files with extension \"%s\" ?\n" +"Current value is \n" +"%s, \n" +"New value is \n" +"%s %1" +msgstr "" +"Voulez-vous remplacer la commande utilisée pour %s les fichiers avec l'extension « %s » ?\n" +"La valeur actuelle est \n" +"%s, \n" +"La nouvelle valeur est \n" +"%s %1" + +#: ../src/common/docview.cpp:462 +#, c-format +msgid "Do you want to save changes to document %s?" +msgstr "Voulez-vous sauvegarder les modifications dans le document %s ?" + +#: ../src/generic/aboutdlgg.cpp:74 +msgid "Documentation by " +msgstr "Documentation par " + +#: ../src/generic/aboutdlgg.cpp:146 +#, fuzzy +msgid "Documentation writers" +msgstr "Documentation par " + +#: ../src/common/sizer.cpp:2095 +msgid "Don't Save" +msgstr "Ne pas enregistrer" + +#: ../src/html/htmlwin.cpp:583 +#: ../src/msw/frame.cpp:195 +msgid "Done" +msgstr "Fait" + +#: ../src/generic/progdlgg.cpp:418 +msgid "Done." +msgstr "Fait." + +#: ../src/common/paper.cpp:178 +msgid "Double Japanese Postcard Rotated 148 x 200 mm" +msgstr "Carte postale japonaise double Paysage 148 x 200 mm" + +#: ../src/common/xtixml.cpp:268 +#, c-format +msgid "Doubly used id : %d" +msgstr "Identifiant utilisé deux fois : %d" + +#: ../src/generic/fdrepdlg.cpp:151 +msgid "Down" +msgstr "Bas" + +#: ../src/common/paper.cpp:102 +msgid "E sheet, 34 x 44 in" +msgstr "Feuille E (34 x 44 pouces)" + +#: ../src/common/menucmn.cpp:79 +msgid "END" +msgstr "FIN" + +#: ../src/common/menucmn.cpp:70 +msgid "ENTER" +msgstr "ENTRER" + +#: ../src/common/menucmn.cpp:82 +msgid "ESC" +msgstr "ECHAP" + +#: ../src/common/menucmn.cpp:83 +msgid "ESCAPE" +msgstr "ECHAPPEMENT" + +#: ../src/common/menucmn.cpp:91 +msgid "EXECUTE" +msgstr "EXECUTER" + +#: ../contrib/src/gizmos/editlbox.cpp:154 +msgid "Edit item" +msgstr "Éditer l'élément" + +#: ../src/generic/progdlgg.cpp:190 +msgid "Elapsed time : " +msgstr "Temps écoulé : " + +#: ../src/richtext/richtextstyledlg.cpp:568 +msgid "Enter a character style name" +msgstr "Entrer le nom d'un style de caractère" + +#: ../src/richtext/richtextstyledlg.cpp:770 +msgid "Enter a list style name" +msgstr "Entrer le nom d'un style de liste" + +#: ../src/richtext/richtextstyledlg.cpp:843 +#, fuzzy +msgid "Enter a new style name" +msgstr "Entrer le nom d'un style de liste" + +#: ../src/common/prntbase.cpp:1073 +#, c-format +msgid "Enter a page number between %d and %d:" +msgstr "Saisir un numéro de page entre %d et %d :" + +#: ../src/richtext/richtextstyledlg.cpp:616 +msgid "Enter a paragraph style name" +msgstr "Entrer le nom d'un style de paragraphe" + +#: ../src/generic/dbgrptg.cpp:170 +#, c-format +msgid "Enter command to open file \"%s\":" +msgstr "Entrer la commande pour ouvrir le fichier « %s » :" + +#: ../src/generic/helpext.cpp:462 +msgid "Entries found" +msgstr "Entrées trouvées" + +#: ../src/common/paper.cpp:144 +msgid "Envelope Invite 220 x 220 mm" +msgstr "Enveloppe Invite 220 x 220 mm" + +#: ../src/common/config.cpp:420 +#, c-format +msgid "Environment variables expansion failed: missing '%c' at position %u in '%s'." +msgstr "Échec de l'expansion des variables d'environnement : « %c » manquant à la position %u dans « %s »." + +#: ../src/gtk/filedlg.cpp:73 +#: ../src/gtk1/fontdlg.cpp:75 +#: ../src/generic/dirdlgg.cpp:350 +#: ../src/generic/filedlgg.cpp:712 +#: ../src/generic/filedlgg.cpp:830 +#: ../src/generic/filedlgg.cpp:844 +#: ../src/generic/filedlgg.cpp:862 +#: ../src/generic/filedlgg.cpp:1420 +#: ../src/generic/filedlgg.cpp:1448 +#: ../src/generic/filedlgg.cpp:1476 +#: ../src/generic/dirctrlg.cpp:708 +#: ../src/generic/dirctrlg.cpp:726 +#: ../src/generic/dirctrlg.cpp:737 +msgid "Error" +msgstr "Erreur" + +#: ../src/generic/dirdlgg.cpp:249 +msgid "Error creating directory" +msgstr "Erreur lors de la création du répertoire" + +#: ../src/common/imagbmp.cpp:927 +msgid "Error in reading image DIB." +msgstr "Erreur lors de la lecture d'une image DIB." + +#: ../src/common/fileconf.cpp:511 +msgid "Error reading config options." +msgstr "Erreur lors de la lecture des options de configuration." + +#: ../src/common/fileconf.cpp:1093 +msgid "Error saving user configuration data." +msgstr "Erreur lors de l'enregistrement des données de configuration de l'utilisateur." + +#: ../src/mac/carbon/mpthread.cpp:477 +msgid "Error while waiting on semaphore" +msgstr "Erreur lors de l'attente d'une sémaphore" + +#: ../src/common/log.cpp:468 +msgid "Error: " +msgstr "Erreur : " + +#: ../src/common/fmapbase.cpp:108 +msgid "Esperanto (ISO-8859-3)" +msgstr "Espéranto (ISO-8859-3)" + +#: ../src/generic/progdlgg.cpp:198 +msgid "Estimated time : " +msgstr "Temps estimé : " + +#: ../src/generic/dbgrptg.cpp:230 +msgid "Executable files (*.exe)|*.exe|All files (*.*)|*.*||" +msgstr "Fichiers exécutables (*.exe)|*.exe|Tous les fichiers (*.*)|*.*||" + +#: ../src/msw/utilsexc.cpp:765 +#, c-format +msgid "Execution of command '%s' failed" +msgstr "Échec de l'exécution de la commande « %s »" + +#: ../src/os2/utilsexc.cpp:163 +#, c-format +msgid "Execution of command '%s' failed with error: %ul" +msgstr "Échec de l'exécution de la commande « %s » avec l'erreur : %ul" + +#: ../src/common/paper.cpp:107 +msgid "Executive, 7 1/4 x 10 1/2 in" +msgstr "Executive (7,25 x 10,5 pouces)" + +#: ../contrib/src/deprecated/resource.cpp:1869 +#: ../contrib/src/deprecated/resource.cpp:1999 +#: ../contrib/src/deprecated/resource.cpp:3101 +msgid "Expected '*' while parsing resource." +msgstr "« * » attendue lors du parcours de la ressource." + +#: ../contrib/src/deprecated/resource.cpp:1886 +#: ../contrib/src/deprecated/resource.cpp:2015 +#: ../contrib/src/deprecated/resource.cpp:3118 +msgid "Expected '=' while parsing resource." +msgstr "« = » attendu lors du parcours de la ressource." + +#: ../contrib/src/deprecated/resource.cpp:1855 +#: ../contrib/src/deprecated/resource.cpp:1985 +#: ../contrib/src/deprecated/resource.cpp:3087 +msgid "Expected 'char' while parsing resource." +msgstr "« char » attendu lors du parcours de la ressource." + +#: ../src/msw/registry.cpp:1149 +#, c-format +msgid "Exporting registry key: file \"%s\" already exists and won't be overwritten." +msgstr "Exportation de la clé de registre : le fichier « %s » existe déjà et ne sera pas écrasé." + +#: ../src/common/fmapbase.cpp:150 +msgid "Extended Unix Codepage for Japanese (EUC-JP)" +msgstr "Codepage Unix étendu pour le japonais (EUC-JP)" + +#: ../src/html/chm.cpp:710 +#, c-format +msgid "Extraction of '%s' into '%s' failed." +msgstr "Échec de l'extraction de « %s » de « %s »." + +#: ../src/common/menucmn.cpp:251 +#: ../src/common/menucmn.cpp:323 +msgid "F" +msgstr "F" + +#: ../src/msw/dialup.cpp:887 +#, c-format +msgid "Failed to %s dialup connection: %s" +msgstr "N'a pas réussi à %s la connexion : %s" + +#: ../src/unix/snglinst.cpp:270 +msgid "Failed to access lock file." +msgstr "Échec de l'accès au fichier verrou." + +#: ../src/msw/dib.cpp:563 +#, c-format +msgid "Failed to allocated %luKb of memory for bitmap data." +msgstr "Échec de l'allocation de %lu Ko de mémoire pour les données bitmap." + +#: ../src/unix/displayx11.cpp:234 +msgid "Failed to change video mode" +msgstr "Impossible de changer le mode vidéo" + +#: ../src/common/debugrpt.cpp:243 +#, c-format +msgid "Failed to clean up debug report directory \"%s\"" +msgstr "Échec du nettoyage du répertoire « %s » des rapports de débogage" + +#: ../src/common/filename.cpp:190 +msgid "Failed to close file handle" +msgstr "Échec de la fermeture du gestionnaire de fichier" + +#: ../src/unix/snglinst.cpp:335 +#, c-format +msgid "Failed to close lock file '%s'" +msgstr "Échec de la fermeture du fichier verrou « %s »" + +#: ../src/msw/clipbrd.cpp:113 +msgid "Failed to close the clipboard." +msgstr "Échec de la fermeture du presse-papiers." + +#: ../src/x11/utils.cpp:254 +#, c-format +msgid "Failed to close the display \"%s\"" +msgstr "Échec de la fermeture de l'écran \"%s\"." + +#: ../src/msw/dialup.cpp:827 +msgid "Failed to connect: missing username/password." +msgstr "Échec de la connexion : nom d'utilisateur ou mot de passe manquant." + +#: ../src/msw/dialup.cpp:773 +msgid "Failed to connect: no ISP to dial." +msgstr "Échec de la connexion : pas de FAI à appeler." + +#: ../src/common/textfile.cpp:177 +#, fuzzy, c-format +msgid "Failed to convert file \"%s\" to Unicode." +msgstr "La conversion du contenu du fichier en Unicode a échoué." + +#: ../src/msw/registry.cpp:632 +#, c-format +msgid "Failed to copy registry value '%s'" +msgstr "Échec de la copie de la valeur de registre « %s »" + +#: ../src/msw/registry.cpp:641 +#, c-format +msgid "Failed to copy the contents of registry key '%s' to '%s'." +msgstr "Échec de la copie du contenu de la clé de registre « %s » vers « %s »" + +#: ../src/common/filefn.cpp:1072 +#, c-format +msgid "Failed to copy the file '%s' to '%s'" +msgstr "Échec de la copie du fichier « %s » vers « %s »" + +#: ../src/msw/registry.cpp:619 +#, c-format +msgid "Failed to copy the registry subkey '%s' to '%s'." +msgstr "Échec de la copie de la sous-clé de registre « %s » vers « %s »." + +#: ../src/msw/dde.cpp:984 +msgid "Failed to create DDE string" +msgstr "Échec de la création de la chaîne DDE" + +#: ../src/msw/mdi.cpp:463 +msgid "Failed to create MDI parent frame." +msgstr "Échec de la création du cadre parent MDI." + +#: ../src/msw/statbr95.cpp:111 +msgid "Failed to create a status bar." +msgstr "Échec de la création d'une barre d'état." + +#: ../src/common/filename.cpp:852 +msgid "Failed to create a temporary file name" +msgstr "Échec de la création d'un nom de fichier temporaire." + +#: ../src/msw/utilsexc.cpp:225 +msgid "Failed to create an anonymous pipe" +msgstr "Échec de la création d'un tube anonyme" + +#: ../src/msw/dde.cpp:442 +#, c-format +msgid "Failed to create connection to server '%s' on topic '%s'" +msgstr "Échec de la création d'une connexion au serveur « %s » sur le sujet « %s »" + +#: ../src/msw/cursor.cpp:213 +msgid "Failed to create cursor." +msgstr "Échec de la création d'un curseur." + +#: ../src/common/debugrpt.cpp:208 +#, c-format +msgid "Failed to create directory \"%s\"" +msgstr "Échec de la création du répertoire « %s »" + +#: ../src/generic/dirdlgg.cpp:247 +#, c-format +msgid "" +"Failed to create directory '%s'\n" +"(Do you have the required permissions?)" +msgstr "" +"Échec de la création du répertoire « %s »\n" +"(Avez-vous les permissions requises ?)" + +#: ../src/msw/mimetype.cpp:189 +#, c-format +msgid "Failed to create registry entry for '%s' files." +msgstr "Échec de la création d'une entrée dans le registre pour les fichiers « %s »." + +#: ../src/msw/fdrepdlg.cpp:475 +#, c-format +msgid "Failed to create the standard find/replace dialog (error code %d)" +msgstr "Échec de la création de la boîte de dialogue standard rechercher/remplacer (code d'erreur %d)" + +#: ../src/html/winpars.cpp:798 +#, c-format +msgid "Failed to display HTML document in %s encoding" +msgstr "Échec de l'affichage du document HTML avec le codage %s" + +#: ../src/msw/clipbrd.cpp:125 +#: ../src/mac/classic/clipbrd.cpp:187 +msgid "Failed to empty the clipboard." +msgstr "Échec du vidage du presse-papiers." + +#: ../src/unix/displayx11.cpp:211 +msgid "Failed to enumerate video modes" +msgstr "Échec de l'énumération des modes vidéo" + +#: ../src/msw/dde.cpp:646 +msgid "Failed to establish an advise loop with DDE server" +msgstr "Échec de l'établissement d'une boucle d'instructions avec le serveur DDE" + +#: ../src/msw/dialup.cpp:659 +#, c-format +msgid "Failed to establish dialup connection: %s" +msgstr "Échec de l'établissement d'une connexion : %s" + +#: ../src/unix/utilsunx.cpp:509 +#: ../src/unix/utilsunx.cpp:525 +#, c-format +msgid "Failed to execute '%s'\n" +msgstr "Échec de l'exécution de « %s »\n" + +#: ../src/common/debugrpt.cpp:672 +msgid "Failed to execute curl, please install it in PATH." +msgstr "Échec de l'exécution de curl, veuillez l'installer dans le PATH" + +#: ../contrib/src/deprecated/resource.cpp:2499 +#, c-format +msgid "" +"Failed to find XBM resource %s.\n" +"Forgot to use wxResourceLoadBitmapData?" +msgstr "" +"Ressource XBM %s introuvable.\n" +"Avez-vous oublié d'utiliser wxResourceLoadBitmapData ?" + +#: ../contrib/src/deprecated/resource.cpp:2653 +#, c-format +msgid "" +"Failed to find XBM resource %s.\n" +"Forgot to use wxResourceLoadIconData?" +msgstr "" +"Ressource XBM %s introuvable.\n" +"Avez-vous oublié d'utiliser wxResourceLoadIconData ?" + +#: ../contrib/src/deprecated/resource.cpp:2514 +#, c-format +msgid "" +"Failed to find XPM resource %s.\n" +"Forgot to use wxResourceLoadBitmapData?" +msgstr "" +"Ressource XPM %s introuvable.\n" +"Avez-vous oublié d'utiliser wxResourceLoadBitmapData ?" + +#: ../src/common/regex.cpp:425 +#: ../src/common/regex.cpp:473 +#, c-format +msgid "Failed to find match for regular expression: %s" +msgstr "Aucune correspondance pour l'expression régulière « %s » n'a été trouvée." + +#: ../src/msw/dialup.cpp:725 +#, c-format +msgid "Failed to get ISP names: %s" +msgstr "Échec de l'obtention des noms des FAI : %s" + +#: ../src/mac/classic/clipbrd.cpp:136 +msgid "Failed to get clipboard data." +msgstr "Échec de l'obtention des données du presse-papiers." + +#: ../src/msw/clipbrd.cpp:731 +msgid "Failed to get data from the clipboard" +msgstr "Échec de l'obtention des données du presse-papiers" + +#: ../src/common/stopwatch.cpp:231 +msgid "Failed to get the local system time" +msgstr "Échec de l'obtention de l'heure locale du système" + +#: ../src/common/filefn.cpp:1516 +msgid "Failed to get the working directory" +msgstr "Échec de l'obtention du répertoire courant" + +#: ../src/univ/theme.cpp:114 +msgid "Failed to initialize GUI: no built-in themes found." +msgstr "Échec de l'initialisation de l'interface graphique : aucun thème préfabriqué n'a été trouvé." + +#: ../src/msw/helpchm.cpp:64 +msgid "Failed to initialize MS HTML Help." +msgstr "Échec de l'initialisation de l'aide MS HTML." + +#: ../src/msw/glcanvas.cpp:653 +msgid "Failed to initialize OpenGL" +msgstr "Échec de l'initialisation d'OpenGL" + +#: ../src/gtk/textctrl.cpp:1072 +msgid "Failed to insert text in the control." +msgstr "Échec de l'insertion de texte dans le contrôle." + +#: ../src/unix/snglinst.cpp:242 +#, c-format +msgid "Failed to inspect the lock file '%s'" +msgstr "Échec de l'inspection du fichier verrou « %s »" + +#: ../src/unix/threadpsx.cpp:910 +msgid "Failed to join a thread, potential memory leak detected - please restart the program" +msgstr "Échec de l'adjonction d'un processus : fuite potentielle de mémoire détectée, redémarrez le programme" + +#: ../src/msw/utils.cpp:725 +#, c-format +msgid "Failed to kill process %d" +msgstr "Échec de l'arrêt du processus %d" + +#: ../src/common/iconbndl.cpp:66 +#, c-format +msgid "Failed to load image %d from file '%s'." +msgstr "Échec du chargement de l'image %d depuis le fichier « %s »." + +#: ../src/msw/enhmeta.cpp:80 +#, c-format +msgid "Failed to load metafile from file \"%s\"." +msgstr "Échec du chargement du métafichier depuis le fichier « %s »." + +#: ../src/msw/volume.cpp:310 +msgid "Failed to load mpr.dll." +msgstr "Échec du chargement de mpr.dll" + +#: ../src/common/dynlib.cpp:133 +#, c-format +msgid "Failed to load shared library '%s'" +msgstr "Échec du chargement de la bibliothèque partagée « %s »" + +#: ../src/common/dynlib.cpp:115 +#, c-format +msgid "Failed to load shared library '%s' Error '%s'" +msgstr "Échec du chargement de la bibliothèque partagée « %s » : erreur « %s »" + +#: ../src/unix/snglinst.cpp:199 +#, c-format +msgid "Failed to lock the lock file '%s'" +msgstr "Échec du verrouillage du fichier verrou « %s »" + +#: ../src/common/filename.cpp:2208 +#, c-format +msgid "Failed to modify file times for '%s'" +msgstr "Échec de la modification de la date du fichier « %s »" + +#: ../src/common/filename.cpp:178 +#, c-format +msgid "Failed to open '%s' for %s" +msgstr "Échec de l'ouverture de « %s » pour %s" + +#: ../src/html/chm.cpp:142 +#, c-format +msgid "Failed to open CHM archive '%s'." +msgstr "Échec de l'ouverture de l'archive CHM « %s »." + +#: ../src/x11/utils.cpp:273 +#, c-format +msgid "Failed to open display \"%s\"." +msgstr "Échec de l'ouverture de l'écran « %s »." + +#: ../src/common/filename.cpp:887 +msgid "Failed to open temporary file." +msgstr "Échec de l'ouverture d'un fichier temporaire." + +#: ../src/msw/clipbrd.cpp:93 +msgid "Failed to open the clipboard." +msgstr "Échec de l'ouverture du presse-papiers." + +#: ../src/msw/clipbrd.cpp:634 +msgid "Failed to put data on the clipboard" +msgstr "Échec de l'ajout de données dans le presse-papiers" + +#: ../src/unix/snglinst.cpp:279 +msgid "Failed to read PID from lock file." +msgstr "Échec de la lecture du numéro de processus (PID) depuis le fichier verrou." + +#: ../src/common/fileconf.cpp:522 +#, fuzzy +msgid "Failed to read config options." +msgstr "Erreur lors de la lecture des options de configuration." + +#: ../src/unix/utilsunx.cpp:599 +msgid "Failed to redirect child process input/output" +msgstr "Échec de la redirection des entrées et sorties du processus fils" + +#: ../src/msw/utilsexc.cpp:651 +msgid "Failed to redirect the child process IO" +msgstr "Échec de la redirection des entrées et sorties du processus fils" + +#: ../src/msw/dde.cpp:292 +#, c-format +msgid "Failed to register DDE server '%s'" +msgstr "Échec de l'enregistrement du serveur DDE « %s »" + +#: ../src/msw/glcanvas.cpp:331 +msgid "Failed to register OpenGL window class." +msgstr "Échec de l'enregistrement de la classe de fenêtres OpenGL." + +#: ../src/common/fontmap.cpp:243 +#, c-format +msgid "Failed to remember the encoding for the charset '%s'." +msgstr "Échec du rappel du codage du jeu de caractères « %s »." + +#: ../src/common/debugrpt.cpp:226 +#, c-format +msgid "Failed to remove debug report file \"%s\"" +msgstr "Échec de la suppression du fichier de rapport de débogage « %s »" + +#: ../src/unix/snglinst.cpp:323 +#, c-format +msgid "Failed to remove lock file '%s'" +msgstr "Échec de la suppression du fichier verrou « %s »" + +#: ../src/unix/snglinst.cpp:289 +#, c-format +msgid "Failed to remove stale lock file '%s'." +msgstr "Échec de la suppression du fichier verrou périmé « %s »." + +#: ../src/msw/registry.cpp:470 +#, c-format +msgid "Failed to rename registry value '%s' to '%s'." +msgstr "Échec du renommage de la valeur de registre « %s » en « %s »." + +#: ../src/common/filefn.cpp:1175 +#, c-format +msgid "Failed to rename the file '%s' to '%s' because the destination file already exists." +msgstr "Erreur lors du changement de nom de '%s' vers '%s': il existe déjà un fichier avec le nom de destination." + +#: ../src/msw/registry.cpp:574 +#, c-format +msgid "Failed to rename the registry key '%s' to '%s'." +msgstr "Échec du renommage de la clé de registre « %s » en « %s »." + +#: ../src/msw/clipbrd.cpp:497 +msgid "Failed to retrieve data from the clipboard." +msgstr "Échec de la récupération de données du presse-papiers." + +#: ../src/common/filename.cpp:2311 +#, c-format +msgid "Failed to retrieve file times for '%s'" +msgstr "Échec de la récupération de la date du fichier « %s »" + +#: ../src/msw/dialup.cpp:492 +msgid "Failed to retrieve text of RAS error message" +msgstr "Échec de la récupération du texte du message d'erreur RAS" + +#: ../src/msw/clipbrd.cpp:768 +msgid "Failed to retrieve the supported clipboard formats" +msgstr "Échec de la récupération des formats de presse-papiers gérés" + +#: ../src/msw/dib.cpp:341 +#, c-format +msgid "Failed to save the bitmap image to file \"%s\"." +msgstr "Échec de l'enregistrement de l'image bitmap dans le fichier « %s »" + +#: ../src/msw/dde.cpp:692 +msgid "Failed to send DDE advise notification" +msgstr "Échec de l'envoi d'une notification d'instructions au DDE" + +#: ../src/common/ftp.cpp:380 +#, c-format +msgid "Failed to set FTP transfer mode to %s." +msgstr "Échec de la configuration du mode de transfert FTP en %s." + +#: ../src/msw/clipbrd.cpp:373 +msgid "Failed to set clipboard data." +msgstr "Échec de la configuration des données du presse-papiers." + +#: ../src/unix/snglinst.cpp:182 +#, c-format +msgid "Failed to set permissions on lock file '%s'" +msgstr "Échec de la configuration des permissions du fichier verrou « %s »" + +#: ../src/common/file.cpp:516 +msgid "Failed to set temporary file permissions" +msgstr "Échec de la configuration des permissions du fichier temporaire" + +#: ../src/gtk/textctrl.cpp:1015 +msgid "Failed to set text in the text control." +msgstr "Échec: le texte n'a pas pu être placé dans le contrôle de texte." + +#: ../src/unix/threadpsx.cpp:1253 +#: ../src/unix/threadpsx.cpp:1263 +#, c-format +msgid "Failed to set thread priority %d." +msgstr "Échec de la configuration de la priorité %d du processus." + +#: ../src/common/fs_mem.cpp:266 +#, c-format +msgid "Failed to store image '%s' to memory VFS!" +msgstr "Échec du stockage de l'image « %s » dans la mémoire VFS." + +#: ../src/unix/threadpsx.cpp:1436 +#: ../src/mac/carbon/mpthread.cpp:1268 +msgid "Failed to terminate a thread." +msgstr "Échec de la terminaison d'un processus." + +#: ../src/msw/dde.cpp:665 +msgid "Failed to terminate the advise loop with DDE server" +msgstr "Échec de la terminaison de la boucle d'instructions avec le serveur DDE" + +#: ../src/msw/dialup.cpp:962 +#, c-format +msgid "Failed to terminate the dialup connection: %s" +msgstr "Échec de la terminaison de la connexion : %s" + +#: ../src/common/filename.cpp:2223 +#, c-format +msgid "Failed to touch the file '%s'" +msgstr "Échec de la mise à jour de la date du fichier « %s »" + +#: ../src/unix/snglinst.cpp:329 +#, c-format +msgid "Failed to unlock lock file '%s'" +msgstr "Échec du déverrouillage du fichier verrou « %s »" + +#: ../src/msw/dde.cpp:313 +#, c-format +msgid "Failed to unregister DDE server '%s'" +msgstr "Échec du désenregistrement du serveur DDE « %s »" + +#: ../src/common/fileconf.cpp:1066 +msgid "Failed to update user configuration file." +msgstr "Échec de la mise à jour du fichier de configuration utilisateur" + +#: ../src/common/debugrpt.cpp:685 +#, c-format +msgid "Failed to upload the debug report (error code %d)." +msgstr "Échec de l'envoi du rapport de bogue (code d'erreur %d)." + +#: ../src/unix/snglinst.cpp:169 +#, c-format +msgid "Failed to write to lock file '%s'" +msgstr "Échec de l'écriture dans le fichier verrou « %s »" + +#: ../src/generic/logg.cpp:400 +msgid "Fatal error" +msgstr "Erreur fatale" + +#: ../src/common/log.cpp:457 +msgid "Fatal error: " +msgstr "Erreur fatale : " + +#: ../src/msw/wince/filedlgwce.cpp:119 +msgid "File" +msgstr "Fichier" + +#: ../src/mgl/bitmap.cpp:414 +#, c-format +msgid "File %s does not exist." +msgstr "Fichier « %s » inexistant." + +#: ../src/gtk/filedlg.cpp:58 +#: ../src/generic/filedlgg.cpp:1468 +#, c-format +msgid "File '%s' already exists, do you really want to overwrite it?" +msgstr "Le fichier « %s » existe déjà, voulez-vous vraiment l'écraser ?" + +#: ../src/os2/filedlg.cpp:312 +#, c-format +msgid "" +"File '%s' already exists.\n" +"Do you want to replace it?" +msgstr "" +"Le fichier « %s » existe déjà.\n" +"Voulez-vous le remplacer ?" + +#: ../src/common/textcmn.cpp:218 +#: ../src/richtext/richtextctrl.cpp:1887 +msgid "File couldn't be loaded." +msgstr "Le fichier n'a pas pu être chargé." + +#: ../src/common/docview.cpp:569 +#: ../src/common/docview.cpp:1609 +msgid "File error" +msgstr "Erreur fichier" + +#: ../src/generic/filedlgg.cpp:844 +#: ../src/generic/dirctrlg.cpp:726 +msgid "File name exists already." +msgstr "Nom de fichier existant." + +#: ../src/motif/filedlg.cpp:217 +msgid "Files" +msgstr "Fichiers" + +#: ../src/common/filefn.cpp:1821 +#, c-format +msgid "Files (%s)" +msgstr "Fichiers (%s)" + +#: ../src/motif/filedlg.cpp:215 +msgid "Filter" +msgstr "Filtre" + +#: ../src/html/helpwnd.cpp:486 +msgid "Find" +msgstr "Trouver" + +#: ../src/html/helpwnd.cpp:1215 +msgid "Fixed font:" +msgstr "Police de taille fixe :" + +#: ../src/html/helpwnd.cpp:1275 +msgid "Fixed size face.
bold italic " +msgstr "Police de taille fixe.
gras italique " + +#: ../src/common/paper.cpp:113 +msgid "Folio, 8 1/2 x 13 in" +msgstr "Folio (8,5 x 13 pouces)" + +#: ../src/richtext/richtextformatdlg.cpp:275 +#: ../src/mac/carbon/fontdlg.cpp:410 +msgid "Font" +msgstr "Police de caractères" + +#: ../src/richtext/richtextfontpage.cpp:187 +msgid "Font &weight:" +msgstr "Lar&geur de police." + +#: ../src/html/helpwnd.cpp:1216 +msgid "Font size:" +msgstr "Taille de la police :" + +#: ../src/richtext/richtextfontpage.cpp:174 +msgid "Font st&yle:" +msgstr "St&yle de la police :" + +#: ../src/mac/carbon/fontdlg.cpp:452 +msgid "Font:" +msgstr "Police de caractères:" + +#: ../src/dfb/fontmgr.cpp:167 +#, c-format +msgid "Fonts index file %s disappeared while loading fonts." +msgstr "" + +#: ../src/unix/utilsunx.cpp:546 +msgid "Fork failed" +msgstr "Échec du clonage" + +#: ../src/common/xtixml.cpp:232 +msgid "Forward hrefs are not supported" +msgstr "Transferts href non gérés" + +#: ../contrib/src/deprecated/resource.cpp:1838 +#: ../contrib/src/deprecated/resource.cpp:1968 +#: ../contrib/src/deprecated/resource.cpp:3070 +msgid "Found " +msgstr "A trouvé " + +#: ../src/html/helpwnd.cpp:891 +#, c-format +msgid "Found %i matches" +msgstr "A trouvé %i correspondances" + +#: ../src/generic/prntdlgg.cpp:238 +msgid "From:" +msgstr "De :" + +#: ../src/common/fmapbase.cpp:154 +msgid "GB-2312" +msgstr "GB-2312" + +#: ../src/common/imaggif.cpp:80 +msgid "GIF: Invalid gif index." +msgstr "GIF : index gif non valable." + +#: ../src/common/imaggif.cpp:70 +msgid "GIF: data stream seems to be truncated." +msgstr "GIF : le flux des données semble être tronqué." + +#: ../src/common/imaggif.cpp:54 +msgid "GIF: error in GIF image format." +msgstr "GIF : erreur dans le format de l'image GIF." + +#: ../src/common/imaggif.cpp:57 +msgid "GIF: not enough memory." +msgstr "GIF : mémoire insuffisante." + +#: ../src/common/imaggif.cpp:60 +msgid "GIF: unknown error!!!" +msgstr "GIF : erreur non référencée." + +#: ../src/univ/themes/gtk.cpp:527 +msgid "GTK+ theme" +msgstr "Thème GTK+" + +#: ../src/common/prntbase.cpp:238 +msgid "Generic PostScript" +msgstr "Fichier PostScript" + +#: ../src/common/paper.cpp:137 +msgid "German Legal Fanfold, 8 1/2 x 13 in" +msgstr "Légal allemand en accordéon (8,5 x 13 pouces)" + +#: ../src/common/paper.cpp:136 +msgid "German Std Fanfold, 8 1/2 x 12 in" +msgstr "Standard allemand en accordéon (8,5 x 12 pouces)" + +#: ../include/wx/xti.h:841 +msgid "GetProperty called w/o valid getter" +msgstr "GetProperty appelé sans récupérateur valable" + +#: ../include/wx/xti.h:902 +msgid "GetPropertyCollection called on a generic accessor" +msgstr "GetPropertyCollection appelé sur un assesseur générique" + +#: ../include/wx/xti.h:849 +msgid "GetPropertyCollection called w/o valid collection getter" +msgstr "GetPropertyCollection appelé sans récupérateur de collection valable" + +#: ../src/html/helpwnd.cpp:661 +msgid "Go back" +msgstr "Revenir" + +#: ../src/html/helpwnd.cpp:664 +msgid "Go forward" +msgstr "Continuer" + +#: ../src/html/helpwnd.cpp:669 +msgid "Go one level up in document hierarchy" +msgstr "Monter au niveau supérieur dans la hiérarchie du document" + +#: ../src/generic/dirdlgg.cpp:134 +#: ../src/generic/filedlgg.cpp:1080 +msgid "Go to home directory" +msgstr "Aller au répertoire personnel" + +#: ../src/generic/filedlgg.cpp:1072 +msgid "Go to parent directory" +msgstr "Aller au répertoire parent" + +#: ../src/common/prntbase.cpp:1078 +msgid "Goto Page" +msgstr "Aller à la page" + +#: ../src/generic/aboutdlgg.cpp:77 +msgid "Graphics art by " +msgstr "Arts graphiques par " + +#: ../src/common/fmapbase.cpp:112 +msgid "Greek (ISO-8859-7)" +msgstr "Grec (ISO-8859-7)" + +#: ../src/common/zstream.cpp:149 +#: ../src/common/zstream.cpp:302 +msgid "Gzip not supported by this version of zlib" +msgstr "Gzip n'est pas géré par cette version de zlib" + +#: ../src/common/menucmn.cpp:93 +msgid "HELP" +msgstr "AIDE" + +#: ../src/common/menucmn.cpp:78 +msgid "HOME" +msgstr "DEBUT" + +#: ../src/html/helpwnd.cpp:1550 +msgid "HTML Help Project (*.hhp)|*.hhp|" +msgstr "Projet d'aide HTML (*.hhp)|*.hhp|" + +#: ../src/html/htmlwin.cpp:630 +#, c-format +msgid "HTML anchor %s does not exist." +msgstr "Ancre HTML %s inexistante." + +#: ../src/html/helpwnd.cpp:1548 +msgid "HTML files (*.html;*.htm)|*.html;*.htm|" +msgstr "Fichiers HTML (*.html;*.htm)|*.html;*.htm|" + +#: ../src/html/htmprint.cpp:379 +#, fuzzy +msgid "HTML pagination algorithm generated more than the allowed maximum number of pages and it can't continue any longer!" +msgstr "L'algorithme de mise en page a généré plus de pages que le nombre maximum admissible et il ne peut poursuivre!" + +#: ../src/common/fmapbase.cpp:113 +msgid "Hebrew (ISO-8859-8)" +msgstr "Hébreu (ISO-8859-8)" + +#: ../src/html/helpdlg.cpp:67 +#: ../src/html/helpfrm.cpp:97 +#: ../contrib/src/deprecated/proplist.cpp:519 +msgid "Help" +msgstr "Aide" + +#: ../src/html/helpwnd.cpp:1209 +msgid "Help Browser Options" +msgstr "Aide Options Navigateur" + +#: ../src/generic/helpext.cpp:461 +#: ../src/generic/helpext.cpp:462 +msgid "Help Index" +msgstr "Aide Index" + +#: ../src/html/helpwnd.cpp:1536 +msgid "Help Printing" +msgstr "Aide Impression" + +#: ../src/html/helpwnd.cpp:820 +msgid "Help Topics" +msgstr "Sujets Aide" + +#: ../src/html/helpwnd.cpp:1549 +msgid "Help books (*.htb)|*.htb|Help books (*.zip)|*.zip|" +msgstr "Livres d'aide (*.htb)|*.htb|Help books (*.zip)|*.zip|" + +#: ../src/generic/helpext.cpp:274 +#, c-format +msgid "Help directory \"%s\" not found." +msgstr "Dossier d'aide \"%s\" non trouvé." + +#: ../src/generic/helpext.cpp:282 +#, c-format +msgid "Help file \"%s\" not found." +msgstr "fichier d'aide « %s » non trouvé." + +#: ../src/html/helpctrl.cpp:51 +#, c-format +msgid "Help: %s" +msgstr "Aide : %s" + +#: ../src/generic/dirdlgg.cpp:96 +msgid "Home" +msgstr "Répertoire personnel" + +#: ../src/generic/dirctrlg.cpp:670 +msgid "Home directory" +msgstr "Répertoire personnel" + +#: ../include/wx/filefn.h:141 +msgid "I64" +msgstr "I64" + +#: ../src/common/imagbmp.cpp:940 +msgid "ICO: Error in reading mask DIB." +msgstr "ICO : erreur à la lecture du masque DIB." + +#: ../src/common/imagbmp.cpp:1045 +#: ../src/common/imagbmp.cpp:1104 +#: ../src/common/imagbmp.cpp:1113 +#: ../src/common/imagbmp.cpp:1124 +#: ../src/common/imagbmp.cpp:1168 +#: ../src/common/imagbmp.cpp:1178 +#: ../src/common/imagbmp.cpp:1187 +msgid "ICO: Error writing the image file!" +msgstr "ICO : erreur à l'écriture du fichier image." + +#: ../src/common/imagbmp.cpp:1013 +msgid "ICO: Image too tall for an icon." +msgstr "ICO : image trop grande pour une icône." + +#: ../src/common/imagbmp.cpp:1019 +msgid "ICO: Image too wide for an icon." +msgstr "ICO : image trop large pour une icône." + +#: ../src/common/imagbmp.cpp:1252 +msgid "ICO: Invalid icon index." +msgstr "ICO : index de l'icône non valable." + +#: ../src/common/imagiff.cpp:766 +msgid "IFF: data stream seems to be truncated." +msgstr "IFF : le flux de données semble être tronqué." + +#: ../src/common/imagiff.cpp:750 +msgid "IFF: error in IFF image format." +msgstr "IFF : erreur dans le format de l'image IFF." + +#: ../src/common/imagiff.cpp:753 +msgid "IFF: not enough memory." +msgstr "IFF : mémoire insuffisante." + +#: ../src/common/imagiff.cpp:756 +msgid "IFF: unknown error!!!" +msgstr "IFF : erreur inconnue." + +#: ../src/common/menucmn.cpp:68 +msgid "INS" +msgstr "INS" + +#: ../src/common/menucmn.cpp:69 +msgid "INSERT" +msgstr "INSERTION" + +#: ../contrib/src/deprecated/resource.cpp:2683 +#: ../contrib/src/deprecated/resource.cpp:2694 +#, c-format +msgid "Icon resource specification %s not found." +msgstr "Spécification %s de la ressource de l'icône non trouvée." + +#: ../src/generic/dbgrptg.cpp:354 +msgid "" +"If you have any additional information pertaining to this bug\n" +"report, please enter it here and it will be joined to it:" +msgstr "" +"Si vous avez des informations supplémentaires concernant ce rapport\n" +"de bogue, veuillez les saisir ici pour qu'elles soient incluses :" + +#: ../src/generic/dbgrptg.cpp:320 +msgid "" +"If you wish to suppress this debug report completely, please choose the \"Cancel\" button,\n" +"but be warned that it may hinder improving the program, so if\n" +"at all possible please do continue with the report generation.\n" +msgstr "" +"Si vous voulez supprimer entièrement ce rapport de débogage, veuillez\n" +"choisir le bouton « Annuler », mais cela peut empêcher l'amélioration du\n" +"programme, donc veuillez si possible continuer la création de ce rapport.\n" + +#: ../src/msw/registry.cpp:1313 +#, c-format +msgid "Ignoring value \"%s\" of the key \"%s\"." +msgstr "Valeur « %s » de la clé « %s » ignorée." + +#: ../contrib/src/deprecated/resource.cpp:266 +msgid "Ill-formed resource file syntax." +msgstr "Syntaxe du fichier de ressource malformée." + +#: ../src/common/xtistrm.cpp:256 +msgid "Illegal Object Class (Non-wxEvtHandler) as Event Source" +msgstr "Classe d'objet non valable en tant que source d'événement (Non-wxEvtHandler)" + +#: ../include/wx/xti.h:1668 +msgid "Illegal Parameter Count for ConstructObject Method" +msgstr "Nombre de paramètres illégal pour la méthode ConstructObject" + +#: ../include/wx/xti.h:1742 +msgid "Illegal Parameter Count for Create Method" +msgstr "Nombre de paramètres illégal pour la méthode Create" + +#: ../src/generic/filedlgg.cpp:830 +#: ../src/generic/dirctrlg.cpp:708 +msgid "Illegal directory name." +msgstr "Nom de répertoire illégal." + +#: ../src/generic/filedlgg.cpp:1420 +msgid "Illegal file specification." +msgstr "Spécification de fichier illégale." + +#: ../src/common/image.cpp:1847 +msgid "Image and mask have different sizes." +msgstr "L'image et le masque sont de tailles différentes." + +#: ../src/common/image.cpp:2195 +#: ../src/common/image.cpp:2235 +#, c-format +msgid "Image file is not of type %ld." +msgstr "Le fichier image n'est pas du type %ld." + +#: ../src/common/image.cpp:2259 +#, c-format +msgid "Image file is not of type %s." +msgstr "Le fichier image n'est pas du type %s." + +#: ../src/msw/textctrl.cpp:430 +msgid "Impossible to create a rich edit control, using simple text control instead. Please reinstall riched32.dll" +msgstr "Impossible de créer un contrôle d'édition riche, va utiliser un contrôle de texte simple à la place. Veuillez réinstaller riched32.dll" + +#: ../src/unix/utilsunx.cpp:435 +msgid "Impossible to get child process input" +msgstr "Impossible d'obtenir l'entrée du processus fils" + +#: ../src/common/filefn.cpp:1091 +#, c-format +msgid "Impossible to get permissions for file '%s'" +msgstr "Impossible d'obtenir les permissions du fichier « %s »" + +#: ../src/common/filefn.cpp:1105 +#, c-format +msgid "Impossible to overwrite the file '%s'" +msgstr "Impossible d'écraser le fichier « %s »" + +#: ../src/common/filefn.cpp:1149 +#, c-format +msgid "Impossible to set permissions for the file '%s'" +msgstr "Impossible de configurer les permissions du fichier « %s »" + +#: ../src/common/stockitem.cpp:130 +msgid "Indent" +msgstr "Indenter" + +#: ../src/richtext/richtextformatdlg.cpp:281 +msgid "Indents && Spacing" +msgstr "Indentations && Espacements" + +#: ../src/html/helpwnd.cpp:511 +msgid "Index" +msgstr "Index" + +#: ../src/common/fmapbase.cpp:117 +msgid "Indian (ISO-8859-12)" +msgstr "Indien (ISO-8859-12)" + +#: ../src/common/init.cpp:248 +msgid "Initialization failed in post init, aborting." +msgstr "L'initialisation a échoué dans post init; abandon." + +#: ../src/richtext/richtextsymboldlg.cpp:474 +#: ../src/richtext/richtextsymboldlg.cpp:501 +msgid "Insert" +msgstr "Insérer" + +#: ../src/richtext/richtextbuffer.cpp:5379 +#: ../src/richtext/richtextbuffer.cpp:6172 +msgid "Insert Image" +msgstr "Insérer une image" + +#: ../src/richtext/richtextbuffer.cpp:5241 +#: ../src/richtext/richtextbuffer.cpp:5275 +#: ../src/richtext/richtextbuffer.cpp:5313 +#: ../src/richtext/richtextctrl.cpp:586 +#: ../src/richtext/richtextctrl.cpp:853 +msgid "Insert Text" +msgstr "Insérer du texte" + +#: ../src/richtext/richtextsymboldlg.cpp:476 +#: ../src/richtext/richtextsymboldlg.cpp:478 +#: ../src/richtext/richtextsymboldlg.cpp:503 +#: ../src/richtext/richtextsymboldlg.cpp:505 +msgid "Inserts the chosen symbol." +msgstr "Insérer le symbole choisi." + +#: ../src/common/xtistrm.cpp:700 +msgid "Internal error, illegal wxCustomTypeInfo" +msgstr "Erreur interne : wxCustomTypeInfo illégal" + +#: ../src/common/imagtiff.cpp:256 +msgid "Invalid TIFF image index." +msgstr "Index d'image TIFF non valable." + +#: ../src/xrc/xmlres.cpp:485 +#, c-format +msgid "Invalid XRC resource '%s': doesn't have root node 'resource'." +msgstr "Ressource XRC « %s » non valable : absence du noeud racine « resource »." + +#: ../src/common/appcmn.cpp:290 +#, c-format +msgid "Invalid display mode specification '%s'." +msgstr "Spécification du mode d'affichage « %s » non valable." + +#: ../src/x11/app.cpp:127 +#, c-format +msgid "Invalid geometry specification '%s'" +msgstr "Spécification géométrique « %s » non valable" + +#: ../src/unix/snglinst.cpp:307 +#, c-format +msgid "Invalid lock file '%s'." +msgstr "Fichier verrou « %s » non valable." + +#: ../src/common/xtistrm.cpp:361 +#: ../src/common/xtistrm.cpp:376 +msgid "Invalid or Null Object ID passed to GetObjectClassInfo" +msgstr "Identifiant d'objet non valable ou vide indiqué à GetObjectClassInfo" + +#: ../src/common/xtistrm.cpp:391 +msgid "Invalid or Null Object ID passed to HasObjectClassInfo" +msgstr "Identifiant d'objet non valable ou vide indiqué à HasObjectClassInfo" + +#: ../src/common/regex.cpp:304 +#, c-format +msgid "Invalid regular expression '%s': %s" +msgstr "Expression rationnelle « %s » non valable : %s" + +#: ../src/richtext/richtextfontpage.cpp:266 +#: ../src/richtext/richtextfontpage.cpp:324 +#: ../src/richtext/richtextfontpage.cpp:581 +#: ../src/generic/fontdlgg.cpp:236 +#: ../src/mac/carbon/fontdlg.cpp:484 +msgid "Italic" +msgstr "Italique" + +#: ../src/common/paper.cpp:132 +msgid "Italy Envelope, 110 x 230 mm" +msgstr "Enveloppe italienne, 110 x 230 mm" + +#: ../src/common/imagjpeg.cpp:250 +msgid "JPEG: Couldn't load - file is probably corrupted." +msgstr "JPEG : échec du chargement - le fichier est probablement corrompu." + +#: ../src/common/imagjpeg.cpp:393 +msgid "JPEG: Couldn't save image." +msgstr "JPEG : échec de la sauvegarde de l'image." + +#: ../src/common/paper.cpp:165 +msgid "Japanese Double Postcard 200 x 148 mm" +msgstr "Carte postale double japonaise 200 x148 mm" + +#: ../src/common/paper.cpp:169 +msgid "Japanese Envelope Chou #3" +msgstr "Enveloppe japonaise Chou n. 3" + +#: ../src/common/paper.cpp:182 +msgid "Japanese Envelope Chou #3 Rotated" +msgstr "Enveloppe japonaise Chou n. 3 Paysage" + +#: ../src/common/paper.cpp:170 +msgid "Japanese Envelope Chou #4" +msgstr "Enveloppe japonaise Chou n. 4" + +#: ../src/common/paper.cpp:183 +msgid "Japanese Envelope Chou #4 Rotated" +msgstr "Enveloppe japonaise Chou n. 4 Paysage" + +#: ../src/common/paper.cpp:167 +msgid "Japanese Envelope Kaku #2" +msgstr "Enveloppe japonaise Kaky n. 2" + +#: ../src/common/paper.cpp:180 +msgid "Japanese Envelope Kaku #2 Rotated" +msgstr "Enveloppe japonaise Kaky n. 2 Paysage" + +#: ../src/common/paper.cpp:168 +msgid "Japanese Envelope Kaku #3" +msgstr "Enveloppe japonaise Kaky n. 3" + +#: ../src/common/paper.cpp:181 +msgid "Japanese Envelope Kaku #3 Rotated" +msgstr "Enveloppe japonaise Kaky n. 3 Paysage" + +#: ../src/common/paper.cpp:187 +msgid "Japanese Envelope You #4" +msgstr "Enveloppe japonaise Kaky n. 4" + +#: ../src/common/paper.cpp:188 +msgid "Japanese Envelope You #4 Rotated" +msgstr "Enveloppe japonaise Kaky n. 4 Paysage" + +#: ../src/common/paper.cpp:140 +msgid "Japanese Postcard 100 x 148 mm" +msgstr "Enveloppe japonaise 100 x 148 mm" + +#: ../src/common/paper.cpp:177 +msgid "Japanese Postcard Rotated 148 x 100 mm" +msgstr "Enveloppe japonaise Paysage 148 x 100 mm" + +#: ../src/common/stockitem.cpp:134 +msgid "Justified" +msgstr "Justifié" + +#: ../src/richtext/richtextliststylepage.cpp:343 +#: ../src/richtext/richtextliststylepage.cpp:345 +#: ../src/richtext/richtextindentspage.cpp:165 +#: ../src/richtext/richtextindentspage.cpp:167 +msgid "Justify text left and right." +msgstr "Justifier le texte." + +#: ../src/common/fmapbase.cpp:121 +msgid "KOI8-R" +msgstr "KOI8-R" + +#: ../src/common/fmapbase.cpp:122 +msgid "KOI8-U" +msgstr "KOI8-U" + +#: ../src/common/menucmn.cpp:267 +#: ../src/common/menucmn.cpp:325 +msgid "KP_" +msgstr "KP_" + +#: ../src/common/menucmn.cpp:121 +msgid "KP_ADD" +msgstr "KP_PLUS" + +#: ../src/common/menucmn.cpp:116 +msgid "KP_BEGIN" +msgstr "KP_DEBUT" + +#: ../src/common/menucmn.cpp:124 +msgid "KP_DECIMAL" +msgstr "KP_VIRGULE" + +#: ../src/common/menucmn.cpp:118 +msgid "KP_DELETE" +msgstr "KP_EFFACER" + +#: ../src/common/menucmn.cpp:125 +msgid "KP_DIVIDE" +msgstr "KP_DIVISER" + +#: ../src/common/menucmn.cpp:110 +msgid "KP_DOWN" +msgstr "KP_BAS" + +#: ../src/common/menucmn.cpp:115 +msgid "KP_END" +msgstr "KP_FIN" + +#: ../src/common/menucmn.cpp:105 +msgid "KP_ENTER" +msgstr "KP_ENTRER" + +#: ../src/common/menucmn.cpp:119 +msgid "KP_EQUAL" +msgstr "KP_EGAL" + +#: ../src/common/menucmn.cpp:106 +msgid "KP_HOME" +msgstr "KP_DEBUT" + +#: ../src/common/menucmn.cpp:117 +msgid "KP_INSERT" +msgstr "KP_INSERER" + +#: ../src/common/menucmn.cpp:107 +msgid "KP_LEFT" +msgstr "KP_GAUCHE" + +#: ../src/common/menucmn.cpp:120 +msgid "KP_MULTIPLY" +msgstr "KP_MULTIPLIER" + +#: ../src/common/menucmn.cpp:113 +msgid "KP_NEXT" +msgstr "KP_SUIVANT" + +#: ../src/common/menucmn.cpp:114 +msgid "KP_PAGEDOWN" +msgstr "KP_PAGESUIVANTE" + +#: ../src/common/menucmn.cpp:112 +msgid "KP_PAGEUP" +msgstr "KP_PAGEPRECEDENTE" + +#: ../src/common/menucmn.cpp:111 +msgid "KP_PRIOR" +msgstr "KP_PRECEDENT" + +#: ../src/common/menucmn.cpp:109 +msgid "KP_RIGHT" +msgstr "KP_DROITE" + +#: ../src/common/menucmn.cpp:122 +msgid "KP_SEPARATOR" +msgstr "KP_SEPARATEUR" + +#: ../src/common/menucmn.cpp:103 +msgid "KP_SPACE" +msgstr "KP_ESPACE" + +#: ../src/common/menucmn.cpp:123 +msgid "KP_SUBTRACT" +msgstr "KP_MOINS" + +#: ../src/common/menucmn.cpp:104 +msgid "KP_TAB" +msgstr "KP_TABULATION" + +#: ../src/common/menucmn.cpp:108 +msgid "KP_UP" +msgstr "KP_HAUT" + +#: ../src/richtext/richtextindentspage.cpp:307 +#, fuzzy +msgid "L&ine spacing:" +msgstr "Espacement interligne:" + +#: ../src/common/menucmn.cpp:74 +msgid "LEFT" +msgstr "GAUCHE" + +#: ../src/generic/prntdlgg.cpp:611 +#: ../src/generic/prntdlgg.cpp:866 +msgid "Landscape" +msgstr "Paysage" + +#: ../src/common/paper.cpp:105 +msgid "Ledger, 17 x 11 in" +msgstr "Grand livre (17 x 11 pouces)" + +#: ../src/richtext/richtextliststylepage.cpp:248 +#: ../src/richtext/richtextliststylepage.cpp:251 +#: ../src/richtext/richtextliststylepage.cpp:252 +#: ../src/richtext/richtextbulletspage.cpp:197 +#: ../src/richtext/richtextbulletspage.cpp:200 +#: ../src/richtext/richtextbulletspage.cpp:201 +msgid "Left" +msgstr "Gauche" + +#: ../src/richtext/richtextliststylepage.cpp:391 +#: ../src/richtext/richtextindentspage.cpp:217 +msgid "Left (&first line):" +msgstr "Gauche (&Première ligne):" + +#: ../src/generic/prntdlgg.cpp:878 +msgid "Left margin (mm):" +msgstr "Marge gauche (mm) :" + +#: ../src/richtext/richtextliststylepage.cpp:329 +#: ../src/richtext/richtextliststylepage.cpp:331 +#: ../src/richtext/richtextindentspage.cpp:151 +#: ../src/richtext/richtextindentspage.cpp:153 +msgid "Left-align text." +msgstr "Aligne le texte à gauche" + +#: ../src/common/paper.cpp:146 +msgid "Legal Extra 9 1/2 x 15 in" +msgstr "Légal Extra 9,5 x 15 pouces" + +#: ../src/common/paper.cpp:98 +msgid "Legal, 8 1/2 x 14 in" +msgstr "Légal (8,5 x 14 pouces)" + +#: ../src/common/paper.cpp:145 +msgid "Letter Extra 9 1/2 x 12 in" +msgstr "Lettre Extra 9.5 x 12 pouces" + +#: ../src/common/paper.cpp:151 +msgid "Letter Extra Transverse 9.275 x 12 in" +msgstr "Lettre Extra Portrait 9.275 x 12 pouces" + +#: ../src/common/paper.cpp:154 +msgid "Letter Plus 8 1/2 x 12.69 in" +msgstr "Lettre Plus 8,5 x 11.69 pouces" + +#: ../src/common/paper.cpp:171 +msgid "Letter Rotated 11 x 8 1/2 in" +msgstr "Lettre paysage 11 x 8.5 pouces" + +#: ../src/common/paper.cpp:103 +msgid "Letter Small, 8 1/2 x 11 in" +msgstr "Lettre réduite (8,5 x 11 pouces)" + +#: ../src/common/paper.cpp:149 +msgid "Letter Transverse 8 1/2 x 11 in" +msgstr "Lettre 8,5 x 11 pouces" + +#: ../src/common/paper.cpp:97 +msgid "Letter, 8 1/2 x 11 in" +msgstr "Lettre (8,5 x 11 pouces)" + +#: ../src/generic/aboutdlgg.cpp:139 +msgid "License" +msgstr "" + +#: ../src/generic/fontdlgg.cpp:239 +msgid "Light" +msgstr "Léger" + +#: ../src/generic/helpext.cpp:301 +#, c-format +msgid "Line %lu of map file \"%s\" has invalid syntax, skipped." +msgstr "La ligne %lu du fichier carte \"%s\" a une syntaxe invalide et a été sautée." + +#: ../src/richtext/richtextliststylepage.cpp:453 +msgid "Line spacing:" +msgstr "Espacement interligne:" + +#: ../src/html/chm.cpp:820 +msgid "Link contained '//', converted to absolute link." +msgstr "Le lien contenait « // » et a été converti en lien absolu." + +#: ../src/richtext/richtextformatdlg.cpp:300 +msgid "List Style" +msgstr "Style de liste" + +#: ../src/richtext/richtextstyles.cpp:851 +msgid "List styles" +msgstr "Styles de liste" + +#: ../src/richtext/richtextfontpage.cpp:163 +#: ../src/richtext/richtextfontpage.cpp:165 +msgid "Lists font sizes in points." +msgstr "Liste des tailles de polices en points." + +#: ../src/richtext/richtextfontpage.cpp:144 +#: ../src/richtext/richtextfontpage.cpp:146 +msgid "Lists the available fonts." +msgstr "Liste des polices de caractères disponibles." + +#: ../src/common/fldlgcmn.cpp:283 +#, c-format +msgid "Load %s file" +msgstr "Charger le fichier %s" + +#: ../src/html/htmlwin.cpp:548 +msgid "Loading : " +msgstr "Chargement : " + +#: ../src/unix/snglinst.cpp:247 +#, c-format +msgid "Lock file '%s' has incorrect owner." +msgstr "Le fichier verrou « %s » a un propriétaire incorrect" + +#: ../src/unix/snglinst.cpp:252 +#, c-format +msgid "Lock file '%s' has incorrect permissions." +msgstr "Le fichier verrou « %s » a des permissions incorrectes." + +#: ../src/generic/logg.cpp:578 +#, c-format +msgid "Log saved to the file '%s'." +msgstr "Journal sauvé dans le fichier « %s »." + +#: ../include/wx/xti.h:497 +#: ../include/wx/xti.h:501 +msgid "Long Conversions not supported" +msgstr "Conversions longues non gérées" + +#: ../src/richtext/richtextliststylepage.cpp:486 +#: ../src/richtext/richtextbulletspage.cpp:284 +msgid "Lower case letters" +msgstr "Lettres minuscules" + +#: ../src/richtext/richtextliststylepage.cpp:488 +#: ../src/richtext/richtextbulletspage.cpp:286 +msgid "Lower case roman numerals" +msgstr "Chiffres romains minuscules" + +#: ../src/gtk/mdi.cpp:470 +#: ../src/gtk1/mdi.cpp:462 +msgid "MDI child" +msgstr "Fils MDI" + +#: ../src/common/menucmn.cpp:86 +msgid "MENU" +msgstr "MENU" + +#: ../src/msw/helpchm.cpp:57 +msgid "MS HTML Help functions are unavailable because the MS HTML Help library is not installed on this machine. Please install it." +msgstr "Les fonctions de l'aide MS HTML ne sont pas disponibles car la bibliothèque MS HTML Help n'est pas présente sur cette machine. Veuillez l'installer." + +#: ../src/univ/themes/win32.cpp:3740 +msgid "Ma&ximize" +msgstr "Ma&ximiser" + +#: ../src/generic/fdrepdlg.cpp:146 +msgid "Match case" +msgstr "Respecter la casse" + +#: ../src/common/fs_mem.cpp:178 +#, c-format +msgid "Memory VFS already contains file '%s'!" +msgstr "La mémoire VFS contient déjà le fichier « %s »." + +#: ../src/msw/frame.cpp:415 +msgid "Menu" +msgstr "Menu" + +#: ../src/univ/themes/metal.cpp:169 +msgid "Metal theme" +msgstr "Thème métallique" + +#: ../src/univ/themes/win32.cpp:3738 +msgid "Mi&nimize" +msgstr "Mi&nimiser" + +#: ../src/mgl/app.cpp:162 +#, c-format +msgid "Mode %ix%i-%i not available." +msgstr "Le mode %ix%i-%i n'est pas disponible." + +#: ../src/generic/fontdlgg.cpp:231 +msgid "Modern" +msgstr "Moderne" + +#: ../src/generic/filedlgg.cpp:509 +msgid "Modified" +msgstr "Modifié" + +#: ../src/common/module.cpp:133 +#, c-format +msgid "Module \"%s\" initialization failed" +msgstr "L'initialisation du module \"%s\" a échoué" + +#: ../src/common/paper.cpp:133 +msgid "Monarch Envelope, 3 7/8 x 7 1/2 in" +msgstr "Enveloppe monarchique (3,875 x 7,5 pouces)" + +#: ../contrib/src/gizmos/editlbox.cpp:158 +msgid "Move down" +msgstr "Descendre" + +#: ../contrib/src/gizmos/editlbox.cpp:157 +msgid "Move up" +msgstr "Monter" + +#: ../src/common/menucmn.cpp:99 +msgid "NUM_LOCK" +msgstr "NUM_LOCK" + +#: ../src/generic/filedlgg.cpp:506 +msgid "Name" +msgstr "Nom" + +#: ../src/richtext/richtextstyledlg.cpp:217 +msgid "New &Character Style..." +msgstr "Nouveau Style de &Caractères..." + +#: ../src/richtext/richtextstyledlg.cpp:229 +msgid "New &List Style..." +msgstr "Nouveau Style de &Liste..." + +#: ../src/richtext/richtextstyledlg.cpp:223 +msgid "New &Paragraph Style..." +msgstr "Nouveau Style de &Paragraphe..." + +#: ../src/richtext/richtextstyledlg.cpp:568 +#: ../src/richtext/richtextstyledlg.cpp:573 +#: ../src/richtext/richtextstyledlg.cpp:616 +#: ../src/richtext/richtextstyledlg.cpp:621 +#: ../src/richtext/richtextstyledlg.cpp:770 +#: ../src/richtext/richtextstyledlg.cpp:775 +#: ../src/richtext/richtextstyledlg.cpp:843 +#: ../src/richtext/richtextstyledlg.cpp:851 +msgid "New Style" +msgstr "Nouveau style" + +#: ../src/generic/dirdlgg.cpp:100 +msgid "New directory" +msgstr "Nouveau répertoire" + +#: ../contrib/src/gizmos/editlbox.cpp:155 +msgid "New item" +msgstr "Nouvel élément" + +#: ../src/generic/dirdlgg.cpp:324 +#: ../src/generic/dirdlgg.cpp:334 +#: ../src/generic/filedlgg.cpp:688 +#: ../src/generic/filedlgg.cpp:697 +msgid "NewName" +msgstr "NouveauNom" + +#: ../src/generic/tipdlg.cpp:303 +msgid "Next" +msgstr "Suivant" + +#: ../src/html/helpwnd.cpp:675 +msgid "Next page" +msgstr "Page suivante" + +#: ../src/motif/msgdlg.cpp:203 +#: ../src/mac/classic/msgdlg.cpp:59 +#: ../src/mac/classic/msgdlg.cpp:143 +#: ../src/mac/carbon/msgdlg.cpp:65 +#: ../src/mac/carbon/msgdlg.cpp:120 +msgid "No" +msgstr "Non" + +#: ../contrib/src/deprecated/resource.cpp:2505 +#: ../contrib/src/deprecated/resource.cpp:2659 +msgid "No XBM facility available!" +msgstr "Aucune fonctionnalité XBM disponible." + +#: ../contrib/src/deprecated/resource.cpp:2677 +msgid "No XPM icon facility available!" +msgstr "Aucune fonctionnalité disponible pour les icônes XPM." + +#: ../src/generic/animateg.cpp:156 +#, c-format +msgid "No animation handler for type %ld defined." +msgstr "Aucun gestionnaire d'animation n'est défini pour le type %ld." + +#: ../src/generic/helpext.cpp:452 +msgid "No entries found." +msgstr "Aucune entrée trouvée." + +#: ../src/common/fontmap.cpp:419 +#, c-format +msgid "" +"No font for displaying text in encoding '%s' found,\n" +"but an alternative encoding '%s' is available.\n" +"Do you want to use this encoding (otherwise you will have to choose another one)?" +msgstr "" +"Aucune police trouvée pour afficher du texte avec le codage « %s »,\n" +"mais le codage similaire « %s » est disponible.\n" +"Souhaitez-vous l'utiliser (sinon, vous devrez en choisir un autre) ?" + +#: ../src/common/fontmap.cpp:424 +#, c-format +msgid "" +"No font for displaying text in encoding '%s' found.\n" +"Would you like to select a font to be used for this encoding\n" +"(otherwise the text in this encoding will not be shown correctly)?" +msgstr "" +"Aucune police trouvée pour afficher du texte avec le codage « %s »,\n" +"Souhaitez-vous choisir une police à utiliser pour ce codage\n" +"(sinon le texte avec ce codage n'apparaîtra pas correctement) ?" + +#: ../src/dfb/fontmgr.cpp:156 +#, fuzzy, c-format +msgid "No fonts found in %s." +msgstr "Aucune entrée trouvée." + +#: ../src/xrc/xmlres.cpp:715 +#, c-format +msgid "No handler found for XML node '%s', class '%s'!" +msgstr "Aucun gestionnaire trouvé pour le noeud XML « %s » de la classe « %s »." + +#: ../src/generic/animateg.cpp:144 +msgid "No handler found for animation type." +msgstr "Aucun gestionnaire trouvé pour le type d'animation." + +#: ../src/common/image.cpp:2177 +#: ../src/common/image.cpp:2220 +msgid "No handler found for image type." +msgstr "Aucun gestionnaire trouvé pour le type d'image." + +#: ../src/common/image.cpp:2273 +#, c-format +msgid "No image handler for type %d defined." +msgstr "Aucun gestionnaire d'image défini pour le type %d." + +#: ../src/common/image.cpp:2185 +#: ../src/common/image.cpp:2228 +#, c-format +msgid "No image handler for type %ld defined." +msgstr "Aucun gestionnaire d'image défini pour le type %ld." + +#: ../src/common/image.cpp:2252 +#: ../src/common/image.cpp:2288 +#, c-format +msgid "No image handler for type %s defined." +msgstr "Aucun gestionnaire d'image défini pour le type %s." + +#: ../src/html/helpwnd.cpp:874 +msgid "No matching page found yet" +msgstr "Aucune page correspondante n'a encore été trouvée" + +#: ../src/unix/sound.cpp:82 +msgid "No sound" +msgstr "Pas de son" + +#: ../src/common/image.cpp:1855 +#: ../src/common/image.cpp:1896 +msgid "No unused colour in image being masked." +msgstr "Aucune couleur n'est disponible dans l'image en cours de masquage." + +#: ../src/common/image.cpp:2701 +msgid "No unused colour in image." +msgstr "Aucune couleur n'est disponible dans l'image." + +#: ../src/generic/helpext.cpp:309 +#, c-format +msgid "No valid mappings found in the file \"%s\"." +msgstr "Aucune table de correspondance valide n'a été trouvée dans le fichier \"%s\"." + +#: ../src/common/fmapbase.cpp:115 +msgid "Nordic (ISO-8859-10)" +msgstr "Nordique (ISO-8859-10)" + +#: ../src/richtext/richtextindentspage.cpp:245 +#: ../src/richtext/richtextindentspage.cpp:255 +#: ../src/richtext/richtextindentspage.cpp:256 +#: ../src/generic/fontdlgg.cpp:235 +#: ../src/generic/fontdlgg.cpp:238 +msgid "Normal" +msgstr "Normal" + +#: ../src/html/helpwnd.cpp:1269 +msgid "Normal face
and underlined. " +msgstr "Normal
et souligné. " + +#: ../src/html/helpwnd.cpp:1214 +msgid "Normal font:" +msgstr "Police normale :" + +#: ../src/richtext/richtextfontpage.cpp:271 +msgid "Not underlined" +msgstr "Non souligné" + +#: ../src/common/paper.cpp:117 +msgid "Note, 8 1/2 x 11 in" +msgstr "Note (8,5 x 11 pouces)" + +#: ../src/richtext/richtextliststylepage.cpp:489 +#: ../src/richtext/richtextbulletspage.cpp:287 +msgid "Numbered outline" +msgstr "Table des matières numérotée" + +#: ../src/richtext/richtextstyledlg.cpp:282 +#: ../src/gtk1/fontdlg.cpp:139 +#: ../src/msw/dialog.cpp:180 +#: ../src/mac/carbon/msgdlg.cpp:67 +#: ../contrib/src/deprecated/proplist.cpp:502 +msgid "OK" +msgstr "Accepter" + +#: ../src/common/xtixml.cpp:260 +msgid "Objects must have an id attribute" +msgstr "Les objets doivent avoir un attribut id" + +#: ../src/common/docview.cpp:1282 +#: ../src/common/docview.cpp:1632 +msgid "Open File" +msgstr "Ouvrir un fichier" + +#: ../src/html/helpwnd.cpp:683 +#: ../src/html/helpwnd.cpp:1555 +msgid "Open HTML document" +msgstr "Ouvrir un document HTML" + +#: ../src/generic/dbgrptg.cpp:159 +#, c-format +msgid "Open file \"%s\"" +msgstr "Ouvrir le fichier « %s »" + +#: ../src/generic/dirdlgg.cpp:350 +#: ../src/generic/filedlgg.cpp:712 +#: ../src/generic/filedlgg.cpp:862 +#: ../src/generic/dirctrlg.cpp:737 +msgid "Operation not permitted." +msgstr "Opération interdite." + +#: ../src/common/cmdline.cpp:716 +#, c-format +msgid "Option '%s' requires a value, '=' expected." +msgstr "L'option « %s » nécessite une valeur, « = » attendu." + +#: ../src/common/cmdline.cpp:737 +#, c-format +msgid "Option '%s' requires a value." +msgstr "L'option « %s » nécessite une valeur." + +#: ../src/common/cmdline.cpp:802 +#, c-format +msgid "Option '%s': '%s' cannot be converted to a date." +msgstr "Option « %s » : « %s » ne peut pas être converti en date." + +#: ../src/generic/prntdlgg.cpp:616 +#: ../src/generic/dirdlgg.cpp:185 +msgid "Options" +msgstr "Options" + +#: ../src/generic/prntdlgg.cpp:613 +#: ../src/generic/prntdlgg.cpp:867 +msgid "Orientation" +msgstr "Orientation" + +#: ../src/common/menucmn.cpp:102 +msgid "PAGEDOWN" +msgstr "PAGESUIVANTE" + +#: ../src/common/menucmn.cpp:101 +msgid "PAGEUP" +msgstr "PAGEPRECEDENTE" + +#: ../src/common/menucmn.cpp:87 +msgid "PAUSE" +msgstr "PAUSE" + +#: ../src/common/imagpcx.cpp:456 +#: ../src/common/imagpcx.cpp:479 +msgid "PCX: couldn't allocate memory" +msgstr "PCX : impossible d'allouer de la mémoire" + +#: ../src/common/imagpcx.cpp:455 +msgid "PCX: image format unsupported" +msgstr "PCX : format d'image non géré" + +#: ../src/common/imagpcx.cpp:478 +msgid "PCX: invalid image" +msgstr "PCX : image non valable" + +#: ../src/common/imagpcx.cpp:442 +msgid "PCX: this is not a PCX file." +msgstr "PCX : ce n'est pas un fichier PCX." + +#: ../src/common/imagpcx.cpp:458 +#: ../src/common/imagpcx.cpp:480 +msgid "PCX: unknown error !!!" +msgstr "PCX : erreur inconnue." + +#: ../src/common/imagpcx.cpp:457 +msgid "PCX: version number too low" +msgstr "PCX : numéro de version trop petit" + +#: ../src/common/menucmn.cpp:73 +msgid "PGDN" +msgstr "PAGESUIVANTE" + +#: ../src/common/menucmn.cpp:72 +msgid "PGUP" +msgstr "PAGEPRECEDENTE" + +#: ../src/common/imagpnm.cpp:88 +msgid "PNM: Couldn't allocate memory." +msgstr "PNM : impossible d'allouer de la mémoire." + +#: ../src/common/imagpnm.cpp:72 +msgid "PNM: File format is not recognized." +msgstr "PNM : le format de fichier n'est pas reconnu." + +#: ../src/common/imagpnm.cpp:106 +#: ../src/common/imagpnm.cpp:125 +#: ../src/common/imagpnm.cpp:144 +msgid "PNM: File seems truncated." +msgstr "PNM : le fichier semble tronqué." + +#: ../src/common/paper.cpp:189 +msgid "PRC 16K 146 x 215 mm" +msgstr "PRC 16K 146 x 215 mm" + +#: ../src/common/paper.cpp:202 +msgid "PRC 16K Rotated" +msgstr "PRC 16K Paysage" + +#: ../src/common/paper.cpp:190 +msgid "PRC 32K 97 x 151 mm" +msgstr "PRC 32K 97 x 151 mm" + +#: ../src/common/paper.cpp:203 +msgid "PRC 32K Rotated" +msgstr "PRC 32K Paysage" + +#: ../src/common/paper.cpp:191 +msgid "PRC 32K(Big) 97 x 151 mm" +msgstr "Format PRC 32K (Large), 97 x 151 mm" + +#: ../src/common/paper.cpp:204 +msgid "PRC 32K(Big) Rotated" +msgstr "Format PRC 32K (Large), Paysage" + +#: ../src/common/paper.cpp:192 +msgid "PRC Envelope #1 102 x 165 mm" +msgstr "Enveloppe PRC n. 1, 102 x 165 mm" + +#: ../src/common/paper.cpp:205 +msgid "PRC Envelope #1 Rotated 165 x 102 mm" +msgstr "Enveloppe PRC n. 1, Paysage, 165 x 102 mm" + +#: ../src/common/paper.cpp:201 +msgid "PRC Envelope #10 324 x 458 mm" +msgstr "Enveloppe PRC n. 10, 324 x 458 mm" + +#: ../src/common/paper.cpp:214 +msgid "PRC Envelope #10 Rotated 458 x 324 mm" +msgstr "Enveloppe PRC n. 10, Paysage, 458 x 324 mm" + +#: ../src/common/paper.cpp:193 +msgid "PRC Envelope #2 102 x 176 mm" +msgstr "Enveloppe PRC n. 2, 102 x 176 mm" + +#: ../src/common/paper.cpp:206 +msgid "PRC Envelope #2 Rotated 176 x 102 mm" +msgstr "Enveloppe PRC n. 2, Paysage, 176 x 102 mm" + +#: ../src/common/paper.cpp:194 +msgid "PRC Envelope #3 125 x 176 mm" +msgstr "Enveloppe PRC n. 3, 125 x 176 mm" + +#: ../src/common/paper.cpp:207 +msgid "PRC Envelope #3 Rotated 176 x 125 mm" +msgstr "Enveloppe PRC n. 3, Paysage, 176 x 125 mm" + +#: ../src/common/paper.cpp:195 +msgid "PRC Envelope #4 110 x 208 mm" +msgstr "Enveloppe PRC n. 4, 110 x 208 mm" + +#: ../src/common/paper.cpp:208 +msgid "PRC Envelope #4 Rotated 208 x 110 mm" +msgstr "Enveloppe PRC n. 4, Paysage, 208 x 110 mm" + +#: ../src/common/paper.cpp:196 +msgid "PRC Envelope #5 110 x 220 mm" +msgstr "Enveloppe PRC n. 5, 110 x 220 mm" + +#: ../src/common/paper.cpp:209 +msgid "PRC Envelope #5 Rotated 220 x 110 mm" +msgstr "Enveloppe PRC n. 5, Paysage, 220 x 110 mm" + +#: ../src/common/paper.cpp:197 +msgid "PRC Envelope #6 120 x 230 mm" +msgstr "Enveloppe PRC n. 6, 120 x 230 mm" + +#: ../src/common/paper.cpp:210 +msgid "PRC Envelope #6 Rotated 230 x 120 mm" +msgstr "Enveloppe PRC n. 6, Paysage, 230 x 120 mm" + +#: ../src/common/paper.cpp:198 +msgid "PRC Envelope #7 160 x 230 mm" +msgstr "Enveloppe PRC n. 7, 160 x 230 mm" + +#: ../src/common/paper.cpp:211 +msgid "PRC Envelope #7 Rotated 230 x 160 mm" +msgstr "Enveloppe PRC n. 7, Paysage, 230 x 160 mm" + +#: ../src/common/paper.cpp:199 +msgid "PRC Envelope #8 120 x 309 mm" +msgstr "Enveloppe PRC n. 8, 120 x 309 mm" + +#: ../src/common/paper.cpp:212 +msgid "PRC Envelope #8 Rotated 309 x 120 mm" +msgstr "Enveloppe PRC n. 8, Paysage, 309 x 120 mm" + +#: ../src/common/paper.cpp:200 +msgid "PRC Envelope #9 229 x 324 mm" +msgstr "Enveloppe PRC n. 9, 229 x 324 mm" + +#: ../src/common/paper.cpp:213 +msgid "PRC Envelope #9 Rotated 324 x 229 mm" +msgstr "Enveloppe PRC n. 9, Paysage, 324 x 229 mm" + +#: ../src/common/menucmn.cpp:90 +msgid "PRINT" +msgstr "IMPRIMER" + +#: ../src/common/prntbase.cpp:1543 +#, c-format +msgid "Page %d" +msgstr "Page %d" + +#: ../src/common/prntbase.cpp:1541 +#, c-format +msgid "Page %d of %d" +msgstr "Page %d de %d" + +#: ../src/generic/prntdlgg.cpp:826 +msgid "Page Setup" +msgstr "Mise en page" + +#: ../src/common/prntbase.cpp:461 +#: ../src/gtk/gnome/gprint.cpp:678 +msgid "Page setup" +msgstr "Mise en page" + +#: ../src/generic/prntdlgg.cpp:215 +msgid "Pages" +msgstr "Pages" + +#: ../src/generic/prntdlgg.cpp:799 +#: ../src/generic/prntdlgg.cpp:853 +#: ../src/generic/prntdlgg.cpp:1055 +msgid "Paper Size" +msgstr "Taille de la page" + +#: ../src/generic/prntdlgg.cpp:600 +#: ../src/generic/prntdlgg.cpp:840 +#: ../src/generic/prntdlgg.cpp:1050 +msgid "Paper size" +msgstr "Taille de la page" + +#: ../src/richtext/richtextstyles.cpp:849 +msgid "Paragraph styles" +msgstr "Styles de paragraphe" + +#: ../src/common/xtistrm.cpp:421 +msgid "Passing a already registered object to SetObject" +msgstr "Objet déjà enregistré indiqué à SetObject" + +#: ../src/common/xtistrm.cpp:639 +msgid "Passing a already registered object to SetObjectName" +msgstr "Objet déjà enregistré indiqué à SetObjectName" + +#: ../src/common/xtistrm.cpp:432 +#: ../src/common/xtistrm.cpp:652 +msgid "Passing an unkown object to GetObject" +msgstr "Objet inconnu indiqué à GetObject" + +#: ../src/richtext/richtextctrl.cpp:2220 +msgid "Paste" +msgstr "Coller" + +#: ../src/common/stockitem.cpp:207 +msgid "Paste selection" +msgstr "Coller la sélection" + +#: ../src/richtext/richtextliststylepage.cpp:221 +#: ../src/richtext/richtextbulletspage.cpp:170 +msgid "Peri&od" +msgstr "&Virgule" + +#: ../src/generic/filedlgg.cpp:512 +msgid "Permissions" +msgstr "Permissions" + +#: ../include/wx/unix/pipe.h:47 +msgid "Pipe creation failed" +msgstr "Échec de la création du tube" + +#: ../src/gtk1/fontdlg.cpp:75 +msgid "Please choose a valid font." +msgstr "Choisissez une police valable." + +#: ../src/gtk/filedlg.cpp:72 +#: ../src/generic/filedlgg.cpp:1476 +msgid "Please choose an existing file." +msgstr "Choisissez un fichier existant." + +#: ../src/html/helpwnd.cpp:819 +msgid "Please choose the page to display:" +msgstr "Choisissez la page à afficher :" + +#: ../src/msw/dialup.cpp:794 +msgid "Please choose which ISP do you want to connect to" +msgstr "Veuillez choisir à quel FAI vous voulez vous connecter" + +#: ../src/msw/listctrl.cpp:421 +#, c-format +msgid "" +"Please install a newer version of comctl32.dll\n" +"(at least version 4.70 is required but you have %d.%02d)\n" +"or this program won't operate correctly." +msgstr "" +"Veuillez installer une nouvelle version de comctl32.dll\n" +"(la version 4.70 au minimum est nécessaire, contre la version %d.%02d\n" +"actuellement), sinon ce programme ne fonctionnera pas correctement." + +#: ../src/common/prntbase.cpp:323 +msgid "Please wait while printing\n" +msgstr "Patientez pendant l'impression\n" + +#: ../src/generic/prntdlgg.cpp:610 +#: ../src/generic/prntdlgg.cpp:865 +msgid "Portrait" +msgstr "Portrait" + +#: ../src/generic/prntdlgg.cpp:298 +msgid "PostScript file" +msgstr "Fichier PostScript" + +#: ../src/html/helpwnd.cpp:1231 +#: ../src/generic/fontdlgg.cpp:362 +#: ../src/mac/carbon/fontdlg.cpp:513 +msgid "Preview:" +msgstr "Aperçu :" + +#: ../src/html/helpwnd.cpp:672 +msgid "Previous page" +msgstr "Page précédente" + +#: ../src/common/prntbase.cpp:403 +#: ../src/gtk/gnome/gprint.cpp:509 +#: ../src/gtk/gnome/gprint.cpp:521 +#: ../src/generic/prntdlgg.cpp:143 +#: ../src/generic/prntdlgg.cpp:156 +msgid "Print" +msgstr "Imprimer" + +#: ../src/common/docview.cpp:1045 +msgid "Print Preview" +msgstr "Aperçu avant impression" + +#: ../src/common/prntbase.cpp:1495 +#: ../src/common/prntbase.cpp:1521 +msgid "Print Preview Failure" +msgstr "Erreur de l'aperçu avant impression" + +#: ../src/generic/prntdlgg.cpp:223 +msgid "Print Range" +msgstr "Pages à imprimer" + +#: ../src/generic/prntdlgg.cpp:447 +msgid "Print Setup" +msgstr "Configuration de l'impression" + +#: ../src/generic/prntdlgg.cpp:619 +msgid "Print in colour" +msgstr "Imprimer en couleur" + +#: ../src/common/stockitem.cpp:144 +msgid "Print previe&w" +msgstr "&Aperçu avant impression" + +#: ../src/gtk/gnome/gprint.cpp:915 +msgid "Print preview" +msgstr "Aperçu avant impression" + +#: ../src/generic/prntdlgg.cpp:628 +msgid "Print spooling" +msgstr "Queue d'impression" + +#: ../src/html/helpwnd.cpp:689 +msgid "Print this page" +msgstr "Imprimer cette page" + +#: ../src/generic/prntdlgg.cpp:184 +msgid "Print to File" +msgstr "Imprimer dans un fichier" + +#: ../src/generic/prntdlgg.cpp:491 +msgid "Printer" +msgstr "Imprimante" + +#: ../src/generic/prntdlgg.cpp:631 +msgid "Printer command:" +msgstr "Commande pour l'imprimante :" + +#: ../src/generic/prntdlgg.cpp:179 +msgid "Printer options" +msgstr "Options de l'imprimante" + +#: ../src/generic/prntdlgg.cpp:643 +msgid "Printer options:" +msgstr "Options de l'imprimante :" + +#: ../src/generic/prntdlgg.cpp:914 +msgid "Printer..." +msgstr "Imprimante..." + +#: ../src/generic/prntdlgg.cpp:195 +msgid "Printer:" +msgstr "Imprimante :" + +#: ../src/common/prntbase.cpp:320 +#: ../src/common/prntbase.cpp:541 +msgid "Printing " +msgstr "Impression en cours" + +#: ../src/common/prntbase.cpp:337 +msgid "Printing Error" +msgstr "Erreur d'impression" + +#: ../src/generic/printps.cpp:204 +#, c-format +msgid "Printing page %d..." +msgstr "Impression de la page %d..." + +#: ../src/generic/printps.cpp:164 +msgid "Printing..." +msgstr "Impression en cours..." + +#: ../src/common/debugrpt.cpp:552 +#, c-format +msgid "Processing debug report has failed, leaving the files in \"%s\" directory." +msgstr "Échec du traitement du rapport de débogage, les fichiers sont maintenus dans le répertoire « %s »." + +#: ../src/common/log.cpp:458 +msgid "Program aborted." +msgstr "Programme interrompu." + +#: ../src/common/paper.cpp:114 +msgid "Quarto, 215 x 275 mm" +msgstr "Quarto, 215 x 275 mm" + +#: ../src/generic/logg.cpp:1171 +msgid "Question" +msgstr "Question" + +#: ../src/common/stockitem.cpp:208 +msgid "Quit this program" +msgstr "Quitter ce programme" + +#: ../src/common/menucmn.cpp:71 +msgid "RETURN" +msgstr "RETOUR" + +#: ../src/common/menucmn.cpp:75 +msgid "RIGHT" +msgstr "DROITE" + +#: ../src/common/ffile.cpp:125 +#: ../src/common/ffile.cpp:144 +#, c-format +msgid "Read error on file '%s'" +msgstr "Erreur de lecture dans le fichier « %s »" + +#: ../src/common/prntbase.cpp:252 +msgid "Ready" +msgstr "Prêt" + +#: ../src/common/stockitem.cpp:209 +msgid "Redo last action" +msgstr "Exécuter à nouveau la dernière action" + +#: ../src/xrc/xmlres.cpp:681 +#, c-format +msgid "Referenced object node with ref=\"%s\" not found!" +msgstr "Le noeud objet référencé par ref=\"%s\" est introuvable." + +#: ../src/common/stockitem.cpp:148 +msgid "Refresh" +msgstr "Actualiser" + +#: ../src/msw/registry.cpp:566 +#, c-format +msgid "Registry key '%s' already exists." +msgstr "La clé de registre « %s » existe déjà." + +#: ../src/msw/registry.cpp:535 +#, c-format +msgid "Registry key '%s' does not exist, cannot rename it." +msgstr "Impossible de renommer la clé de registre « %s », celle-ci n'existe pas." + +#: ../src/msw/registry.cpp:667 +#, c-format +msgid "" +"Registry key '%s' is needed for normal system operation,\n" +"deleting it will leave your system in unusable state:\n" +"operation aborted." +msgstr "" +"La clé de registre « %s » est nécessaire pour un fonctionnement correct\n" +"du système ; sa suppression laissera votre système inutilisable :\n" +"opération abandonnée." + +#: ../src/msw/registry.cpp:462 +#, c-format +msgid "Registry value '%s' already exists." +msgstr "La valeur de registre « %s » existe déjà." + +#: ../src/richtext/richtextfontpage.cpp:265 +#: ../src/richtext/richtextfontpage.cpp:268 +msgid "Regular" +msgstr "Régulier" + +#: ../src/generic/helpext.cpp:461 +msgid "Relevant entries:" +msgstr "Entrées pertinentes :" + +#: ../src/generic/progdlgg.cpp:206 +msgid "Remaining time : " +msgstr "Temps restant : " + +#: ../src/common/stockitem.cpp:149 +msgid "Remove" +msgstr "Supprimer" + +#: ../src/html/helpwnd.cpp:426 +msgid "Remove current page from bookmarks" +msgstr "Retirer la page courante de vos signets" + +#: ../src/common/rendcmn.cpp:196 +#, c-format +msgid "Renderer \"%s\" has incompatible version %d.%d and couldn't be loaded." +msgstr "Le moteur de rendu « %s » a une version %d.%d incompatible et n'a pas pu être chargé." + +#: ../src/richtext/richtextbuffer.cpp:2970 +msgid "Renumber List" +msgstr "Renuméroter la liste" + +#: ../src/common/stockitem.cpp:123 +msgid "Rep&lace" +msgstr "Remp&lacer" + +#: ../src/richtext/richtextctrl.cpp:2361 +msgid "Replace" +msgstr "Remplacer" + +#: ../src/generic/fdrepdlg.cpp:181 +msgid "Replace &all" +msgstr "Rempl&acer tout" + +#: ../src/common/stockitem.cpp:206 +msgid "Replace selection" +msgstr "Remplacer la sélection" + +#: ../src/generic/fdrepdlg.cpp:123 +msgid "Replace with:" +msgstr "Remplacer par :" + +#: ../src/xrc/xmlres.cpp:504 +msgid "Resource files must have same version number!" +msgstr "Les fichiers de ressource doivent avoir le même numéro de version." + +#: ../src/common/stockitem.cpp:150 +msgid "Revert to Saved" +msgstr "Changer en enregistré" + +#: ../src/richtext/richtextliststylepage.cpp:250 +#: ../src/richtext/richtextbulletspage.cpp:199 +msgid "Right" +msgstr "Droite" + +#: ../src/generic/prntdlgg.cpp:890 +msgid "Right margin (mm):" +msgstr "Marge droite (mm) :" + +#: ../src/richtext/richtextliststylepage.cpp:336 +#: ../src/richtext/richtextliststylepage.cpp:338 +#: ../src/richtext/richtextindentspage.cpp:158 +#: ../src/richtext/richtextindentspage.cpp:160 +msgid "Right-align text." +msgstr "Alignement à droite du texte" + +#: ../src/generic/fontdlgg.cpp:229 +msgid "Roman" +msgstr "Roman" + +#: ../src/richtext/richtextliststylepage.cpp:298 +#: ../src/richtext/richtextbulletspage.cpp:250 +msgid "S&tandard bullet name:" +msgstr "Nom s&tandard de tiret:" + +#: ../src/common/menucmn.cpp:100 +msgid "SCROLL_LOCK" +msgstr "SCROLL_LOCK" + +#: ../src/common/menucmn.cpp:89 +msgid "SELECT" +msgstr "SELECTION" + +#: ../src/common/menucmn.cpp:95 +msgid "SEPARATOR" +msgstr "SEPARATEUR" + +#: ../src/common/fmapbase.cpp:153 +msgid "SHIFT-JIS" +msgstr "SHIFT-JIS" + +#: ../src/common/menucmn.cpp:92 +msgid "SNAPSHOT" +msgstr "CAPTURE_D_ECRAN" + +#: ../src/common/menucmn.cpp:80 +msgid "SPACE" +msgstr "ESPACE" + +#: ../src/common/menucmn.cpp:270 +#: ../src/common/menucmn.cpp:327 +msgid "SPECIAL" +msgstr "SPECIAL" + +#: ../src/common/menucmn.cpp:96 +msgid "SUBTRACT" +msgstr "SOUSTRAIRE" + +#: ../src/common/sizer.cpp:2093 +msgid "Save" +msgstr "Enregistrer" + +#: ../src/common/fldlgcmn.cpp:285 +#, c-format +msgid "Save %s file" +msgstr "Enregistrer le fichier %s" + +#: ../src/common/stockitem.cpp:152 +msgid "Save &As..." +msgstr "Enregistrer &sous..." + +#: ../src/common/docview.cpp:303 +msgid "Save as" +msgstr "Enregistrer sous" + +#: ../src/common/stockitem.cpp:212 +msgid "Save current document" +msgstr "Enregistrer le document courant" + +#: ../src/common/stockitem.cpp:213 +msgid "Save current document with a different filename" +msgstr "Enregistrer le document courant avec un nouveau nom" + +#: ../src/generic/logg.cpp:511 +msgid "Save log contents to file" +msgstr "Enregistrer le contenu du journal dans un fichier" + +#: ../src/generic/fontdlgg.cpp:232 +msgid "Script" +msgstr "Script" + +#: ../src/html/helpwnd.cpp:534 +#: ../src/html/helpwnd.cpp:549 +#: ../src/generic/srchctlg.cpp:340 +msgid "Search" +msgstr "Chercher" + +#: ../src/html/helpwnd.cpp:536 +msgid "Search contents of help book(s) for all occurences of the text you typed above" +msgstr "Rechercher dans la table des matières du/des manuel(s) d'aide toutes les occurrences du texte que vous avez tapé ci-dessus" + +#: ../src/generic/fdrepdlg.cpp:159 +msgid "Search direction" +msgstr "Direction de la recherche" + +#: ../src/generic/fdrepdlg.cpp:111 +msgid "Search for:" +msgstr "Chercher :" + +#: ../src/html/helpwnd.cpp:1063 +msgid "Search in all books" +msgstr "Chercher dans tous les manuels" + +#: ../src/html/helpwnd.cpp:873 +msgid "Searching..." +msgstr "Recherche..." + +#: ../src/generic/dirctrlg.cpp:608 +msgid "Sections" +msgstr "Sections" + +#: ../src/common/ffile.cpp:222 +#, c-format +msgid "Seek error on file '%s'" +msgstr "Erreur de recherche dans le fichier « %s »" + +#: ../src/common/ffile.cpp:212 +#, c-format +msgid "Seek error on file '%s' (large files not supported by stdio)" +msgstr "Erreur de recherche dans le fichier « %s » (les fichiers importants ne sont pas gérés par stdio)" + +#: ../src/richtext/richtextctrl.cpp:2586 +#: ../src/msw/textctrl.cpp:2308 +#: ../src/mac/carbon/textctrl.cpp:1047 +msgid "Select &All" +msgstr "&Tout sélectionner" + +#: ../src/common/docview.cpp:1712 +msgid "Select a document template" +msgstr "Sélectionner un modèle de document" + +#: ../src/common/docview.cpp:1789 +msgid "Select a document view" +msgstr "Sélectionner une vue du document" + +#: ../src/common/docview.cpp:1592 +msgid "Select a file" +msgstr "Sélectionner un fichier" + +#: ../src/common/stockitem.cpp:153 +msgid "Select all" +msgstr "Tout sélectionner" + +#: ../src/richtext/richtextfontpage.cpp:192 +#: ../src/richtext/richtextfontpage.cpp:194 +msgid "Select regular or bold." +msgstr "Choisir normal ou gras." + +#: ../src/richtext/richtextfontpage.cpp:179 +#: ../src/richtext/richtextfontpage.cpp:181 +msgid "Select regular or italic style." +msgstr "Choisir normal ou italique." + +#: ../src/richtext/richtextfontpage.cpp:205 +#: ../src/richtext/richtextfontpage.cpp:207 +msgid "Select underlining or no underlining." +msgstr "Choisir normal ou souligné." + +#: ../src/motif/filedlg.cpp:217 +msgid "Selection" +msgstr "Sélection" + +#: ../src/richtext/richtextliststylepage.cpp:186 +#: ../src/richtext/richtextliststylepage.cpp:188 +msgid "Selects the list level to edit." +msgstr "Choisissez le niveau de liste à éditer." + +#: ../src/common/cmdline.cpp:755 +#, c-format +msgid "Separator expected after the option '%s'." +msgstr "Séparateur attendu après l'option « %s »." + +#: ../include/wx/xti.h:837 +msgid "SetProperty called w/o valid setter" +msgstr "SetProperty appelé sans monteur valable" + +#: ../src/generic/prntdlgg.cpp:187 +msgid "Setup..." +msgstr "Configurer..." + +#: ../src/msw/dialup.cpp:568 +msgid "Several active dialup connections found, choosing one randomly." +msgstr "Plusieurs connexions actives trouvées, sélection unique aléatoire." + +#: ../src/common/menucmn.cpp:318 +msgid "Shift-" +msgstr "Majuscule-" + +#: ../src/generic/dirdlgg.cpp:168 +msgid "Show &hidden directories" +msgstr "Montrer les répertoires cac&hés" + +#: ../src/generic/filedlgg.cpp:1159 +msgid "Show &hidden files" +msgstr "Montrer les fichiers cac&hés" + +#: ../src/common/stockitem.cpp:202 +msgid "Show about dialog" +msgstr "Montrer la fenêtre d'à propos" + +#: ../src/html/helpwnd.cpp:488 +msgid "Show all" +msgstr "Tout montrer" + +#: ../src/html/helpwnd.cpp:499 +msgid "Show all items in index" +msgstr "Montrer tous les éléments de l'index" + +#: ../src/generic/dirdlgg.cpp:103 +msgid "Show hidden directories" +msgstr "Montrer les répertoires cachés" + +#: ../src/html/helpwnd.cpp:656 +msgid "Show/hide navigation panel" +msgstr "Montrer/cacher le panneau de navigation" + +#: ../src/richtext/richtextsymboldlg.cpp:420 +#: ../src/richtext/richtextsymboldlg.cpp:422 +msgid "Shows a Unicode subset." +msgstr "Affiche un échantillon d'Unicode" + +#: ../src/richtext/richtextliststylepage.cpp:474 +#: ../src/richtext/richtextliststylepage.cpp:476 +#: ../src/richtext/richtextbulletspage.cpp:274 +#: ../src/richtext/richtextbulletspage.cpp:276 +msgid "Shows a preview of the bullet settings." +msgstr "Affiche un aperçu des réglages pour les tirets." + +#: ../src/richtext/richtextfontpage.cpp:256 +#: ../src/richtext/richtextfontpage.cpp:258 +msgid "Shows a preview of the font settings." +msgstr "Affiche un aperçu de réglages de la police." + +#: ../src/mac/carbon/fontdlg.cpp:517 +#: ../src/mac/carbon/fontdlg.cpp:519 +msgid "Shows a preview of the font." +msgstr "Montre un aperçu de la liste." + +#: ../src/richtext/richtextindentspage.cpp:327 +#: ../src/richtext/richtextindentspage.cpp:329 +msgid "Shows a preview of the paragraph settings." +msgstr "Affiche un aperçu des réglages de paragraphe." + +#: ../src/generic/fontdlgg.cpp:367 +#: ../src/generic/fontdlgg.cpp:369 +msgid "Shows the font preview." +msgstr "Montrer un aperçu des polices." + +#: ../src/univ/themes/mono.cpp:509 +msgid "Simple monochrome theme" +msgstr "Simple thème monochrome" + +#: ../src/richtext/richtextliststylepage.cpp:459 +#: ../src/richtext/richtextliststylepage.cpp:462 +#: ../src/richtext/richtextliststylepage.cpp:463 +#: ../src/richtext/richtextindentspage.cpp:314 +#: ../src/richtext/richtextindentspage.cpp:317 +#: ../src/richtext/richtextindentspage.cpp:318 +msgid "Single" +msgstr "Simple" + +#: ../src/generic/filedlgg.cpp:507 +msgid "Size" +msgstr "Taille" + +#: ../src/mac/carbon/fontdlg.cpp:462 +msgid "Size:" +msgstr "Taille:" + +#: ../src/generic/progdlgg.cpp:218 +#: ../src/generic/progdlgg.cpp:236 +#: ../src/generic/progdlgg.cpp:621 +msgid "Skip" +msgstr "Sauter" + +#: ../src/generic/fontdlgg.cpp:237 +msgid "Slant" +msgstr "Incliné" + +#: ../src/common/docview.cpp:579 +msgid "Sorry, could not open this file for saving." +msgstr "Impossible d'ouvrir ce fichier pour l'enregistrement." + +#: ../src/common/docview.cpp:615 +#: ../src/common/docview.cpp:1611 +msgid "Sorry, could not open this file." +msgstr "Impossible d'ouvrir ce fichier." + +#: ../src/common/docview.cpp:586 +msgid "Sorry, could not save this file." +msgstr "Impossible d'enregistrer ce fichier." + +#: ../contrib/src/fl/controlbar.cpp:384 +msgid "Sorry, docking is not supported for ports other than wxMSW, wxMac and wxGTK" +msgstr "Désolé, l'arrimage n'est supporté que pour wxMSW, wxMAC et wxGTK" + +#: ../src/common/prntbase.cpp:1495 +msgid "Sorry, not enough memory to create a preview." +msgstr "Mémoire insuffisante pour créer un aperçu." + +#: ../src/common/docview.cpp:1041 +msgid "Sorry, print preview needs a printer to be installed." +msgstr "L'aperçu avant impression nécessite une imprimante installée." + +#: ../src/richtext/richtextstyledlg.cpp:573 +#: ../src/richtext/richtextstyledlg.cpp:621 +#: ../src/richtext/richtextstyledlg.cpp:775 +#: ../src/richtext/richtextstyledlg.cpp:851 +msgid "Sorry, that name is taken. Please choose another." +msgstr "Désole mais ce nom est déjà pris. Veuillez en choisir un autre." + +#: ../src/common/docview.cpp:1281 +#: ../src/common/docview.cpp:1631 +msgid "Sorry, the format for this file is unknown." +msgstr "Format de fichier inconnu." + +#: ../src/unix/sound.cpp:493 +msgid "Sound data are in unsupported format." +msgstr "Format des données sonores non géré." + +#: ../src/unix/sound.cpp:478 +#, c-format +msgid "Sound file '%s' is in unsupported format." +msgstr "Format du fichier sonore « %s » non géré." + +#: ../src/richtext/richtextliststylepage.cpp:469 +msgid "Spacing" +msgstr "Espacement" + +#: ../src/richtext/richtextliststylepage.cpp:492 +#: ../src/richtext/richtextbulletspage.cpp:290 +msgid "Standard" +msgstr "Standard" + +#: ../src/common/paper.cpp:106 +msgid "Statement, 5 1/2 x 8 1/2 in" +msgstr "Communiqué (5,5 x 8,5 pouces)" + +#: ../src/generic/prntdlgg.cpp:203 +msgid "Status:" +msgstr "État :" + +#: ../src/generic/logg.cpp:628 +msgid "Status: " +msgstr "État : " + +#: ../src/common/xtistrm.cpp:249 +msgid "Streaming delegates for not already streamed objects not yet supported" +msgstr "Les flux délégués pour les objets non transformés en flux ne sont pas encore gérés" + +#: ../src/msw/colour.cpp:35 +#, c-format +msgid "String To Colour : Incorrect colour specification : %s" +msgstr "Conversion de chaîne en couleur : spécification de la couleur non valable : %s" + +#: ../include/wx/xti.h:424 +#: ../include/wx/xti.h:428 +msgid "String conversions not supported" +msgstr "Conversion des chaînes non gérée" + +#: ../src/richtext/richtextformatdlg.cpp:269 +msgid "Style" +msgstr "Style" + +#: ../include/wx/richtext/richtextstyledlg.h:45 +msgid "Style Organiser" +msgstr "Organiseur de styles" + +#: ../src/mac/carbon/fontdlg.cpp:471 +msgid "Style:" +msgstr "Style" + +#: ../src/xrc/xmlres.cpp:788 +#, c-format +msgid "Subclass '%s' not found for resource '%s', not subclassing!" +msgstr "Sous-classe « %s » non trouvée pour la ressource « %s », pas de sous-classement." + +#: ../src/richtext/richtextfontpage.cpp:246 +#, fuzzy +msgid "Subscrip&t" +msgstr "Script" + +#: ../src/richtext/richtextfontpage.cpp:239 +#, fuzzy +msgid "Supe&rscript" +msgstr "Script" + +#: ../src/common/paper.cpp:152 +msgid "SuperA/SuperA/A4 227 x 356 mm" +msgstr "SuperA/SuperA/A4 227 x 356 mm" + +#: ../src/common/paper.cpp:153 +msgid "SuperB/SuperB/A3 305 x 487 mm" +msgstr "SuperB/SuperB/A3 305 x 487 mm" + +#: ../src/generic/fontdlgg.cpp:233 +msgid "Swiss" +msgstr "Suisse" + +#: ../src/richtext/richtextliststylepage.cpp:490 +#: ../src/richtext/richtextbulletspage.cpp:288 +msgid "Symbol" +msgstr "Symbole" + +#: ../src/richtext/richtextliststylepage.cpp:287 +#: ../src/richtext/richtextbulletspage.cpp:238 +msgid "Symbol &font:" +msgstr "Police du symbole:" + +#: ../include/wx/richtext/richtextsymboldlg.h:46 +msgid "Symbols" +msgstr "Symboles" + +#: ../src/common/menucmn.cpp:81 +msgid "TAB" +msgstr "TAB" + +#: ../src/common/imagtiff.cpp:194 +msgid "TIFF library error." +msgstr "Erreur dans la bibliothèque TIFF" + +#: ../src/common/imagtiff.cpp:178 +msgid "TIFF library warning." +msgstr "Alarme dans la bibliothèque TIFF" + +#: ../src/common/imagtiff.cpp:285 +#: ../src/common/imagtiff.cpp:296 +#: ../src/common/imagtiff.cpp:436 +msgid "TIFF: Couldn't allocate memory." +msgstr "TIFF : allocation de mémoire impossible." + +#: ../src/common/imagtiff.cpp:248 +msgid "TIFF: Error loading image." +msgstr "TIFF : erreur au chargement de l'image." + +#: ../src/common/imagtiff.cpp:310 +msgid "TIFF: Error reading image." +msgstr "TIFF : erreur à la lecture de l'image." + +#: ../src/common/imagtiff.cpp:378 +msgid "TIFF: Error saving image." +msgstr "TIFF : erreur à la sauvegarde de l'image." + +#: ../src/common/imagtiff.cpp:482 +msgid "TIFF: Error writing image." +msgstr "TIFF : erreur à l'écriture de l'image." + +#: ../src/common/paper.cpp:147 +msgid "Tabloid Extra 11.69 x 18 in" +msgstr "Tabloïde Extra 11.69 x 18 pouces" + +#: ../src/common/paper.cpp:104 +msgid "Tabloid, 11 x 17 in" +msgstr "Tabloïde (11 x 17 pouces)" + +#: ../src/richtext/richtextformatdlg.cpp:287 +msgid "Tabs" +msgstr "Tabulations" + +#: ../src/generic/fontdlgg.cpp:234 +msgid "Teletype" +msgstr "Télétype" + +#: ../src/common/docview.cpp:1713 +msgid "Templates" +msgstr "Modèles" + +#: ../src/common/fmapbase.cpp:116 +msgid "Thai (ISO-8859-11)" +msgstr "Thaï (ISO-8859-11)" + +#: ../src/common/ftp.cpp:704 +msgid "The FTP server doesn't support passive mode." +msgstr "Mode passif non géré par le serveur FTP." + +#: ../src/common/ftp.cpp:692 +msgid "The FTP server doesn't support the PORT command." +msgstr "Commande PORT non gérée par le serveur FTP." + +#: ../src/richtext/richtextliststylepage.cpp:214 +#: ../src/richtext/richtextliststylepage.cpp:216 +#: ../src/richtext/richtextbulletspage.cpp:162 +#: ../src/richtext/richtextbulletspage.cpp:164 +msgid "The available bullet styles." +msgstr "Les styles de tirets disponibles." + +#: ../src/richtext/richtextstyledlg.cpp:194 +#: ../src/richtext/richtextstyledlg.cpp:196 +msgid "The available styles." +msgstr "Les styles disponibles." + +#: ../src/richtext/richtextliststylepage.cpp:253 +#: ../src/richtext/richtextliststylepage.cpp:255 +#: ../src/richtext/richtextliststylepage.cpp:274 +#: ../src/richtext/richtextliststylepage.cpp:276 +#: ../src/richtext/richtextbulletspage.cpp:202 +#: ../src/richtext/richtextbulletspage.cpp:204 +#: ../src/richtext/richtextbulletspage.cpp:225 +#: ../src/richtext/richtextbulletspage.cpp:227 +msgid "The bullet character." +msgstr "Le caractère de tiret." + +#: ../src/richtext/richtextsymboldlg.cpp:442 +#: ../src/richtext/richtextsymboldlg.cpp:444 +msgid "The character code." +msgstr "Le code caractère." + +#: ../src/common/fontmap.cpp:201 +#, c-format +msgid "" +"The charset '%s' is unknown. You may select\n" +"another charset to replace it with or choose\n" +"[Cancel] if it cannot be replaced" +msgstr "" +"Jeu de caractères « %s » inconnu. Sélectionner un autre en remplacement\n" +"ou [Annuler] s'il ne peut pas être remplacé" + +#: ../src/msw/ole/dataobj.cpp:161 +#, c-format +msgid "The clipboard format '%d' doesn't exist." +msgstr "Format « %d » de presse-papiers inexistant." + +#: ../src/richtext/richtextstylepage.cpp:127 +#: ../src/richtext/richtextstylepage.cpp:129 +msgid "The default style for the next paragraph." +msgstr "Le style par défaut pour le paragraphe suivant." + +#: ../src/generic/dirdlgg.cpp:229 +#, c-format +msgid "" +"The directory '%s' does not exist\n" +"Create it now?" +msgstr "" +"Répertoire « %s » inexistant\n" +"Le créer maintenant ?" + +#: ../src/common/docview.cpp:1980 +#, c-format +msgid "" +"The file '%s' couldn't be opened.\n" +"It has been removed from the most recently used files list." +msgstr "" +"Le fichier « %s » n'a pas pu être ouvert et a été retiré\n" +"de la liste des fichiers récemment utilisés." + +#: ../src/common/docview.cpp:1990 +#, c-format +msgid "" +"The file '%s' doesn't exist and couldn't be opened.\n" +"It has been removed from the most recently used files list." +msgstr "" +"Le fichier « %s » n'existe pas et n'a pas pu être ouvert.\n" +"Il a été retiré de la liste des fichiers récemment utilisés." + +#: ../src/richtext/richtextliststylepage.cpp:397 +#: ../src/richtext/richtextliststylepage.cpp:399 +#: ../src/richtext/richtextindentspage.cpp:224 +#: ../src/richtext/richtextindentspage.cpp:226 +msgid "The first line indent." +msgstr "Indentation de la première ligne" + +#: ../src/generic/fontdlgg.cpp:321 +#: ../src/generic/fontdlgg.cpp:323 +msgid "The font colour." +msgstr "Couleur de police." + +#: ../src/generic/fontdlgg.cpp:282 +#: ../src/generic/fontdlgg.cpp:284 +msgid "The font family." +msgstr "Famille de police." + +#: ../src/richtext/richtextsymboldlg.cpp:404 +#: ../src/richtext/richtextsymboldlg.cpp:406 +msgid "The font from which to take the symbol." +msgstr "La police de laquelle prendre le symbole." + +#: ../src/generic/fontdlgg.cpp:334 +#: ../src/generic/fontdlgg.cpp:336 +#: ../src/generic/fontdlgg.cpp:341 +#: ../src/generic/fontdlgg.cpp:343 +msgid "The font point size." +msgstr "Taille du point de la police." + +#: ../src/mac/carbon/fontdlg.cpp:466 +#: ../src/mac/carbon/fontdlg.cpp:468 +msgid "The font size in points." +msgstr "Taille de la police en points." + +#: ../src/generic/fontdlgg.cpp:293 +#: ../src/generic/fontdlgg.cpp:295 +msgid "The font style." +msgstr "Style de police." + +#: ../src/generic/fontdlgg.cpp:304 +#: ../src/generic/fontdlgg.cpp:306 +msgid "The font weight." +msgstr "Largeur de police." + +#: ../src/richtext/richtextliststylepage.cpp:386 +#: ../src/richtext/richtextliststylepage.cpp:388 +#: ../src/richtext/richtextindentspage.cpp:212 +#: ../src/richtext/richtextindentspage.cpp:214 +msgid "The left indent." +msgstr "L'indentintion de gauche." + +#: ../src/richtext/richtextliststylepage.cpp:464 +#: ../src/richtext/richtextliststylepage.cpp:466 +#: ../src/richtext/richtextindentspage.cpp:319 +#: ../src/richtext/richtextindentspage.cpp:321 +msgid "The line spacing." +msgstr "'espacemetn interligne." + +#: ../src/richtext/richtextbulletspage.cpp:266 +#: ../src/richtext/richtextbulletspage.cpp:268 +msgid "The list item number." +msgstr "Le numéro de l'élément de la liste." + +#: ../src/richtext/richtextindentspage.cpp:257 +#: ../src/richtext/richtextindentspage.cpp:259 +#, fuzzy +msgid "The outline level." +msgstr "Aperçu des styles." + +#: ../src/common/filename.cpp:1254 +#, c-format +msgid "The path '%s' contains too many \"..\"!" +msgstr "Le chemin « %s » contient trop de « .. »." + +#: ../src/common/log.cpp:307 +#, c-format +msgid "The previous message repeated once." +msgid_plural "The previous message repeated %lu times." +msgstr[0] "Le message précédent a été répété une fois." +msgstr[1] "Le message précédent a été répété %lu fois." + +#: ../src/richtext/richtextsymboldlg.cpp:461 +#: ../src/richtext/richtextsymboldlg.cpp:463 +msgid "The range to show." +msgstr "L'intervalle à afficher." + +#: ../src/generic/dbgrptg.cpp:318 +msgid "" +"The report contains the files listed below. If any of these files contain private information,\n" +"please uncheck them and they will be removed from the report.\n" +msgstr "" +"Le rapport contient les fichiers listés ci-dessous. Si l'un de ces\n" +"fichiers contient des informations sensibles, le décocher pour le\n" +"retirer de ce rapport.\n" + +#: ../src/common/cmdline.cpp:903 +#, c-format +msgid "The required parameter '%s' was not specified." +msgstr "Paramètre nécessaire « %s » non fourni." + +#: ../src/richtext/richtextliststylepage.cpp:408 +#: ../src/richtext/richtextliststylepage.cpp:410 +#: ../src/richtext/richtextindentspage.cpp:236 +#: ../src/richtext/richtextindentspage.cpp:238 +msgid "The right indent." +msgstr "L'indentation à droite." + +#: ../src/richtext/richtextliststylepage.cpp:448 +#: ../src/richtext/richtextliststylepage.cpp:450 +#: ../src/richtext/richtextindentspage.cpp:304 +msgid "The spacing after the paragraph." +msgstr "L'espacement après le paragraphe." + +#: ../src/richtext/richtextliststylepage.cpp:437 +#: ../src/richtext/richtextliststylepage.cpp:439 +#: ../src/richtext/richtextindentspage.cpp:291 +#: ../src/richtext/richtextindentspage.cpp:293 +msgid "The spacing before the paragraph." +msgstr "L'espacement avant le paragraphe." + +#: ../src/richtext/richtextstylepage.cpp:107 +#: ../src/richtext/richtextstylepage.cpp:109 +msgid "The style name." +msgstr "Le nom du Style." + +#: ../src/richtext/richtextstylepage.cpp:117 +#: ../src/richtext/richtextstylepage.cpp:119 +msgid "The style on which this style is based." +msgstr "Le style sur lequel ce style est basé." + +#: ../src/richtext/richtextstyledlg.cpp:206 +#: ../src/richtext/richtextstyledlg.cpp:208 +msgid "The style preview." +msgstr "Aperçu des styles." + +#: ../src/richtext/richtexttabspage.cpp:117 +#: ../src/richtext/richtexttabspage.cpp:119 +msgid "The tab position." +msgstr "La position du taquet de tabulation." + +#: ../src/richtext/richtexttabspage.cpp:123 +msgid "The tab positions." +msgstr "La position des taquets de tabulation." + +#: ../src/common/textcmn.cpp:254 +#: ../src/richtext/richtextctrl.cpp:1904 +msgid "The text couldn't be saved." +msgstr "Le texte n'a pas pu être enregistré." + +#: ../src/common/cmdline.cpp:881 +#, c-format +msgid "The value for the option '%s' must be specified." +msgstr "La valeur de l'option « %s » doit être précisée." + +#: ../src/msw/dialup.cpp:456 +#, c-format +msgid "The version of remote access service (RAS) installed on this machine is tooold, please upgrade (the following required function is missing: %s)." +msgstr "La version du service d'accès distant (RAS) installée sur cette machine est trop ancienne. Veuillez la mettre à niveau (la fonction suivante manque : %s)." + +#: ../src/richtext/richtextprint.cpp:575 +#: ../src/html/htmprint.cpp:610 +msgid "There was a problem during page setup: you may need to set a default printer." +msgstr "Un problème est apparu lors de la mise en page : la configuration d'une imprimante par défaut peut être nécessaire." + +#: ../src/msw/datectrl.cpp:110 +msgid "This system doesn't support date picker control, please upgrade your version of comctl32.dll" +msgstr "Ce système ne gère pas le contrôle des ramasseurs de données, veuillez mettre à niveau votre version de comctl32.dll" + +#: ../src/msw/thread.cpp:1268 +msgid "Thread module initialization failed: can not store value in thread local storage" +msgstr "Échec de l'initialisation du module du processus : enregistrement impossible de la valeur dans le stockage local des processus" + +#: ../src/unix/threadpsx.cpp:1618 +msgid "Thread module initialization failed: failed to create thread key" +msgstr "Échec de l'initialisation du module du processus : échec de la création de la clé du processus" + +#: ../src/msw/thread.cpp:1256 +msgid "Thread module initialization failed: impossible to allocate index in thread local storage" +msgstr "Échec de l'initialisation du module du processus : impossible d'allouer un index dans le stockage local des processus" + +#: ../src/unix/threadpsx.cpp:1136 +msgid "Thread priority setting is ignored." +msgstr "La priorité donnée au processus est ignorée." + +#: ../src/msw/mdi.cpp:172 +msgid "Tile &Horizontally" +msgstr "Répartir &horizontalement" + +#: ../src/msw/mdi.cpp:173 +msgid "Tile &Vertically" +msgstr "Répartir &verticalement" + +#: ../src/common/ftp.cpp:631 +msgid "Timeout while waiting for FTP server to connect, try passive mode." +msgstr "Temps dépassé lors de la connexion du serveur FTP, essai du mode passif." + +#: ../src/os2/timer.cpp:130 +#: ../src/msw/timer.cpp:111 +msgid "Timer creation failed." +msgstr "Échec de la création d'un minuteur." + +#: ../src/generic/tipdlg.cpp:218 +msgid "Tip of the Day" +msgstr "Astuce du Jour" + +#: ../src/generic/tipdlg.cpp:153 +msgid "Tips not available, sorry!" +msgstr "Astuces non disponibles." + +#: ../src/generic/prntdlgg.cpp:242 +msgid "To:" +msgstr "À :" + +#: ../src/richtext/richtextbuffer.cpp:5608 +msgid "Too many EndStyle calls!" +msgstr "Trop d'appels à EndStyle!" + +#: ../src/common/imagpng.cpp:294 +msgid "Too many colours in PNG, the image may be slightly blurred." +msgstr "Trop de couleurs dans l'image PNG, elle peut être légèrement trouble." + +#: ../src/generic/prntdlgg.cpp:879 +msgid "Top margin (mm):" +msgstr "Marge de haut de page (mm) :" + +#: ../src/generic/aboutdlgg.cpp:80 +msgid "Translations by " +msgstr "Traductions par " + +#: ../src/generic/aboutdlgg.cpp:154 +#, fuzzy +msgid "Translators" +msgstr "Traductions par " + +#: ../src/common/fs_mem.cpp:230 +#, c-format +msgid "Trying to remove file '%s' from memory VFS, but it is not loaded!" +msgstr "Tentative de suppression du fichier « %s » de la mémoire VFS, mais il n'est pas chargé." + +#: ../src/common/sckaddr.cpp:144 +#: ../src/common/sckaddr.cpp:247 +msgid "Trying to solve a NULL hostname: giving up" +msgstr "Tentative de résoudre le nom d'hôte NULL : abandon" + +#: ../src/common/fmapbase.cpp:114 +msgid "Turkish (ISO-8859-9)" +msgstr "Turc (ISO-8859-9)" + +#: ../src/generic/filedlgg.cpp:508 +msgid "Type" +msgstr "Type" + +#: ../src/richtext/richtextfontpage.cpp:138 +#: ../src/richtext/richtextfontpage.cpp:140 +msgid "Type a font name." +msgstr "Taper le nom d'une police de caractères." + +#: ../src/richtext/richtextfontpage.cpp:156 +#: ../src/richtext/richtextfontpage.cpp:158 +msgid "Type a size in points." +msgstr "Entrez une taille en points." + +#: ../src/common/xtixml.cpp:348 +#: ../src/common/xtixml.cpp:495 +#: ../src/common/xtistrm.cpp:277 +msgid "Type must have enum - long conversion" +msgstr "Le type doit être énumérable - conversion longue" + +#: ../src/common/menucmn.cpp:76 +msgid "UP" +msgstr "HAUT" + +#: ../src/common/paper.cpp:135 +msgid "US Std Fanfold, 14 7/8 x 11 in" +msgstr "Standard US en accordéon (14,875 x 11 pouces)" + +#: ../src/common/fmapbase.cpp:151 +msgid "US-ASCII" +msgstr "US-ASCII" + +#: ../src/common/strconv.cpp:2771 +#: ../src/common/strconv.cpp:2775 +msgid "Unable to create TextEncodingConverter" +msgstr "Impossible de créer TextEncodingConverter" + +#: ../src/html/htmlwin.cpp:534 +#, c-format +msgid "Unable to open requested HTML document: %s" +msgstr "Impossible d'ouvrir le document HTML demandé : %s" + +#: ../src/unix/sound.cpp:369 +msgid "Unable to play sound asynchronously." +msgstr "Impossible de jouer les sons de manière non synchrone" + +#: ../src/common/stockitem.cpp:155 +msgid "Undelete" +msgstr "Rétablir" + +#: ../src/richtext/richtextfontpage.cpp:272 +#: ../src/richtext/richtextfontpage.cpp:356 +#: ../src/richtext/richtextfontpage.cpp:603 +#: ../src/mac/carbon/fontdlg.cpp:493 +msgid "Underlined" +msgstr "Souligné" + +#: ../src/common/stockitem.cpp:210 +msgid "Undo last action" +msgstr "Annuler la dernière action" + +#: ../src/common/cmdline.cpp:691 +#, c-format +msgid "Unexpected characters following option '%s'." +msgstr "Caractères non attendus suivant l'option « %s »." + +#: ../contrib/src/deprecated/resource.cpp:1848 +#: ../contrib/src/deprecated/resource.cpp:1862 +#: ../contrib/src/deprecated/resource.cpp:1879 +#: ../contrib/src/deprecated/resource.cpp:1893 +#: ../contrib/src/deprecated/resource.cpp:1978 +#: ../contrib/src/deprecated/resource.cpp:1992 +#: ../contrib/src/deprecated/resource.cpp:2008 +#: ../contrib/src/deprecated/resource.cpp:2022 +#: ../contrib/src/deprecated/resource.cpp:3080 +#: ../contrib/src/deprecated/resource.cpp:3094 +#: ../contrib/src/deprecated/resource.cpp:3111 +#: ../contrib/src/deprecated/resource.cpp:3125 +msgid "Unexpected end of file while parsing resource." +msgstr "Fin de fichier inattendue lors de l'analyse des ressources." + +#: ../src/common/cmdline.cpp:844 +#, c-format +msgid "Unexpected parameter '%s'" +msgstr "Paramètre « %s » inattendu" + +#: ../src/richtext/richtextsymboldlg.cpp:458 +msgid "Unicode" +msgstr "Unicode" + +#: ../src/common/fmapbase.cpp:140 +#: ../src/common/fmapbase.cpp:146 +msgid "Unicode 16 bit (UTF-16)" +msgstr "Unicode 16 bit (UTF-16)" + +#: ../src/common/fmapbase.cpp:145 +msgid "Unicode 16 bit Big Endian (UTF-16BE)" +msgstr "Unicode 16 bit gros-boutiste (UTF-16BE)" + +#: ../src/common/fmapbase.cpp:141 +msgid "Unicode 16 bit Little Endian (UTF-16LE)" +msgstr "Unicode 16 bit petit-boutiste (UTF-16LE)" + +#: ../src/common/fmapbase.cpp:142 +#: ../src/common/fmapbase.cpp:148 +msgid "Unicode 32 bit (UTF-32)" +msgstr "Unicode 32 bit (UTF-32)" + +#: ../src/common/fmapbase.cpp:147 +msgid "Unicode 32 bit Big Endian (UTF-32BE)" +msgstr "Unicode 32 bit gros-boutiste (UTF-32BE)" + +#: ../src/common/fmapbase.cpp:143 +msgid "Unicode 32 bit Little Endian (UTF-32LE)" +msgstr "Unicode 32 bit petit-boutiste (UTF-8)" + +#: ../src/common/fmapbase.cpp:137 +msgid "Unicode 7 bit (UTF-7)" +msgstr "Unicode 7 bit (UTF-7)" + +#: ../src/common/fmapbase.cpp:138 +msgid "Unicode 8 bit (UTF-8)" +msgstr "Unicode 8 bit (UTF-8)" + +#: ../src/generic/progdlgg.cpp:607 +msgid "Unknown" +msgstr "Inconnu" + +#: ../src/msw/dde.cpp:1088 +#, c-format +msgid "Unknown DDE error %08x" +msgstr "Erreur DDE inconnue : %08x" + +#: ../src/common/xtistrm.cpp:366 +msgid "Unknown Object passed to GetObjectClassInfo" +msgstr "Objet inconnu indiqué à GetObjectClassInfo" + +#: ../src/unix/dlunix.cpp:339 +msgid "Unknown dynamic library error" +msgstr "Erreur de bibliothèque dynamique inconnue" + +#: ../src/common/fmapbase.cpp:675 +#, c-format +msgid "Unknown encoding (%d)" +msgstr "Codage inconnu (%d)" + +#: ../src/common/cmdline.cpp:598 +#, c-format +msgid "Unknown long option '%s'" +msgstr "Option longue « %s » inconnue" + +#: ../src/common/cmdline.cpp:608 +#: ../src/common/cmdline.cpp:630 +#, c-format +msgid "Unknown option '%s'" +msgstr "Option « %s » inconnue" + +#: ../src/xrc/xmlres.cpp:865 +msgid "Unknown style flag " +msgstr "Indicateur de style inconnu" + +#: ../src/common/xtixml.cpp:321 +#, c-format +msgid "Unkown Property %s" +msgstr "Option « %s » inconnue" + +#: ../src/common/mimecmn.cpp:214 +#, c-format +msgid "Unmatched '{' in an entry for mime type %s." +msgstr "Symbole « { » non assorti dans une entrée pour le type mime %s." + +#: ../src/common/cmdproc.cpp:257 +#: ../src/common/cmdproc.cpp:283 +#: ../src/common/cmdproc.cpp:303 +msgid "Unnamed command" +msgstr "Commande sans nom" + +#: ../contrib/src/deprecated/resource.cpp:2377 +#, c-format +msgid "Unrecognized style %s while parsing resource." +msgstr "Style %s non reconnu pendant l'analyse des ressources." + +#: ../src/msw/clipbrd.cpp:267 +#: ../src/msw/clipbrd.cpp:439 +#: ../src/mac/classic/clipbrd.cpp:66 +msgid "Unsupported clipboard format." +msgstr "Format de presse-papiers non géré." + +#: ../src/common/appcmn.cpp:273 +#, c-format +msgid "Unsupported theme '%s'." +msgstr "Thème « %s » non géré." + +#: ../src/generic/fdrepdlg.cpp:151 +msgid "Up" +msgstr "Haut" + +#: ../src/richtext/richtextliststylepage.cpp:485 +#: ../src/richtext/richtextbulletspage.cpp:283 +msgid "Upper case letters" +msgstr "Lettres majuscules" + +#: ../src/richtext/richtextliststylepage.cpp:487 +#: ../src/richtext/richtextbulletspage.cpp:285 +msgid "Upper case roman numerals" +msgstr "Chiffres romains majuscules" + +#: ../src/common/cmdline.cpp:975 +#, c-format +msgid "Usage: %s" +msgstr "Utilisation : %s" + +#: ../src/richtext/richtextliststylepage.cpp:357 +#: ../src/richtext/richtextliststylepage.cpp:359 +#: ../src/richtext/richtextindentspage.cpp:179 +#: ../src/richtext/richtextindentspage.cpp:181 +msgid "Use the current alignment setting." +msgstr "Utiliser les réglages courants d'alignement." + +#: ../src/common/valtext.cpp:177 +msgid "Validation conflict" +msgstr "Conflit de validation" + +#: ../src/mac/carbon/aboutdlg.cpp:73 +#, fuzzy, c-format +msgid "Version %s" +msgstr "Version " + +#: ../contrib/src/mmedia/vidbase.cpp:62 +msgid "Video Output" +msgstr "Sortie vidéo" + +#: ../src/generic/filedlgg.cpp:1063 +msgid "View files as a detailed view" +msgstr "Voir les fichiers - vue détaillée" + +#: ../src/generic/filedlgg.cpp:1056 +msgid "View files as a list view" +msgstr "Voir les fichiers - liste" + +#: ../src/common/docview.cpp:1790 +msgid "Views" +msgstr "Vues" + +#: ../src/common/menucmn.cpp:126 +msgid "WINDOWS_LEFT" +msgstr "WINDOWS_GAUCHE" + +#: ../src/common/menucmn.cpp:128 +msgid "WINDOWS_MENU" +msgstr "WINDOWS_MENU" + +#: ../src/common/menucmn.cpp:127 +msgid "WINDOWS_RIGHT" +msgstr "WINDOWS_DROITE" + +#: ../src/unix/baseunix.cpp:78 +msgid "Waiting for subprocess termination failed" +msgstr "Échec de l'attente de fin du sous-processus" + +#: ../src/common/docview.cpp:459 +#: ../src/html/htmprint.cpp:380 +msgid "Warning" +msgstr "Avertissement" + +#: ../src/common/log.cpp:472 +msgid "Warning: " +msgstr "Avertissement :" + +#: ../src/html/htmlpars.cpp:385 +msgid "Warning: attempt to remove HTML tag handler from empty stack." +msgstr "Avertissement : tentative de suppression d'un gestionnaire d'étiquette HTML d'une pile vide." + +#: ../src/common/fmapbase.cpp:106 +msgid "Western European (ISO-8859-1)" +msgstr "Europe de l'Ouest (ISO-8859-1)" + +#: ../src/common/fmapbase.cpp:120 +msgid "Western European with Euro (ISO-8859-15)" +msgstr "Europe de l'Ouest avec l'Euro (ISO-8859-15)" + +#: ../src/generic/fontdlgg.cpp:353 +#: ../src/generic/fontdlgg.cpp:355 +msgid "Whether the font is underlined." +msgstr "Si la police est soulignée." + +#: ../src/generic/fdrepdlg.cpp:143 +msgid "Whole word" +msgstr "Mot complet" + +#: ../src/html/helpwnd.cpp:533 +msgid "Whole words only" +msgstr "Mots complets seulement" + +#: ../src/univ/themes/win32.cpp:1058 +msgid "Win32 theme" +msgstr "Thème Win32" + +#: ../src/msw/utils.cpp:1080 +msgid "Win32s on Windows 3.1" +msgstr "Win32s sur Windows 3.1" + +#: ../src/msw/utils.cpp:1129 +#, c-format +msgid "Windows 2000 (build %lu" +msgstr "Windows 2000 (construction %lu" + +#: ../src/msw/utils.cpp:1094 +msgid "Windows 95" +msgstr "Windows 95" + +#: ../src/msw/utils.cpp:1090 +msgid "Windows 95 OSR2" +msgstr "Windows 95 OSR2" + +#: ../src/msw/utils.cpp:1105 +msgid "Windows 98" +msgstr "Windows 98" + +#: ../src/msw/utils.cpp:1101 +msgid "Windows 98 SE" +msgstr "Windows 98 SE" + +#: ../src/msw/utils.cpp:1112 +#, c-format +msgid "Windows 9x (%d.%d)" +msgstr "Windows 9x (%d.%d)" + +#: ../src/common/fmapbase.cpp:134 +msgid "Windows Arabic (CP 1256)" +msgstr "Arabe limité à Windows (CP 1256)" + +#: ../src/common/fmapbase.cpp:135 +msgid "Windows Baltic (CP 1257)" +msgstr "Balte limité à Windows (CP 1257)" + +#: ../src/msw/utils.cpp:1074 +#, c-format +msgid "Windows CE (%d.%d)" +msgstr "Windows CE (%d.%d)" + +#: ../src/common/fmapbase.cpp:128 +msgid "Windows Central European (CP 1250)" +msgstr "Européen central limité à Windows (CP 1255)" + +#: ../src/common/fmapbase.cpp:125 +msgid "Windows Chinese Simplified (CP 936)" +msgstr "Chinois simplifié limité à Windows (CP 936)" + +#: ../src/common/fmapbase.cpp:127 +msgid "Windows Chinese Traditional (CP 950)" +msgstr "Chinois traditionnel limité à Windows (CP 950)" + +#: ../src/common/fmapbase.cpp:129 +msgid "Windows Cyrillic (CP 1251)" +msgstr "Cyrillique limité à Windows (CP 1251)" + +#: ../src/common/fmapbase.cpp:131 +msgid "Windows Greek (CP 1253)" +msgstr "Grec limité à Windows (CP 1253)" + +#: ../src/common/fmapbase.cpp:133 +msgid "Windows Hebrew (CP 1255)" +msgstr "Hébreu limité à Windows (CP 1255)" + +#: ../src/common/fmapbase.cpp:124 +msgid "Windows Japanese (CP 932)" +msgstr "Japonais limité à Windows (CP 932)" + +#: ../src/common/fmapbase.cpp:126 +msgid "Windows Korean (CP 949)" +msgstr "Coréen limité à Windows (CP 949)" + +#: ../src/msw/utils.cpp:1109 +msgid "Windows ME" +msgstr "Windows ME" + +#: ../src/msw/utils.cpp:1144 +#, c-format +msgid "Windows NT %lu.%lu (build %lu" +msgstr "Windows NT %lu.%lu (construction %lu" + +#: ../src/msw/utils.cpp:1137 +#, c-format +msgid "Windows Server 2003 (build %lu" +msgstr "Windows Server 2003 (construction %lu" + +#: ../src/common/fmapbase.cpp:123 +msgid "Windows Thai (CP 874)" +msgstr "Windows Thai (CP 874)" + +#: ../src/common/fmapbase.cpp:132 +msgid "Windows Turkish (CP 1254)" +msgstr "Turc limité à Windows (CP 1254)" + +#: ../src/common/fmapbase.cpp:130 +msgid "Windows Western European (CP 1252)" +msgstr "Européen occidental limité à Windows (CP 1252 )" + +#: ../src/msw/utils.cpp:1133 +#, c-format +msgid "Windows XP (build %lu" +msgstr "Windows XP (construction %lu" + +#: ../src/common/fmapbase.cpp:136 +msgid "Windows/DOS OEM (CP 437)" +msgstr "Windows/DOS OEM (CP 437)" + +#: ../src/common/ffile.cpp:158 +#, c-format +msgid "Write error on file '%s'" +msgstr "Erreur d'écriture dans le fichier « %s »" + +#: ../src/xml/xml.cpp:713 +#, c-format +msgid "XML parsing error: '%s' at line %d" +msgstr "Erreur d'analyse XML : « %s » à la ligne %d" + +#: ../src/common/xpmdecod.cpp:794 +msgid "XPM: Malformed pixel data!" +msgstr "XPM : données de pixel malformées." + +#: ../src/common/xpmdecod.cpp:709 +#, c-format +msgid "XPM: incorrect colour description in line %d" +msgstr "XPM : définition de couleur incorrecte à la ligne %d" + +#: ../src/common/xpmdecod.cpp:682 +msgid "XPM: incorrect header format!" +msgstr "XPM: format de l'entête incorrecte!" + +#: ../src/common/xpmdecod.cpp:720 +#: ../src/common/xpmdecod.cpp:729 +#, c-format +msgid "XPM: malformed colour definition '%s' at line %d!" +msgstr "XPM : définition de couleur « %s » malformée à la ligne %d!" + +#: ../src/common/xpmdecod.cpp:781 +#, c-format +msgid "XPM: truncated image data at line %d!" +msgstr "XPM: les données de l'image sont tronquées à la ligne %d!" + +#: ../src/xrc/xmlres.cpp:606 +#, c-format +msgid "XRC resource '%s' (class '%s') not found!" +msgstr "Ressource XRC « %s » (classe « %s ») introuvable." + +#: ../src/xrc/xmlres.cpp:1152 +#: ../src/xrc/xmlres.cpp:1164 +#, c-format +msgid "XRC resource: Cannot create animation from '%s'." +msgstr "Ressource XRC : impossible de créer une animation de « %s »." + +#: ../src/xrc/xmlres.cpp:1120 +#: ../src/xrc/xmlres.cpp:1132 +#, c-format +msgid "XRC resource: Cannot create bitmap from '%s'." +msgstr "Ressource XRC : impossible de créer une image bitmap à partir de « %s »." + +#: ../src/xrc/xmlres.cpp:1078 +#, c-format +msgid "XRC resource: Incorrect colour specification '%s' for property '%s'." +msgstr "Ressource XRC : spécification de couleur « %s » non valable pour la propriété « %s »." + +#: ../src/motif/msgdlg.cpp:203 +#: ../src/mac/classic/msgdlg.cpp:60 +#: ../src/mac/classic/msgdlg.cpp:142 +#: ../src/mac/carbon/msgdlg.cpp:66 +#: ../src/mac/carbon/msgdlg.cpp:121 +msgid "Yes" +msgstr "Oui" + +#: ../src/mac/carbon/overlay.cpp:150 +msgid "You cannot Clear an overlay that is not inited" +msgstr "Vous ne pouvez pas effectuer un Clear sur une zone de recouvrement avant qu'elle ne soit initialisée." + +#: ../src/dfb/overlay.cpp:55 +#: ../src/mac/carbon/overlay.cpp:110 +msgid "You cannot Init an overlay twice" +msgstr "Vous ne pouvez pas initialiser deux fois un overlay" + +#: ../src/generic/dirdlgg.cpp:314 +msgid "You cannot add a new directory to this section." +msgstr "Vous ne pouvez pas ajouter de nouveau répertoire à cette section." + +#: ../src/common/stockitem.cpp:162 +msgid "Zoom &In" +msgstr "Zoom &avant" + +#: ../src/common/stockitem.cpp:163 +msgid "Zoom &Out" +msgstr "Zoom a&rrière" + +#: ../src/common/stockitem.cpp:161 +msgid "Zoom to &Fit" +msgstr "Zoom a&justé" + +#: ../src/common/docview.cpp:2164 +msgid "[EMPTY]" +msgstr "[VIDE]" + +#: ../src/msw/dde.cpp:1055 +msgid "a DDEML application has created a prolonged race condition." +msgstr "une application DDEML a créé une situation de concurrence prolongée." + +#: ../src/msw/dde.cpp:1043 +msgid "" +"a DDEML function was called without first calling the DdeInitialize function,\n" +"or an invalid instance identifier\n" +"was passed to a DDEML function." +msgstr "" +"une fonction DDEML a été appelée sans appel préalable à la fonction\n" +"DdeInitialize, ou un identifiant non valable a été fourni à la fonction\n" +"DDEML." + +#: ../src/msw/dde.cpp:1061 +msgid "a client's attempt to establish a conversation has failed." +msgstr "une tentative d'un client pour établir une conversation a échoué." + +#: ../src/msw/dde.cpp:1058 +msgid "a memory allocation failed." +msgstr "une allocation de mémoire a échoué." + +#: ../src/msw/dde.cpp:1052 +msgid "a parameter failed to be validated by the DDEML." +msgstr "un paramètre n'a pas pu être validé par la DDEML." + +#: ../src/msw/dde.cpp:1034 +msgid "a request for a synchronous advise transaction has timed out." +msgstr "une demande de transaction synchrone d'instructions a expiré." + +#: ../src/msw/dde.cpp:1040 +msgid "a request for a synchronous data transaction has timed out." +msgstr "une demande de transaction synchrone de données a expiré." + +#: ../src/msw/dde.cpp:1049 +msgid "a request for a synchronous execute transaction has timed out." +msgstr "une demande de transaction synchrone d'exécutions a expiré." + +#: ../src/msw/dde.cpp:1067 +msgid "a request for a synchronous poke transaction has timed out." +msgstr "une demande de transaction synchrone de stockage a expiré." + +#: ../src/msw/dde.cpp:1082 +msgid "a request to end an advise transaction has timed out." +msgstr "une demande pour terminer une transaction d'instructions a expiré." + +#: ../src/msw/dde.cpp:1076 +msgid "" +"a server-side transaction was attempted on a conversation\n" +"that was terminated by the client, or the server\n" +"terminated before completing a transaction." +msgstr "" +"une transaction a été tentée du côté serveur lors d'une conversation déjà\n" +"terminée par le client, ou le serveur a achevé la transaction avant la fin." + +#: ../src/msw/dde.cpp:1064 +msgid "a transaction failed." +msgstr "une transaction a échoué." + +#: ../src/common/menucmn.cpp:199 +msgid "alt" +msgstr "alt" + +#: ../src/msw/dde.cpp:1046 +msgid "" +"an application initialized as APPCLASS_MONITOR has\n" +"attempted to perform a DDE transaction,\n" +"or an application initialized as APPCMD_CLIENTONLY has \n" +"attempted to perform server transactions." +msgstr "" +"une application initialisée en tant que APPCLASS_MONITOR a tenté\n" +"d'effectuer une transaction DDE, ou une application initialisée en tant\n" +"que APPCMD_CLIENTONLY a tenté d'effectuer des transactions serveur." + +#: ../src/msw/dde.cpp:1070 +msgid "an internal call to the PostMessage function has failed. " +msgstr "un appel interne à la fonction PostMessage a échoué." + +#: ../src/msw/dde.cpp:1079 +msgid "an internal error has occurred in the DDEML." +msgstr "une erreur interne s'est produite dans le DDEML." + +#: ../src/msw/dde.cpp:1085 +msgid "" +"an invalid transaction identifier was passed to a DDEML function.\n" +"Once the application has returned from an XTYP_XACT_COMPLETE callback,\n" +"the transaction identifier for that callback is no longer valid." +msgstr "" +"un identifiant de transaction non valable a été fourni à la fonction DDEML.\n" +"Quand l'application sort d'un rappel XTYP_XACT_COMPLETE, l'identifiant de\n" +"transaction pour ce rappel n'est plus valable." + +#: ../src/common/zipstrm.cpp:1272 +msgid "assuming this is a multi-part zip concatenated" +msgstr "suppose qu'il s'agit d'un zip recombiné" + +#: ../src/common/fileconf.cpp:1893 +#, c-format +msgid "attempt to change immutable key '%s' ignored." +msgstr "tentative de modifier la touche non configurable « %s » ignorée." + +#: ../src/html/chm.cpp:330 +msgid "bad arguments to library function" +msgstr "mauvais paramètres à la fonction de bibliothèque" + +#: ../src/html/chm.cpp:342 +msgid "bad signature" +msgstr "mauvaise signature" + +#: ../src/common/zipstrm.cpp:1712 +msgid "bad zipfile offset to entry" +msgstr "Mauvais décalage de fichier zip dans l'entrée" + +#: ../src/common/ftp.cpp:381 +msgid "binary" +msgstr "binaire" + +#: ../src/common/fontcmn.cpp:696 +msgid "bold" +msgstr "gras" + +#: ../src/os2/iniconf.cpp:458 +msgid "buffer is too small for Windows directory." +msgstr "Le tampon est trop petit pour le dossier Windows." + +#: ../src/common/ffile.cpp:91 +#, c-format +msgid "can't close file '%s'" +msgstr "impossible de fermer le fichier « %s »" + +#: ../src/common/file.cpp:278 +#, c-format +msgid "can't close file descriptor %d" +msgstr "impossible de fermer le descripteur de fichier %d" + +#: ../src/common/file.cpp:544 +#, c-format +msgid "can't commit changes to file '%s'" +msgstr "impossible d'appliquer les changements au fichier « %s »" + +#: ../src/common/file.cpp:212 +#, c-format +msgid "can't create file '%s'" +msgstr "impossible de créer le fichier « %s »" + +#: ../src/common/fileconf.cpp:1204 +#, c-format +msgid "can't delete user configuration file '%s'" +msgstr "impossible d'effacer le fichier de configuration utilisateur « %s »" + +#: ../src/common/file.cpp:450 +#, c-format +msgid "can't determine if the end of file is reached on descriptor %d" +msgstr "impossible de déterminer si la fin du fichier est atteinte dans le descripteur %d" + +#: ../src/msdos/utilsdos.cpp:299 +#: ../src/msdos/utilsdos.cpp:458 +#, c-format +msgid "can't execute '%s'" +msgstr "Échec de l'exécution de « %s »" + +#: ../src/common/zipstrm.cpp:1487 +msgid "can't find central directory in zip" +msgstr "impossible de trouver le répertoire principale dans le zip" + +#: ../src/common/file.cpp:420 +#, c-format +msgid "can't find length of file on file descriptor %d" +msgstr "impossible de trouver la taille du fichier dans le descripteur de fichier %d" + +#: ../src/msw/utils.cpp:394 +msgid "can't find user's HOME, using current directory." +msgstr "impossible de trouver le répertoire HOME de l'utilisateur - utilisation du répertoire courant." + +#: ../src/common/file.cpp:336 +#, c-format +msgid "can't flush file descriptor %d" +msgstr "impossible de forcer l'écriture sur disque du descripteur de fichier %d" + +#: ../src/common/file.cpp:392 +#: ../src/msw/wince/filefnwce.cpp:199 +#, c-format +msgid "can't get seek position on file descriptor %d" +msgstr "impossible de trouver la position de recherche sur le descripteur de fichier %d" + +#: ../src/common/fontmap.cpp:323 +msgid "can't load any font, aborting" +msgstr "impossible de charger une police de caractères - abandon" + +#: ../src/common/file.cpp:264 +#: ../src/common/ffile.cpp:75 +#, c-format +msgid "can't open file '%s'" +msgstr "impossible d'ouvrir le fichier « %s »" + +#: ../src/common/fileconf.cpp:404 +#, c-format +msgid "can't open global configuration file '%s'." +msgstr "impossible d'ouvrir le fichier de configuration global « %s »." + +#: ../src/common/fileconf.cpp:419 +#, c-format +msgid "can't open user configuration file '%s'." +msgstr "impossible d'ouvrir le fichier de configuration utilisateur « %s »." + +#: ../src/common/fileconf.cpp:1046 +msgid "can't open user configuration file." +msgstr "impossible d'ouvrir le fichier de configuration utilisateur." + +#: ../src/common/zipstrm.cpp:528 +msgid "can't re-initialize zlib deflate stream" +msgstr "impossible de réinitialiser le flux de déchargement de zlib" + +#: ../src/common/zipstrm.cpp:553 +msgid "can't re-initialize zlib inflate stream" +msgstr "impossible de réinitialiser le flux de chargement de zlib" + +#: ../src/common/file.cpp:302 +#, c-format +msgid "can't read from file descriptor %d" +msgstr "impossible de lire le descripteur de fichier %d" + +#: ../src/common/file.cpp:539 +#, c-format +msgid "can't remove file '%s'" +msgstr "impossible de supprimer le fichier « %s »" + +#: ../src/common/file.cpp:555 +#, c-format +msgid "can't remove temporary file '%s'" +msgstr "impossible de supprimer le fichier temporaire « %s »" + +#: ../src/common/file.cpp:378 +#: ../src/msw/wince/filefnwce.cpp:185 +#, c-format +msgid "can't seek on file descriptor %d" +msgstr "recherche impossible sur le descripteur de fichier %d" + +#: ../src/common/textfile.cpp:279 +#, c-format +msgid "can't write buffer '%s' to disk." +msgstr "impossible d'écrire le tampon « %s » sur le disque." + +#: ../src/common/file.cpp:318 +#, c-format +msgid "can't write to file descriptor %d" +msgstr "impossible d'écrire dans le descripteur de fichier %d" + +#: ../src/common/fileconf.cpp:1060 +msgid "can't write user configuration file." +msgstr "impossible d'écrire le fichier de configuration utilisateur." + +#: ../src/common/intl.cpp:1160 +#, c-format +msgid "catalog file for domain '%s' not found." +msgstr "fichier catalogue introuvable pour le domaine « %s »." + +#: ../src/html/chm.cpp:346 +msgid "checksum error" +msgstr "erreur de la somme de contrôle" + +#: ../src/common/tarstrm.cpp:816 +msgid "checksum failure reading tar header block" +msgstr "Erreur de la somme de contrôle lors de la lecture du bloc d'entête de tar" + +#: ../src/html/chm.cpp:348 +msgid "compression error" +msgstr "erreur de compression" + +#: ../src/common/regex.cpp:235 +msgid "conversion to 8-bit encoding failed" +msgstr "échec de la conversion dans un codage 8 bits" + +#: ../src/common/menucmn.cpp:197 +msgid "ctrl" +msgstr "ctrl" + +#: ../src/common/cmdline.cpp:1115 +msgid "date" +msgstr "date" + +#: ../src/html/chm.cpp:350 +msgid "decompression error" +msgstr "erreur de décompression" + +#: ../src/common/fmapbase.cpp:685 +msgid "default" +msgstr "défaut" + +#: ../src/common/xtistrm.cpp:839 +msgid "delegate has no type info" +msgstr "Le délégué n'a pas d'information sur le type" + +#: ../src/common/debugrpt.cpp:530 +msgid "dump of the process state (binary)" +msgstr "Décharger l'état du processus (binaire)" + +#: ../src/common/datetime.cpp:4030 +msgid "eighteenth" +msgstr "dix-huitième" + +#: ../src/common/datetime.cpp:4020 +msgid "eighth" +msgstr "huitième" + +#: ../src/common/datetime.cpp:4023 +msgid "eleventh" +msgstr "onzième" + +#: ../src/common/strconv.cpp:3488 +#, c-format +msgid "encoding %i" +msgstr "codage %i" + +#: ../src/common/fileconf.cpp:1879 +#, c-format +msgid "entry '%s' appears more than once in group '%s'" +msgstr "l'entrée « %s » apparaît plus d'une fois dans le groupe « %s »" + +#: ../src/html/chm.cpp:344 +msgid "error in data format" +msgstr "erreur dans le format des données" + +#: ../src/msdos/utilsdos.cpp:399 +#, c-format +msgid "error opening '%s'" +msgstr "erreur à l'ouverture du fichier « %s »" + +#: ../src/html/chm.cpp:332 +msgid "error opening file" +msgstr "erreur à l'ouverture du fichier" + +#: ../src/common/zipstrm.cpp:1573 +msgid "error reading zip central directory" +msgstr "erreur à la lecture du répertoire principale du zip" + +#: ../src/common/zipstrm.cpp:1664 +msgid "error reading zip local header" +msgstr "erreur à la lecture de l'en-tête local du zip" + +#: ../src/common/zipstrm.cpp:2383 +#, c-format +msgid "error writing zip entry '%s': bad crc or length" +msgstr "erreur à l'écriture de l'entrée zip « %s » : mauvaise crc ou longueur" + +#: ../src/msw/dialup.cpp:888 +msgid "establish" +msgstr "établir" + +#: ../src/common/ffile.cpp:172 +#, c-format +msgid "failed to flush the file '%s'" +msgstr "échec de la mise à jour du fichier « %s »" + +#: ../src/common/datetime.cpp:4027 +msgid "fifteenth" +msgstr "quinzième" + +#: ../src/common/datetime.cpp:4017 +msgid "fifth" +msgstr "cinquième" + +#: ../src/common/fileconf.cpp:673 +#, c-format +msgid "file '%s', line %d: '%s' ignored after group header." +msgstr "fichier « %s », ligne %d : « %s » est ignoré après l'en-tête de groupe." + +#: ../src/common/fileconf.cpp:702 +#, c-format +msgid "file '%s', line %d: '=' expected." +msgstr "fichier « %s », ligne %d : symbole « = » attendu." + +#: ../src/common/fileconf.cpp:725 +#, c-format +msgid "file '%s', line %d: key '%s' was first found at line %d." +msgstr "fichier « %s », ligne %d : première occurrence de la clé %s à la ligne %d." + +#: ../src/common/fileconf.cpp:715 +#, c-format +msgid "file '%s', line %d: value for immutable key '%s' ignored." +msgstr "fichier « %s », ligne %d : valeur pour la touche non configurable « %s » ignorée." + +#: ../src/common/fileconf.cpp:637 +#, c-format +msgid "file '%s': unexpected character %c at line %d." +msgstr "fichier %s : caractère %c inattendu a la ligne %d." + +#: ../src/richtext/richtextbuffer.cpp:5995 +msgid "files" +msgstr "Fichiers" + +#: ../src/common/datetime.cpp:4013 +msgid "first" +msgstr "premier" + +#: ../src/html/helpwnd.cpp:1258 +msgid "font size" +msgstr "taille de police" + +#: ../src/common/datetime.cpp:4026 +msgid "fourteenth" +msgstr "quatorzième" + +#: ../src/common/datetime.cpp:4016 +msgid "fourth" +msgstr "quatrième" + +#: ../src/common/appbase.cpp:354 +msgid "generate verbose log messages" +msgstr "créer des messages de journalisation verbeux" + +#: ../src/richtext/richtextbuffer.cpp:8665 +#: ../src/richtext/richtextbuffer.cpp:8705 +#: ../src/richtext/richtextbuffer.cpp:8776 +msgid "image" +msgstr "image" + +#: ../src/common/tarstrm.cpp:793 +msgid "incomplete header block in tar" +msgstr "le bloc d'entête de tar est incomplet" + +#: ../src/common/xtixml.cpp:476 +msgid "incorrect event handler string, missing dot" +msgstr "chaîne de gestion des événements non valable, point manquant" + +#: ../src/common/tarstrm.cpp:1369 +msgid "incorrect size given for tar entry" +msgstr "la taille fournie pour l'entrée tar est incorrecte" + +#: ../src/msw/dialup.cpp:888 +msgid "initiate" +msgstr "initialiser" + +#: ../src/common/tarstrm.cpp:989 +msgid "invalid data in extended tar header" +msgstr "donnée invalide dans l'entête étendu de tar" + +#: ../src/common/file.cpp:452 +msgid "invalid eof() return value." +msgstr "eof() a renvoyé une valeur non valable." + +#: ../src/generic/logg.cpp:1185 +msgid "invalid message box return value" +msgstr "la boîte de message a renvoyé une valeur non valable" + +#: ../src/common/zipstrm.cpp:1444 +msgid "invalid zip file" +msgstr "fichier zip non valable" + +#: ../src/common/fontcmn.cpp:701 +msgid "italic" +msgstr "italique" + +#: ../src/common/fontcmn.cpp:691 +msgid "light" +msgstr "léger" + +#: ../src/common/intl.cpp:1580 +#, c-format +msgid "locale '%s' can not be set." +msgstr "la locale « %s » ne peut pas être spécifiée." + +#: ../src/common/intl.cpp:1151 +#, c-format +msgid "looking for catalog '%s' in path '%s'." +msgstr "recherche le catalogue « %s » dans « %s »." + +#: ../src/common/datetime.cpp:4182 +msgid "midnight" +msgstr "minuit" + +#: ../src/common/datetime.cpp:4031 +msgid "nineteenth" +msgstr "dix-neuvième" + +#: ../src/common/datetime.cpp:4021 +msgid "ninth" +msgstr "neuvième" + +#: ../src/msw/dde.cpp:1030 +msgid "no DDE error." +msgstr "erreur - pas de DDE." + +#: ../src/html/chm.cpp:328 +msgid "no error" +msgstr "aucune erreur" + +#: ../src/html/helpdata.cpp:655 +msgid "noname" +msgstr "pas de nom" + +#: ../src/common/datetime.cpp:4181 +msgid "noon" +msgstr "midi" + +#: ../src/common/cmdline.cpp:1111 +msgid "num" +msgstr "num" + +#: ../src/common/xtixml.cpp:255 +msgid "objects cannot have XML Text Nodes" +msgstr "les objets ne peuvent pas avoir de noeuds texte XML" + +#: ../src/html/chm.cpp:340 +msgid "out of memory" +msgstr "capacité mémoire dépassée" + +#: ../src/common/debugrpt.cpp:506 +msgid "process context description" +msgstr "description du contexte du processus" + +#: ../src/html/chm.cpp:334 +msgid "read error" +msgstr "erreur de lecture" + +#: ../src/common/filename.cpp:180 +msgid "reading" +msgstr "lecture" + +#: ../src/common/zipstrm.cpp:1876 +#, c-format +msgid "reading zip stream (entry %s): bad crc" +msgstr "lecture du flux zip (entrée %s) : mauvaise crc" + +#: ../src/common/zipstrm.cpp:1873 +#, c-format +msgid "reading zip stream (entry %s): bad length" +msgstr "lecture du flux zip (entrée %s) : mauvaise longueur" + +#: ../src/msw/dde.cpp:1073 +msgid "reentrancy problem." +msgstr "problème de double entrée." + +#: ../src/common/datetime.cpp:4014 +msgid "second" +msgstr "deuxième" + +#: ../src/html/chm.cpp:338 +msgid "seek error" +msgstr "erreur de recherche" + +#: ../src/common/datetime.cpp:4029 +msgid "seventeenth" +msgstr "dix-septième" + +#: ../src/common/datetime.cpp:4019 +msgid "seventh" +msgstr "septième" + +#: ../src/common/menucmn.cpp:201 +msgid "shift" +msgstr "majuscule" + +#: ../src/common/appbase.cpp:344 +msgid "show this help message" +msgstr "montrer ce message d'aide" + +#: ../src/common/datetime.cpp:4028 +msgid "sixteenth" +msgstr "seizième" + +#: ../src/common/datetime.cpp:4018 +msgid "sixth" +msgstr "sixième" + +#: ../src/common/appcmn.cpp:244 +msgid "specify display mode to use (e.g. 640x480-16)" +msgstr "spécifier le mode d'affichage à utiliser (par ex. 640x480-16)" + +#: ../src/common/appcmn.cpp:230 +msgid "specify the theme to use" +msgstr "spécifier le thème à utiliser" + +#: ../src/common/zipstrm.cpp:1779 +msgid "stored file length not in Zip header" +msgstr "longueur du fichier enregistré absente de l'en-tête du Zip" + +#: ../src/common/cmdline.cpp:1107 +msgid "str" +msgstr "str" + +#: ../src/common/tarstrm.cpp:999 +#: ../src/common/tarstrm.cpp:1021 +#: ../src/common/tarstrm.cpp:1490 +#: ../src/common/tarstrm.cpp:1512 +msgid "tar entry not open" +msgstr "l'entrée tar n'est pas ouverte" + +#: ../src/common/datetime.cpp:4022 +msgid "tenth" +msgstr "dixième" + +#: ../src/msw/dde.cpp:1037 +msgid "the response to the transaction caused the DDE_FBUSY bit to be set." +msgstr "la réponse à la transaction a provoqué la spécification du bit DDE_FBUSY." + +#: ../src/common/datetime.cpp:4015 +msgid "third" +msgstr "troisième" + +#: ../src/common/datetime.cpp:4025 +msgid "thirteenth" +msgstr "treizième" + +#: ../src/common/imagtiff.cpp:174 +#: ../src/common/imagtiff.cpp:190 +#, c-format +msgid "tiff module: %s" +msgstr "module tiff : %s" + +#: ../src/common/datetime.cpp:3838 +msgid "today" +msgstr "aujourd'hui" + +#: ../src/common/datetime.cpp:3840 +msgid "tomorrow" +msgstr "demain" + +#: ../src/gtk/aboutdlg.cpp:153 +msgid "translator-credits" +msgstr "Liste des traducteurs" + +#: ../src/common/datetime.cpp:4024 +msgid "twelfth" +msgstr "douzième" + +#: ../src/common/datetime.cpp:4032 +msgid "twentieth" +msgstr "vingtième" + +#: ../src/common/fontcmn.cpp:602 +#: ../src/common/fontcmn.cpp:687 +msgid "underlined" +msgstr "souligné" + +#: ../src/common/fileconf.cpp:2006 +#, c-format +msgid "unexpected \" at position %d in '%s'." +msgstr "symbole \" inattendu à la position %d dans « %s »." + +#: ../src/common/tarstrm.cpp:1040 +msgid "unexpected end of file" +msgstr "Fin de fichier inattendue" + +#: ../src/common/tarstrm.cpp:369 +#: ../src/common/tarstrm.cpp:392 +#: ../src/common/tarstrm.cpp:423 +#: ../src/generic/progdlgg.cpp:301 +msgid "unknown" +msgstr "inconnu" + +#: ../src/common/xtixml.cpp:249 +#, c-format +msgid "unknown class %s" +msgstr "classe « %s » inconnue" + +#: ../src/common/regex.cpp:257 +#: ../src/html/chm.cpp:352 +msgid "unknown error" +msgstr "erreur inconnue" + +#: ../src/msw/dialup.cpp:495 +#, c-format +msgid "unknown error (error code %08x)." +msgstr "erreur inconnue (code d'erreur %08x)." + +#: ../src/common/textbuf.cpp:229 +msgid "unknown line terminator" +msgstr "fin de ligne inconnue" + +#: ../src/common/file.cpp:360 +#: ../src/msw/wince/filefnwce.cpp:167 +msgid "unknown seek origin" +msgstr "origine de la recherche inconnue" + +#: ../src/common/fmapbase.cpp:699 +#, c-format +msgid "unknown-%d" +msgstr "inconnu-%d" + +#: ../src/common/docview.cpp:428 +msgid "unnamed" +msgstr "sans nom" + +#: ../src/common/docview.cpp:1414 +#, c-format +msgid "unnamed%d" +msgstr "sans nom %d" + +#: ../src/common/zipstrm.cpp:1793 +#: ../src/common/zipstrm.cpp:2174 +msgid "unsupported Zip compression method" +msgstr "méthode de compression zip non gérée" + +#: ../src/common/intl.cpp:1166 +#, c-format +msgid "using catalog '%s' from '%s'." +msgstr "utilisation du catalogue « %s » de « %s »." + +#: ../src/html/chm.cpp:336 +msgid "write error" +msgstr "erreur d'écriture" + +#: ../src/common/filename.cpp:180 +msgid "writing" +msgstr "écriture" + +#: ../src/common/stopwatch.cpp:289 +msgid "wxGetTimeOfDay failed." +msgstr "wxGetTimeOfDay a échoué." + +#: ../include/wx/richtext/richtextbulletspage.h:34 +msgid "wxRichTextBulletsPage" +msgstr "wxRichTextBulletsPage" + +#: ../include/wx/richtext/richtextindentspage.h:37 +#: ../include/wx/richtext/richtextfontpage.h:38 +#: ../include/wx/richtext/richtexttabspage.h:35 +msgid "wxRichTextFontPage" +msgstr "wxRichTextFontPage" + +#: ../include/wx/richtext/richtextliststylepage.h:31 +msgid "wxRichTextListStylePage" +msgstr "wxRichTextListStylePage" + +#: ../include/wx/richtext/richtextstylepage.h:21 +msgid "wxRichTextStylePage" +msgstr "wxRichTextStylePage" + +#: ../src/common/socket.cpp:412 +#: ../src/common/socket.cpp:466 +msgid "wxSocket: invalid signature in ReadMsg." +msgstr "wxSocket : signature non valable dans ReadMsg." + +#: ../src/common/socket.cpp:993 +msgid "wxSocket: unknown event!." +msgstr "wxSocket : événement inconnu." + +#: ../src/motif/app.cpp:273 +#, c-format +msgid "wxWidgets could not open display for '%s': exiting." +msgstr "wxWidgets n'a pas pu ouvrir d'affichage pour %s : abandon." + +#: ../src/x11/app.cpp:170 +msgid "wxWidgets could not open display. Exiting." +msgstr "wxWidgets n'a pas pu ouvrir d'affichage : abandon." + +#: ../src/richtext/richtextsymboldlg.cpp:433 +msgid "xxxx" +msgstr "xxxx" + +#: ../src/common/datetime.cpp:3839 +msgid "yesterday" +msgstr "hier" + +#: ../src/common/zstream.cpp:245 +#: ../src/common/zstream.cpp:413 +#, c-format +msgid "zlib error %d" +msgstr "erreur zlib %d" + +#: ../src/common/prntbase.cpp:1124 +msgid "|<<" +msgstr "|<<" + +#: ../src/richtext/richtextliststylepage.cpp:498 +#: ../src/richtext/richtextbulletspage.cpp:296 +msgid "~" +msgstr "~" + +#~ msgid "*** A debug report has been generated\n" +#~ msgstr "*** Un rapport de débogage a été créé\n" +#~ msgid "*** It can be found in \"%s\"\n" +#~ msgstr "*** Il peut être trouvé dans « %s »\n" +#~ msgid "Formatting" +#~ msgstr "Mise en forme" +#~ msgid "Go back to the previous HTML page" +#~ msgstr "Retourner à la page HTML précédente" +#~ msgid "Go forward to the next HTML page" +#~ msgstr "Aller vers la page HTML suivante" +#~ msgid "Help : %s" +#~ msgstr "Aide : %s" +#~ msgid "Preparing help window..." +#~ msgstr "Préparation de la fenêtre d'aide..." +#~ msgid "Search!" +#~ msgstr "Chercher!" +#~ msgid "wxSearchEngine::LookFor must be called before scanning!" +#~ msgstr "wxSearchEngine::LookFor doit être appelé avant de scanner!" +#~ msgid "." +#~ msgstr "." +#~ msgid ".." +#~ msgstr ".." +#~ msgid "Cannot open URL '%s'" +#~ msgstr "Impossible d'ouvrir le lien « %s »" +#~ msgid "Error " +#~ msgstr "Erreur " +#~ msgid "Failed to create directory %s/.gnome." +#~ msgstr "Échec de la création du répertoire %s/.gnome." +#~ msgid "Failed to create directory %s/mime-info." +#~ msgstr "Échec de la création du répertoire %s/mime-info." +#~ msgid "" +#~ "Failed to get stack backtrace:\n" +#~ "%s" +#~ msgstr "" +#~ "Échec de l'obtention de la pile d'appel :\n" +#~ "%s" +#~ msgid "Loading Grey Ascii PNM image is not yet implemented." +#~ msgstr "" +#~ "Le chargement d'une image PNM ASCII en niveau de gris n'est pas encore " +#~ "implémenté." +#~ msgid "Loading Grey Raw PNM image is not yet implemented." +#~ msgstr "" +#~ "Le chargement d'une image PNM source en niveau de gris n'est pas encore " +#~ "implémenté." +#~ msgid "MP Thread Support is not available on this System" +#~ msgstr "Gestion des processus MP non disponible sur ce système" +#~ msgid "Mailcap file %s, line %d: incomplete entry ignored." +#~ msgstr "Fichier mailcap %s, ligne %d : entrée incomplète ignorée." +#~ msgid "Mime.types file %s, line %d: unterminated quoted string." +#~ msgstr "" +#~ "Fichier mime.types %s, ligne %d : chaîne entre guillemets non terminée." +#~ msgid "Unknown field in file %s, line %d: '%s'." +#~ msgstr "Champ inconnu dans le fichier %s, ligne %d : « %s »." +#~ msgid "bold " +#~ msgstr "gras " +#~ msgid "can't query for GUI plugins name in console applications" +#~ msgstr "" +#~ "ne peut chercher des noms de greffon graphique dans les applications en " +#~ "console" +#~ msgid "light " +#~ msgstr "léger " +#~ msgid "underlined " +#~ msgstr "souligné " +#~ msgid "unsupported zip archive" +#~ msgstr "archive zip non gérée" + diff --git a/src/locale/fr/Makefile.am b/src/locale/fr/Makefile.am new file mode 100644 index 0000000..77e308c --- /dev/null +++ b/src/locale/fr/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = LC_MESSAGES diff --git a/src/locale/pl_PL/LC_MESSAGES/woeusb.po b/src/locale/pl_PL/LC_MESSAGES/woeusb.po new file mode 100644 index 0000000..dabd985 --- /dev/null +++ b/src/locale/pl_PL/LC_MESSAGES/woeusb.po @@ -0,0 +1,122 @@ +# Polish translations for woeusb package +# Polskie tłumaczenia dla pakietu woeusb. +# Copyright (C) 2018 THE woeusb'S COPYRIGHT HOLDER +# This file is distributed under the same license as the woeusb package. +# Jakub Szymański , 2018. +# +msgid "" +msgstr "" +"Project-Id-Version: woeusb\n" +"Report-Msgid-Bugs-To: WoeUSB Issue Tracker \n" +"POT-Creation-Date: 2018-07-30 15:09+0200\n" +"PO-Revision-Date: 2018-07-30 15:34+0200\n" +"Last-Translator: Jakub Szymański \n" +"Language-Team: Polish\n" +"Language: pl\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 " +"|| n%100>=20) ? 1 : 2);\n" +"X-Generator: Poedit 2.0.9\n" +"X-Poedit-SearchPath-0: ..\n" + +#: woeusbgui:67 +msgid "Show all drives" +msgstr "Pokaż wszystkie dyski" + +#: woeusbgui:68 +msgid "Show all drives, even those not detected as USB stick." +msgstr "" +"Pokaż wszystkie dyski, nawet jeśli system nie widzi ich jako pamięci na USB." + +#: woeusbgui:78 +msgid "Set boot flag" +msgstr "Ustaw flagę boot" + +#: woeusbgui:79 +msgid "Sets boot flag after process of copying." +msgstr "Ustawia flagę \"boot\" po zakończeniu kopiowania." + +#: woeusbgui:81 +msgid "Use NTFS" +msgstr "Użyj NTFS" + +#: woeusbgui:82 +msgid "Use NTFS instead of FAT. NOTE: NTFS seems to be slower than FAT." +msgstr "Użyj NTFS zamiast FAT. Notka: NTFS zdaje się być wolniejszy od FAT." + +#: woeusbgui:88 +msgid "&File" +msgstr "&Plik" + +#: woeusbgui:89 +msgid "&Options" +msgstr "&Opcje" + +#: woeusbgui:90 +msgid "&Help" +msgstr "&Pomoc" + +#: woeusbgui:146 +msgid "Source :" +msgstr "Źródło :" + +#: woeusbgui:149 +msgid "From a disk image (iso)" +msgstr "Z pliku (iso) na dysku" + +#: woeusbgui:154 +msgid "Please select a disk image" +msgstr "Prosze wybierz obraz dysku" + +#: woeusbgui:160 +msgid "From a CD/DVD drive" +msgstr "Z napędu optycznego" + +#: woeusbgui:173 +msgid "Target device :" +msgstr "Urządzenie docelowe :" + +#: woeusbgui:185 +msgid "Install" +msgstr "Instaluj" + +#: woeusbgui:275 +msgid "Installing" +msgstr "Instalacja" + +#: woeusbgui:275 +msgid "Please wait..." +msgstr "Proszę czekać..." + +#: woeusbgui:286 +msgid "Are you sure you want to cancel the installation?" +msgstr "Jesteś pewnien że chcesz przerwać instalacje?" + +#: woeusbgui:286 +msgid "Cancel" +msgstr "Przerwi" + +#: woeusbgui:295 +msgid "Installation succeeded!" +msgstr "Instalacja!" + +#: woeusbgui:295 woeusbgui:297 +msgid "Installation" +msgstr "Instalacja" + +#: woeusbgui:297 +msgid "Installation failed!" +msgstr "Instalacja zakończona niepowodzeniem!" + +#: woeusbgui:312 +msgid "About" +msgstr "O programie" + +#: woeusbgui:370 +msgid "License" +msgstr "Licencja" diff --git a/src/locale/woeusb.pot b/src/locale/woeusb.pot new file mode 100644 index 0000000..1116c43 --- /dev/null +++ b/src/locale/woeusb.pot @@ -0,0 +1,117 @@ +# 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. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: woeusb\n" +"Report-Msgid-Bugs-To: WoeUSB Issue Tracker \n" +"POT-Creation-Date: 2018-07-30 15:09+0200\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: Jakub Szymański \n" +"Language-Team: WoeUSB Issue Tracker \n" +"Language: \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-SourceCharset: utf-8\n" +"X-Poedit-Basepath: .\n" +"X-Poedit-SearchPath-0: ..\n" + +#: woeusbgui:67 +msgid "Show all drives" +msgstr "" + +#: woeusbgui:68 +msgid "Show all drives, even those not detected as USB stick." +msgstr "" + +#: woeusbgui:78 +msgid "Set boot flag" +msgstr "" + +#: woeusbgui:79 +msgid "Sets boot flag after process of copying." +msgstr "" + +#: woeusbgui:81 +msgid "Use NTFS" +msgstr "" + +#: woeusbgui:82 +msgid "Use NTFS instead of FAT. NOTE: NTFS seems to be slower than FAT." +msgstr "" + +#: woeusbgui:88 +msgid "&File" +msgstr "" + +#: woeusbgui:89 +msgid "&Options" +msgstr "" + +#: woeusbgui:90 +msgid "&Help" +msgstr "" + +#: woeusbgui:146 +msgid "Source :" +msgstr "" + +#: woeusbgui:149 +msgid "From a disk image (iso)" +msgstr "" + +#: woeusbgui:154 +msgid "Please select a disk image" +msgstr "" + +#: woeusbgui:160 +msgid "From a CD/DVD drive" +msgstr "" + +#: woeusbgui:173 +msgid "Target device :" +msgstr "" + +#: woeusbgui:185 +msgid "Install" +msgstr "" + +#: woeusbgui:275 +msgid "Installing" +msgstr "" + +#: woeusbgui:275 +msgid "Please wait..." +msgstr "" + +#: woeusbgui:286 +msgid "Are you sure you want to cancel the installation?" +msgstr "" + +#: woeusbgui:286 +msgid "Cancel" +msgstr "" + +#: woeusbgui:295 +msgid "Installation succeeded!" +msgstr "" + +#: woeusbgui:295 woeusbgui:297 +msgid "Installation" +msgstr "" + +#: woeusbgui:297 +msgid "Installation failed!" +msgstr "" + +#: woeusbgui:312 +msgid "About" +msgstr "" + +#: woeusbgui:370 +msgid "License" +msgstr "" diff --git a/src/locale/zh_TW/LC_MESSAGES/Makefile.am b/src/locale/zh_TW/LC_MESSAGES/Makefile.am new file mode 100644 index 0000000..8907d8f --- /dev/null +++ b/src/locale/zh_TW/LC_MESSAGES/Makefile.am @@ -0,0 +1,7 @@ +# Il faut mettre les fichiers dans le sous dossier locale/zh_TW/LC_MESSAGES de share... +pkgdatadir=$(mypkgdatadir)/locale/zh_TW/LC_MESSAGES + +%.mo: %.po + msgfmt -o $@ $< + +dist_pkgdata_DATA = $(srcdir)/woeusb.mo diff --git a/src/locale/zh_TW/LC_MESSAGES/woeusb.po b/src/locale/zh_TW/LC_MESSAGES/woeusb.po new file mode 100644 index 0000000..2938b50 --- /dev/null +++ b/src/locale/zh_TW/LC_MESSAGES/woeusb.po @@ -0,0 +1,149 @@ +msgid "" +msgstr "" +"Project-Id-Version: winusb\n" +"Report-Msgid-Bugs-To: WoeUSB Issue Tracker \n" +"POT-Creation-Date: 2011-07-14 00:08+0100\n" +"PO-Revision-Date: 2016-07-09 20:51+0800\n" +"Last-Translator: V字龍 \n" +"Language-Team: chinese-l10n \n" +"Language: zh_TW\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"X-Poedit-SourceCharset: UTF-8\n" +"X-Poedit-Basepath: .\n" +"Plural-Forms: nplurals=1; plural=0;\n" +"X-Generator: Poedit 1.8.7.1\n" +"X-Poedit-SearchPath-0: ../../..\n" + +#: ../../../MainFrame.cpp:41 +msgid "Show all drives" +msgstr "秀出所有磁碟機" + +#: ../../../MainFrame.cpp:41 +msgid "Show all drives, even those not detected as USB stick." +msgstr "秀出所有磁碟機,就算沒有識別為 USB 記憶碟也一樣。" + +#: ../../../MainFrame.cpp:53 +msgid "&File" +msgstr "檔案(&F)" + +#: ../../../MainFrame.cpp:54 +msgid "&Help" +msgstr "尋求幫助(&H)" + +#: ../../../App.cpp:82 +msgid "Error : " +msgstr "錯誤:" + +#: ../../../App.cpp:82 ../../../App.cpp:124 +msgid "Error..." +msgstr "錯誤……" + +#: ../../../App.cpp:117 +msgid "Unknown error as occurred!" +msgstr "發生了未知的錯誤!" + +#: ../../../App.cpp:124 +msgid "Fatal error : " +msgstr "致命錯誤:" + +#: ../../../DialogAbout.cpp:46 +#, c-format +msgid "Version %s" +msgstr "第 %s 版" + +#: ../../../DialogAbout.cpp:55 +msgid "Developer" +msgstr "軟體開發者" + +#: ../../../DialogAbout.cpp:58 +#, c-format +msgid "" +"%s is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version.\n" +"\n" +"%s 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 theGNU General Public License for more details.\n" +"\n" +"You should have received a copy of the GNU General Public Licensealong with %s. If not, see ." +msgstr "" +"%s 為自由軟體:您可以在 Free Software Foundation 所發表的 GNU General Public License 授權條款第 3 版或任意(您所中意之)更近期版本的規定下進行本軟體的再散佈與修改。\n" +"\n" +"%s 以其會有所用的期望下而散佈,但**不做任何擔保**;甚至於不包含暗示其對於**商業價值**或是**特定需求的適用性**的保證。更多相關細節請參考 GNU General Public License 授權條款。\n" +"\n" +"您應該已經隨 %s 得到一份 GNU General Public License 授權條款的副本。如果沒有的話請上 瀏覽。" + +#: ../../../DialogAbout.cpp:73 +msgid "License" +msgstr "授權條款" + +#: ../../../MainPanel.cpp:45 +msgid "Source :" +msgstr "來源可開機媒體:" + +#: ../../../MainPanel.cpp:48 +msgid "From a disk image (iso)" +msgstr "從一個光碟映像檔(iso)" + +#: ../../../MainPanel.cpp:53 +msgid "Please select a disk image" +msgstr "請選取一個光碟映像檔" + +#: ../../../MainPanel.cpp:58 +msgid "From a CD/DVD drive" +msgstr "從一個 CD/DVD 光碟機" + +#: ../../../MainPanel.cpp:70 +msgid "Target device :" +msgstr "目標裝置:" + +#: ../../../MainPanel.cpp:81 +msgid "Install" +msgstr "開始安裝" + +#: ../../../MainPanel.cpp:247 +msgid "Installing.." +msgstr "正在安裝……" + +#: ../../../MainPanel.cpp:247 +msgid "Please wait..." +msgstr "請稍候……" + +#: ../../../MainPanel.cpp:270 ../../../MainPanel.cpp:289 +msgid "Are you sure you want to cancel the installation?" +msgstr "請問您確定要取消安裝程序嗎?" + +#: ../../../MainPanel.cpp:270 ../../../MainPanel.cpp:289 +msgid "Cancel" +msgstr "取消" + +#: ../../../MainPanel.cpp:312 +msgid "Installation succeeded!" +msgstr "安裝成功!" + +#: ../../../MainPanel.cpp:312 ../../../MainPanel.cpp:316 +msgid "Installation" +msgstr "安裝程序" + +#: ../../../MainPanel.cpp:316 +msgid "Installation failed!" +msgstr "安裝失敗!" + +#: ../../../findFile.cpp:54 +msgid "File not Found : " +msgstr "找不到檔案:" + +#: ../../../findFile.cpp:54 +msgid "Error" +msgstr "錯誤" + +#: ../../../strWxStdConv.hpp:106 +msgid "bytes" +msgstr "位元組" + +#: ../../../AppConfig.hpp:7 +msgid "WinUSB" +msgstr "WinUSB Windows 可開機 USB 製作工具" + +#: ../../../DialogAbout.hpp:68 +msgid "About" +msgstr "關於本軟體" diff --git a/src/locale/zh_TW/Makefile.am b/src/locale/zh_TW/Makefile.am new file mode 100644 index 0000000..77e308c --- /dev/null +++ b/src/locale/zh_TW/Makefile.am @@ -0,0 +1 @@ +SUBDIRS = LC_MESSAGES diff --git a/src/utils.py b/src/utils.py new file mode 100644 index 0000000..fca52cc --- /dev/null +++ b/src/utils.py @@ -0,0 +1,333 @@ +#!/usr/bin/env python + +""" +This file is part of WoeUSB. + +WoeUSB is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +WoeUSB 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 WoeUSB. If not, see . +""" + +import os +import re +import sys +import shutil +import pathlib +import subprocess + +#: Disable message coloring when set to True, set by --no-color +no_color = False + +# External tools +try: + import termcolor +except ImportError: + print("Module termcolor is not installed, text coloring disabled") + no_color = True + +gui = None +verbose = False + + +def check_runtime_dependencies(application_name): + """ + :param application_name: + :return: + """ + result = "success" + + system_commands = ["mount", "wipefs", "lsblk", "blockdev", "df", "parted", "7z"] + for command in system_commands: + if shutil.which(command) is None: + print_with_color( + "Error: " + application_name + " requires " + command + + " command in the executable search path, but it is not found.", + "red") + result = "failed" + + fat = ["mkdosfs", "mkfs.msdos", "mkfs.vfat", "mkfs.fat"] + for command in fat: + if shutil.which(command) != "": + fat = command + break + + if isinstance(fat, list): + print_with_color("Error: mkdosfs/mkfs.msdos/mkfs.vfat/mkfs.fat command not found!", "red") + print_with_color("Error: Please make sure that dosfstools is properly installed!", "red") + result = "failed" + + ntfs = "mkntfs" + if shutil.which("mkntfs") == "": + print_with_color("Error: mkntfs command not found!", "red") + print_with_color("Error: Please make sure that ntfs-3g is properly installed!", "red") + result = "failed" + + grub = ["grub-install", "grub2-install"] + for command in grub: + if shutil.which(command) != "": + grub = command + break + + if isinstance(grub, list): + print_with_color("Error: grub-install or grub2-install command not found!", "red") + print_with_color("Error: Please make sure that GNU GRUB is properly installed!", "red") + result = "failed" + + if result != "success": + raise RuntimeError("Dependencies are not met") + else: + return [fat, ntfs, grub] + + +def check_runtime_parameters(install_mode, source_media, target_media): + """ + :param install_mode: + :param source_media: + :param target_media: + :return: + """ + if not os.path.isfile(source_media) and not pathlib.Path(source_media).is_block_device(): + print_with_color( + "Error: source media \"" + source_media + "\" not found or not a regular file or a block device file!", + "red") + return 1 + + if not pathlib.Path(target_media).is_block_device(): + print_with_color("Error: Target media \"" + target_media + "\" is not a block device file!", "red") + return 1 + + if install_mode == "device" and target_media[-1].isdigit(): + print_with_color("Error: Target media \"" + target_media + "\" is not an entire storage device!", "red") + return 1 + + if install_mode == "partition" and not target_media[-1].isdigit(): + print_with_color("Error: Target media \"" + target_media + "\" is not an partition!", "red") + return 1 + return 0 + + +def determine_target_parameters(install_mode, target_media): + """ + :param install_mode: + :param target_media: + :return: + """ + if install_mode == "partition": + target_partition = target_media + + while target_media[-1].isdigit(): + target_media = target_media[:-1] + target_device = target_media + else: + target_device = target_media + target_partition = target_media + str(1) + + if verbose: + print_with_color("Info: Target device is " + target_device) + print_with_color("Info: Target partition is " + target_partition) + + return [target_device, target_partition] + + +def check_is_target_device_busy(device): + """ + :param device: + :return: + """ + mount = subprocess.run("mount", stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + if re.findall(device, mount) != []: + return 1 + return 0 + + +def check_source_and_target_not_busy(install_mode, source_media, target_device, target_partition): + """ + :param install_mode: + :param source_media: + :param target_device: + :param target_partition: + :return: + """ + if check_is_target_device_busy(source_media): + print_with_color("Error: Source media is currently mounted, unmount the partition then try again", "red") + return 1 + + if install_mode == "partition": + if check_is_target_device_busy(target_partition): + print_with_color("Error: Target partition is currently mounted, unmount the partition then try again", + "red") + return 1 + else: + if check_is_target_device_busy(target_device): + print_with_color( + "Error: Target device is currently busy, unmount all mounted partitions in target device then try again", + "red") + return 1 + + +def check_fat32_filesize_limitation(source_fs_mountpoint): + """ + :param source_fs_mountpoint: + :return: + """ + for dirpath, dirnames, filenames in os.walk(source_fs_mountpoint): + for file in filenames: + path = os.path.join(dirpath, file) + if os.path.getsize(path) > (2 ** 32) - 1: # Max fat32 file size + print_with_color( + "Warining: File " + path + " in source image has exceed the FAT32 Filesystem 4GiB Single File Size Limitation, swiching to NTFS filesystem.", + "yellow") + print_with_color( + "Refer: https://github.com/slacka/WoeUSB/wiki/Limitations#fat32-filesystem-4gib-single-file-size-limitation for more info.", + "yellow") + return 1 + return 0 + + +def check_target_partition(target_partition, target_device): + """ + Check target partition for potential problems before mounting them for --partition creation mode as we don't know about the existing partition + + :param target_partition: The target partition to check + :param target_device: The parent device of the target partition, this is passed in to check UEFI:NTFS filesystem's existence on check_uefi_ntfs_support_partition + :return: + """ + target_filesystem = subprocess.run(["lsblk", + "--output", "FSTYPE", + "--noheadings", + target_partition], stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + + if target_filesystem == "vfat": + pass # supported + elif target_filesystem == "ntfs": + check_uefi_ntfs_support_partition(target_device) + else: + print_with_color("Error: Target filesystem not supported, currently supported filesystem: FAT, NTFS.", "red") + return 1 + + return 0 + + +def check_uefi_ntfs_support_partition(target_device): + """ + Check if the UEFI:NTFS support partition exists + Currently it depends on the fact that this partition has a label of "UEFI_NTFS" + + :param target_device: The UEFI:NTFS partition residing entier device file + :return: + """ + lsblk = subprocess.run(["lsblk", + "--output", "LABEL", + "--noheadings", + target_device], stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + + if re.findall("UEFI_NTFS", lsblk) != []: + print_with_color( + "Warning: Your device doesn't seems to have an UEFI:NTFS partition, UEFI booting will fail if the motherboard firmware itself doesn't support NTFS filesystem!") + print_with_color( + "Info: You may recreate disk with an UEFI:NTFS partition by using the --device creation method") + + +def check_target_filesystem_free_space(target_fs_mountpoint, source_fs_mountpoint, target_partition): + """ + :param target_fs_mountpoint: + :param source_fs_mountpoint: + :param target_partition: + :return: + """ + df = subprocess.run(["df", + "--block-size=1", + target_fs_mountpoint], stdout=subprocess.PIPE).stdout + # free_space = int(df.strip().split()[4]) + + awk = subprocess.Popen(["awk", "{print $4}"], stdin=subprocess.PIPE, stdout=subprocess.PIPE) + free_space = awk.communicate(input=df)[0] + free_space = free_space.decode("utf-8").strip() + free_space = re.sub("[^0-9]", "", free_space) + free_space = int(free_space) + + needed_space = 0 + for dirpath, dirnames, filenames in os.walk(source_fs_mountpoint): + for file in filenames: + path = os.path.join(dirpath, file) + needed_space += os.path.getsize(path) + + additional_space_required_for_grub_installation = 1000 * 1000 * 10 # 10MiB + + needed_space += additional_space_required_for_grub_installation + + if needed_space > free_space: + print_with_color("Error: Not enough free space on target partition!") + print_with_color( + "Error: We required " + get_size( + str(needed_space)) + "(" + str(needed_space) + " bytes) but '" + target_partition + "' only has " + str(free_space) + "(" + str(free_space) + " bytes).") + return 1 + + +def print_with_color(text, color=""): + """ + Print function + This function takes into account no_color flag + Also if used by gui, sends information to it, rather than putting it into standard output + + :param text: Text to be printed + :param color: Color of the text + """ + if gui is not None: + gui.state = text + if color == "red": + gui.error = text + sys.exit() + else: + if no_color or color == "": + sys.stdout.write(text + "\n") + else: + termcolor.cprint(text, color) + + +def convert_to_human_readable_format(num, suffix='B'): + for unit in ['', 'Ki', 'Mi', 'Gi']: + if abs(num) < 1024.0: + return "%3.1f%s%s" % (num, unit, suffix) + num /= 1024.0 + return "%.1f%s%s" % (num, 'Ti', suffix) + + +def get_size(path): + total_size = 0 + for dirpath, _, filenames in os.walk(path): + for file in filenames: + path = os.path.join(dirpath, file) + total_size += os.path.getsize(path) + return total_size + + +# Ok, you may asking yourself, what the f**k is this, and why is it called everywhere. Let me explain +# In python you can't just stop or kill thread, it must end its execution, +# or recognize moment where you want it to stop and politely perform euthanasia on itself. +# So, here, if gui is set, we throw exception which is going to be (hopefully) catch by GUI, +# simultaneously ending whatever script was doing meantime! +# Everyone goes to home happy and user is left with wrecked pendrive (just joking, next thing called by gui is cleanup) + + +def check_kill_signal(): + """ + Ok, you may asking yourself, what the f**k is this, and why is it called everywhere. Let me explain + In python you can't just stop or kill thread, it must end its execution, + or recognize moment where you want it to stop and politely perform euthanasia on itself. + So, here, if gui is set, we throw exception which is going to be (hopefully) catch by GUI, + simultaneously ending whatever script was doing meantime! + Everyone goes to home happy and user is left with wrecked pendrive (just joking, next thing called by gui is cleanup) + """ + if gui is not None: + if gui.kill: + raise sys.exit() diff --git a/src/win32/Makefile.am b/src/win32/Makefile.am new file mode 100644 index 0000000..120e631 --- /dev/null +++ b/src/win32/Makefile.am @@ -0,0 +1,2 @@ + +EXTRA_DIST = $(srcdir)/icon.ico $(srcdir)/winProg.manifest diff --git a/src/win32/icon.ico b/src/win32/icon.ico new file mode 100644 index 0000000..bc25106 Binary files /dev/null and b/src/win32/icon.ico differ diff --git a/src/win32/winProg.manifest b/src/win32/winProg.manifest new file mode 100644 index 0000000..de4cd05 --- /dev/null +++ b/src/win32/winProg.manifest @@ -0,0 +1,22 @@ + + + + c501wakeonlan + + + + + + diff --git a/src/woeusb b/src/woeusb new file mode 100644 index 0000000..3162b48 --- /dev/null +++ b/src/woeusb @@ -0,0 +1,56 @@ +#!/usr/bin/env python + +""" ++A Linux program to create bootable Windows USB stick from a real Windows DVD or an image ++Copyright © 2013 Colin GILLE / congelli501 ++Copyright © 2017 slacka et. al. ++Python port - 2018 WaxyMocha ++ ++This file is part of WoeUSB. ++ ++WoeUSB is free software: you can redistribute it and/or modify ++it under the terms of the GNU General Public License as published by ++the Free Software Foundation, either version 3 of the License, or ++(at your option) any later version. ++ ++WoeUSB 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 WoeUSB If not, see . ++""" + +import os +import sys + +if "XDG_DATA_DIRS" in os.environ: + dirs = os.environ["XDG_DATA_DIRS"].split(":") + + tmp = [] + for directory in dirs: + tmp.append(directory + "/WoeUSB") + + dirs = tmp +else: + dirs = ["/usr/local/share/WoeUSB", "/usr/share/WoeUSB"] + + +try: + # Try to import from same folder where this file is + import core + +except ImportError: + # Add possible directories where WoeUSB can be installed and try to import form them + sys.path = sys.path + dirs + + try: + import core + except ImportError: + # Broken installation? + print("Couldn't find program files, please reinstall WoeUSB and if that won't help contact us on github") + sys.exit(1) + + +core.run() diff --git a/src/woeusbgui b/src/woeusbgui new file mode 100644 index 0000000..2ed9097 --- /dev/null +++ b/src/woeusbgui @@ -0,0 +1,480 @@ +#!/usr/bin/env python + +""" + This file is part of WoeUSB. + + WoeUSB is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + WoeUSB 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 WoeUSB. If not, see . +""" + +import os +import sys +import time +import gettext +import threading +import subprocess + +from os.path import dirname, realpath + +import wx +import wx.adv + +if "XDG_DATA_DIRS" in os.environ: + dirs = os.environ["XDG_DATA_DIRS"].split(":") + + tmp = [] + for directory in dirs: + tmp.append(directory + "/WoeUSB") + + dirs = tmp +else: + dirs = ["/usr/local/share/WoeUSB", "/usr/share/WoeUSB"] + +dirs.append(dirname(realpath(__file__))) + +try: + # Try to import from same folder where this file is + import core + import list_devices + +except ImportError: + # Add possible directories where WoeUSB can be installed and try to import form them + sys.path = sys.path + dirs + + try: + import core + import list_devices + except ImportError: + # Broken installation? + print("Couldn't find program files, please reinstall WoeUSB and if that won't help contact us on github") + sys.exit(1) + + + +app = wx.App() + +locale = wx.Locale(wx.LANGUAGE_DEFAULT) +locale.AddCatalogLookupPathPrefix("locale") +locale.AddCatalog("woeusb") + +translation = gettext.translation("woeusb", "locale", + [locale.GetCanonicalName()], fallback=True) +translation.install() + +_ = wx.GetTranslation + + +PROG_FULL_NAME = "WoeUSB" + +# Missing config.hpp included by AppConfig.hpp? +# PROG_PKG_NAME = PACKAGE +# PROG_PKG_NAME_GETTEXT = PROG_PKG_NAME + +VERSION = "1.0.0" + + +class MainFrame(wx.Frame): + __MainPanel = None + __MenuBar = None + + __menuItemShowAll = None + + def __init__(self, title, pos, size, style=wx.DEFAULT_FRAME_STYLE): + super(MainFrame, self).__init__(None, -1, title, pos, size, style) + + file_menu = wx.Menu() + self.__menuItemShowAll = wx.MenuItem(file_menu, wx.ID_ANY, _("Show all drives") + " \tCtrl+A", + _("Show all drives, even those not detected as USB stick."), wx.ITEM_CHECK) + file_menu.Append(self.__menuItemShowAll) + + file_menu.AppendSeparator() + exit_item = file_menu.Append(wx.ID_EXIT) + + help_menu = wx.Menu() + help_item = help_menu.Append(wx.ID_ABOUT) + + options_menu = wx.Menu() + self.options_boot = wx.MenuItem(options_menu, wx.ID_ANY, _("Set boot flag"), + _("Sets boot flag after process of copying."), + wx.ITEM_CHECK) + self.options_filesystem = wx.MenuItem(options_menu, wx.ID_ANY, _("Use NTFS"), + _("Use NTFS instead of FAT. NOTE: NTFS seems to be slower than FAT."), + wx.ITEM_CHECK) + options_menu.Append(self.options_boot) + options_menu.Append(self.options_filesystem) + + self.__MenuBar = wx.MenuBar() + self.__MenuBar.Append(file_menu, _("&File")) + self.__MenuBar.Append(options_menu, _("&Options")) + self.__MenuBar.Append(help_menu, _("&Help")) + + self.SetMenuBar(self.__MenuBar) + + main_sizer = wx.BoxSizer(wx.VERTICAL) + + self.__MainPanel = MainPanel(self, wx.ID_ANY) + main_sizer.Add(self.__MainPanel, 1, wx.EXPAND | wx.ALL, 4) + + self.SetSizer(main_sizer) + + # self.Connect(self.__menuItemShowAll.GetId(), wx.EVT_MENU, MainPanel.on_show_all_drive, None, self.__MainPanel) + self.Bind(wx.EVT_MENU, self.__MainPanel.on_show_all_drive) + + self.Bind(wx.EVT_MENU, self.on_quit, exit_item) + self.Bind(wx.EVT_MENU, self.on_about, help_item) + + def on_quit(self, _): + self.Close(True) + + def on_about(self, _): + my_dialog_about = DialogAbout(self, wx.ID_ANY) + my_dialog_about.ShowModal() + + def is_show_all_checked(self): + return self.__menuItemShowAll.IsChecked() + + +class MainPanel(wx.Panel): + __parent = None + + __dvdDriveList = None + __usbStickList = wx.ListBox + + __dvdDriveDevList = [] + __usbStickDevList = [] + + __isoFile = wx.FilePickerCtrl + + __parentFrame = None + + __btInstall = None + __btRefresh = None + + __isoChoice = None + __dvdChoice = None + + def __init__(self, parent, ID, pos=wx.DefaultPosition, size=wx.DefaultSize, style=wx.TAB_TRAVERSAL): + super(MainPanel, self).__init__(parent, ID, pos, size, style) + + self.__parent = parent + + # Controls + main_sizer = wx.BoxSizer(wx.VERTICAL) + + # Iso / CD + main_sizer.Add(wx.StaticText(self, wx.ID_ANY, _("Source :")), 0, wx.ALL, 3) + + # Iso + self.__isoChoice = wx.RadioButton(self, wx.ID_ANY, _("From a disk image (iso)")) + main_sizer.Add(self.__isoChoice, 0, wx.ALL, 3) + + tmp_sizer = wx.BoxSizer(wx.HORIZONTAL) + tmp_sizer.AddSpacer(20) + self.__isoFile = wx.FilePickerCtrl(self, wx.ID_ANY, "", _("Please select a disk image"), + "Iso images (*.iso)|*.iso;*.ISO|All files|*") + tmp_sizer.Add(self.__isoFile, 1, wx.LEFT | wx.RIGHT | wx.BOTTOM, 3) + main_sizer.Add(tmp_sizer, 0, wx.EXPAND, 0) + + # DVD + self.__dvdChoice = wx.RadioButton(self, wx.ID_ANY, _("From a CD/DVD drive")) + main_sizer.Add(self.__dvdChoice, 0, wx.ALL, 3) + + # List + tmp_sizer = wx.BoxSizer(wx.HORIZONTAL) + tmp_sizer.AddSpacer(20) + self.__dvdDriveList = wx.ListBox(self, wx.ID_ANY) + tmp_sizer.Add(self.__dvdDriveList, 1, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.BOTTOM, 3) + main_sizer.Add(tmp_sizer, 1, wx.EXPAND, 0) + + # Target + main_sizer.AddSpacer(20) + + main_sizer.Add(wx.StaticText(self, wx.ID_ANY, _("Target device :")), 0, wx.ALL, 3) + + # List + self.__usbStickList = wx.ListBox(self, wx.ID_ANY) + main_sizer.Add(self.__usbStickList, 1, wx.EXPAND | wx.ALL, 3) + + # Buttons + main_sizer.AddSpacer(30) + + bt_sizer = wx.BoxSizer(wx.HORIZONTAL) + self.__btRefresh = wx.Button(self, wx.ID_REFRESH) + bt_sizer.Add(self.__btRefresh, 0, wx.ALL, 3) + self.__btInstall = wx.Button(self, wx.ID_ANY, _("Install")) + bt_sizer.Add(self.__btInstall, 0, wx.ALL, 3) + + main_sizer.Add(bt_sizer, 0, wx.ALIGN_RIGHT, 0) + + # Finalization + self.SetSizer(main_sizer) + + self.Bind(wx.EVT_LISTBOX, self.on_list_or_file_modified, self.__usbStickList) + self.Bind(wx.EVT_LISTBOX, self.on_list_or_file_modified, self.__dvdDriveList) + self.Bind(wx.EVT_FILEPICKER_CHANGED, self.on_list_or_file_modified, self.__isoFile) + + self.Bind(wx.EVT_BUTTON, self.on_install, self.__btInstall) + self.Bind(wx.EVT_BUTTON, self.on_refresh, self.__btRefresh) + + self.Bind(wx.EVT_RADIOBUTTON, self.on_source_option_changed, self.__isoChoice) + self.Bind(wx.EVT_RADIOBUTTON, self.on_source_option_changed, self.__dvdChoice) + + self.refresh_list_content() + self.on_source_option_changed(wx.CommandEvent) + self.__btInstall.Enable(self.is_install_ok()) + + def refresh_list_content(self): + # USB + self.__usbStickDevList = [] + self.__usbStickList.Clear() + + show_all_checked = self.__parent.is_show_all_checked() + + device_list = list_devices.usb_drive(show_all_checked) + + for device in device_list: + self.__usbStickDevList.append(device[0]) + self.__usbStickList.Append(device[1]) + + # ISO + + self.__dvdDriveDevList = [] + self.__dvdDriveList.Clear() + + drive_list = list_devices.dvd_drive() + + for drive in drive_list: + self.__dvdDriveDevList.append(drive[0]) + self.__dvdDriveList.Append(drive[1]) + + self.__btInstall.Enable(self.is_install_ok()) + + def on_source_option_changed(self, _): + is_iso = self.__isoChoice.GetValue() + + self.__isoFile.Enable(is_iso) + self.__dvdDriveList.Enable(not is_iso) + + self.__btInstall.Enable(self.is_install_ok()) + + def is_install_ok(self): + is_iso = self.__isoChoice.GetValue() + return ((is_iso and os.path.isfile(self.__isoFile.GetPath())) or ( + not is_iso and self.__dvdDriveList.GetSelection() != wx.NOT_FOUND)) and self.__usbStickList.GetSelection() != wx.NOT_FOUND + + def on_list_or_file_modified(self, event): + if event.GetEventType() == wx.EVT_LISTBOX and not event.IsSelection(): + return + + self.__btInstall.Enable(self.is_install_ok()) + + def on_refresh(self, _): + self.refresh_list_content() + + def on_install(self, _): + global woe + if self.is_install_ok(): + is_iso = self.__isoChoice.GetValue() + + device = self.__usbStickDevList[self.__usbStickList.GetSelection()] + + if is_iso: + iso = self.__isoFile.GetPath() + else: + iso = self.__dvdDriveDevList[self.__dvdDriveList.GetSelection()] + + if self.__parent.options_filesystem.IsChecked(): + filesystem = "NTFS" + else: + filesystem = "FAT" + + woe = WoeUSB(iso, device, boot_flag=self.__parent.options_boot.IsChecked(), filesystem=filesystem) + woe.start() + + dialog = wx.ProgressDialog(_("Installing"), _("Please wait..."), 101, self.GetParent(), + wx.PD_APP_MODAL | wx.PD_SMOOTH | wx.PD_CAN_ABORT) + + while woe.is_alive(): + if not woe.progress: + status = dialog.Pulse(woe.state)[0] + time.sleep(0.06) + else: + status = dialog.Update(woe.progress, woe.state)[0] + + if not status: + if wx.MessageBox(_("Are you sure you want to cancel the installation?"), _("Cancel"), + wx.YES_NO | wx.ICON_QUESTION, self) == wx.NO: + dialog.Resume() + else: + woe.kill = True + break + dialog.Destroy() + + if woe.error == "": + wx.MessageBox(_("Installation succeeded!"), _("Installation"), wx.OK | wx.ICON_INFORMATION, self) + else: + wx.MessageBox(_("Installation failed!") + "\n" + str(woe.error), _("Installation"), wx.OK | wx.ICON_ERROR, + self) + + def on_show_all_drive(self, _): + self.refresh_list_content() + + +class DialogAbout(wx.Dialog): + __bitmapIcone = None + __staticTextTitre = None + __staticTextVersion = None + __NotebookAutorLicence = None + __MyPanelNoteBookAutors = None + __BtOk = None + + def __init__(self, parent, ID=wx.ID_ANY, title=_("About"), pos=wx.DefaultPosition, size=wx.Size(570, 590), + style=wx.DEFAULT_DIALOG_STYLE): + super(DialogAbout, self).__init__(parent, ID, title, pos, size, style) + + self.SetSizeHints(wx.DefaultSize, wx.DefaultSize) + + sizer_all = wx.BoxSizer(wx.VERTICAL) + sizer_img = wx.BoxSizer(wx.HORIZONTAL) + + img_file_name = "data/icon.png" + + img = wx.Image(img_file_name, wx.BITMAP_TYPE_PNG) + self.__bitmapIcone = wx.StaticBitmap(self, wx.ID_ANY, wx.Bitmap(img), wx.DefaultPosition, wx.Size(48, 48)) + sizer_img.Add(self.__bitmapIcone, 0, wx.ALL, 5) + + sizer_text = wx.BoxSizer(wx.VERTICAL) + + self.__staticTextTitre = wx.StaticText(self, wx.ID_ANY, PROG_FULL_NAME) + self.__staticTextTitre.SetFont(wx.Font(16, 74, 90, 92, False, "Sans")) + self.__staticTextTitre.SetForegroundColour(wx.Colour(0, 60, 118)) + sizer_text.Add(self.__staticTextTitre, 0, wx.EXPAND | wx.LEFT | wx.RIGHT | wx.TOP, 5) + + self.__staticTextVersion = wx.StaticText(self, wx.ID_ANY, VERSION) + self.__staticTextVersion.SetFont(wx.Font(10, 74, 90, 92, False, "Sans")) + self.__staticTextVersion.SetForegroundColour(wx.Colour(69, 141, 196)) + sizer_text.Add(self.__staticTextVersion, 0, wx.LEFT, 5) + sizer_img.Add(sizer_text, 0, 0, 5) + sizer_all.Add(sizer_img, 0, wx.EXPAND, 5) + + self.__NotebookAutorLicence = wx.Notebook(self, wx.ID_ANY) + + self.__NotebookAutorLicence.AddPage( + PanelNoteBookAutors(self.__NotebookAutorLicence, wx.ID_ANY, "slacka et al.", "data/woeusb-logo.png", + "github.com/slacka/WoeUSB"), "Authors", True) + self.__NotebookAutorLicence.AddPage( + PanelNoteBookAutors(self.__NotebookAutorLicence, wx.ID_ANY, "Colin GILLE / Congelli501", + "data/c501-logo.png", "www.congelli.eu"), "Original WinUSB Developer", False) + + licence_str = ''' + This file is part of WoeUSB. + + WoeUSB is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + WoeUSB 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 WoeUSB. If not, see . + ''' + + licence_txt = wx.TextCtrl(self.__NotebookAutorLicence, wx.ID_ANY, licence_str, wx.DefaultPosition, + wx.DefaultSize, wx.TE_MULTILINE | wx.TE_READONLY) + + self.__NotebookAutorLicence.AddPage(licence_txt, _("License")) + + sizer_all.Add(self.__NotebookAutorLicence, 1, wx.EXPAND | wx.ALL, 5) + + self.__BtOk = wx.Button(self, wx.ID_OK) + sizer_all.Add(self.__BtOk, 0, wx.ALIGN_RIGHT | wx.BOTTOM | wx.RIGHT, 5) + self.__BtOk.SetFocus() + + self.SetSizer(sizer_all) + self.Layout() + + +class PanelNoteBookAutors(wx.Panel): + def __init__(self, parent, ID=wx.ID_ANY, autherName="", imgName="", siteLink="", pos=wx.DefaultPosition, + size=wx.DefaultSize, style=wx.TAB_TRAVERSAL): + super(PanelNoteBookAutors, self).__init__(parent, ID, pos, size, style) + + sizer_note_book_autors = wx.BoxSizer(wx.VERTICAL) + + auteur_static_text = wx.StaticText(self, wx.ID_ANY, autherName) + sizer_note_book_autors.Add(auteur_static_text, 0, wx.ALL, 5) + + if siteLink != "": + autor_link = wx.adv.HyperlinkCtrl(self, wx.ID_ANY, siteLink, siteLink) + sizer_note_book_autors.Add(autor_link, 0, wx.LEFT | wx.BOTTOM, 5) + + if imgName != "": + # img_file_name = findFile(imgName) + img = wx.Image(imgName, wx.BITMAP_TYPE_PNG) + img_autor_logo = wx.StaticBitmap(self, wx.ID_ANY, wx.Bitmap(img)) + sizer_note_book_autors.Add(img_autor_logo, 0, wx.LEFT, 5) + + self.SetSizer(sizer_note_book_autors) + + +class WoeUSB(threading.Thread): + """ + Class for handling communication with woeusb. + """ + progress = False + state = "" + error = "" + kill = False + + def __init__(self, source, target, boot_flag, filesystem): + threading.Thread.__init__(self) + + core.gui = self + self.source = source + self.target = target + self.boot_flag = boot_flag + self.filesystem = filesystem + + def run(self): + source_fs_mountpoint, target_fs_mountpoint, temp_directory = core.init(from_cli=False, + install_mode="device", + source_media=self.source, + target_media=self.target)[:3] + try: + core.main(source_fs_mountpoint, target_fs_mountpoint, self.source, self.target, "device", temp_directory, + self.filesystem, self.boot_flag, ) + except SystemExit: + pass + + core.cleanup(source_fs_mountpoint, target_fs_mountpoint, temp_directory) + + +if __name__ == "__main__": + + if os.getuid() != 0: + for directory in dirs: + if os.path.isfile(directory.rstrip("/") + "/woeusbgui"): + subprocess.run(["pkexec", directory.rstrip("/") + "/woeusbgui"]) + exit(0) + + frameTitle = PROG_FULL_NAME + + frame = MainFrame(frameTitle, wx.DefaultPosition, wx.Size(400, 600)) + frame.SetMinSize(wx.Size(300, 450)) + + frame.Show(True) + app.MainLoop() diff --git a/src/workaround.py b/src/workaround.py new file mode 100644 index 0000000..896c8d5 --- /dev/null +++ b/src/workaround.py @@ -0,0 +1,145 @@ +#!/usr/bin/env python + +""" +This file is part of WoeUSB. + +WoeUSB is free software: you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation, either version 3 of the License, or +(at your option) any later version. + +WoeUSB 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 WoeUSB. If not, see . +""" + +import os +import subprocess +import time + +import utils + + +def make_system_realize_partition_table_changed(target_device): + """ + :param target_device: + :return: + """ + utils.print_with_color("Making system realize that partition table has changed...") + + subprocess.run(["blockdev", "--rereadpt", target_device]) + utils.print_with_color("Wait 3 seconds for block device nodes to populate...") + + time.sleep(3) + + +def buggy_motherboards_that_ignore_disks_without_boot_flag_toggled(target_device): + """ + Some buggy BIOSes won't put detected device with valid MBR but no partitions with boot flag toggled into the boot menu, workaround this by setting the first partition's boot flag(which partition doesn't matter as GNU GRUB doesn't depend on it anyway + + :param target_device: + :return: + """ + utils.print_with_color( + "Applying workaround for buggy motherboards that will ignore disks with no partitions with the boot flag toggled") + + subprocess.run(["parted", "--script", + target_device, + "set", "1", "boot", "on"]) + + +def support_windows_7_uefi_boot(source_fs_mountpoint, target_fs_mountpoint): + """ + As Windows 7's installation media doesn't place the required EFI + bootloaders in the right location, we extract them from the + system image manually + + :TODO: Functionize Windows 7 checking + + :param source_fs_mountpoint: + :param target_fs_mountpoint: + :return: + """ + grep = subprocess.run(["grep", "--extended-regexp", "--quiet", "^MinServer=7[0-9]{3}\.[0-9]", + source_fs_mountpoint + "/sources/cversion.ini"], + stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + if grep == "" and not os.path.isfile(source_fs_mountpoint + "/bootmgr.efi"): + return 0 + + utils.print_with_color( + "Source media seems to be Windows 7-based with EFI support, applying workaround to make it support UEFI booting", + "yellow") + + test_efi_directory = subprocess.run(["find", target_fs_mountpoint, "-ipath", target_fs_mountpoint + "/efi"], + stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + + if test_efi_directory == "": + efi_directory = target_fs_mountpoint + "/efi" + if utils.verbose: + print("DEBUG: Can't find efi directory, use " + efi_directory) + else: + efi_directory = test_efi_directory + if utils.verbose: + print("DEBUG: " + efi_directory + " detected.") + + test_efi_boot_directory = subprocess.run(["find", target_fs_mountpoint, "-ipath", target_fs_mountpoint + "/boot"], + stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + + if test_efi_boot_directory == "": + efi_boot_directory = target_fs_mountpoint + "/boot" + if utils.verbose: + print("DEBUG: Can't find efi/boot directory, use " + efi_boot_directory) + else: + efi_boot_directory = test_efi_boot_directory + if utils.verbose: + print("DEBUG: " + efi_boot_directory + " detected.") + + # If there's already an EFI bootloader existed, skip the workaround + test_efi_bootloader = subprocess.run( + ["find", target_fs_mountpoint, "-ipath", target_fs_mountpoint + "/efi/boot/boot*.efi"], + stdout=subprocess.PIPE).stdout.decode("utf-8").strip() + + if test_efi_bootloader != "": + print("INFO: Detected existing EFI bootloader, workaround skipped.") + return 0 + + os.makedirs(efi_boot_directory, exist_ok=True) + + bootloader = subprocess.run(["7z", + "e", + "-so", + source_fs_mountpoint + "/sources/install.wim", + "Windows/Boot/EFI/bootmgfw.efi"], stdout=subprocess.PIPE).stdout + + with open(efi_boot_directory + "/bootx64.efi", "wb") as target_bootloader: + target_bootloader.write(bootloader) + + +def linux_make_writeback_buffering_not_suck(mode): + """ + :param mode: True - enable; False - disable + """ + if mode: + utils.print_with_color( + "Applying workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.", + "yellow") + + vm_dirty_background_bytes = str(16 * 1024 * 1024) # 16MiB + vm_dirty_bytes = str(48 * 1024 * 1024) # 48MiB + else: + utils.print_with_color( + "Resetting workaround to prevent 64-bit systems with big primary memory from being unresponsive during copying files.", + "yellow") + + vm_dirty_background_bytes = "0" + vm_dirty_bytes = "0" + + with open("/proc/sys/vm/dirty_background_bytes", "w") as dirty_background_bytes: + dirty_background_bytes.write(vm_dirty_background_bytes) + + with open("/proc/sys/vm/dirty_bytes", "w") as dirty_bytes: + dirty_bytes.write(vm_dirty_bytes)