master
Jean-Christian Paul Denis 2021-08-18 21:42:30 +02:00
commit 58dee1a55a
22 changed files with 5478 additions and 0 deletions

339
LICENSE 100644
View File

@ -0,0 +1,339 @@
GNU GENERAL PUBLIC LICENSE
Version 2, June 1991
Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
Everyone is permitted to copy and distribute verbatim copies
of this license document, but changing it is not allowed.
Preamble
The licenses for most software are designed to take away your
freedom to share and change it. By contrast, the GNU General Public
License is intended to guarantee your freedom to share and change free
software--to make sure the software is free for all its users. This
General Public License applies to most of the Free Software
Foundation's software and to any other program whose authors commit to
using it. (Some other Free Software Foundation software is covered by
the GNU Lesser General Public License instead.) You can apply it to
your programs, too.
When we speak of free software, we are referring to freedom, not
price. Our General Public Licenses are designed to make sure that you
have the freedom to distribute copies of free software (and charge for
this service if you wish), that you receive source code or can get it
if you want it, that you can change the software or use pieces of it
in new free programs; and that you know you can do these things.
To protect your rights, we need to make restrictions that forbid
anyone to deny you these rights or to ask you to surrender the rights.
These restrictions translate to certain responsibilities for you if you
distribute copies of the software, or if you modify it.
For example, if you distribute copies of such a program, whether
gratis or for a fee, you must give the recipients all the rights that
you have. You must make sure that they, too, receive or can get the
source code. And you must show them these terms so they know their
rights.
We protect your rights with two steps: (1) copyright the software, and
(2) offer you this license which gives you legal permission to copy,
distribute and/or modify the software.
Also, for each author's protection and ours, we want to make certain
that everyone understands that there is no warranty for this free
software. If the software is modified by someone else and passed on, we
want its recipients to know that what they have is not the original, so
that any problems introduced by others will not reflect on the original
authors' reputations.
Finally, any free program is threatened constantly by software
patents. We wish to avoid the danger that redistributors of a free
program will individually obtain patent licenses, in effect making the
program proprietary. To prevent this, we have made it clear that any
patent must be licensed for everyone's free use or not licensed at all.
The precise terms and conditions for copying, distribution and
modification follow.
GNU GENERAL PUBLIC LICENSE
TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
0. This License applies to any program or other work which contains
a notice placed by the copyright holder saying it may be distributed
under the terms of this General Public License. The "Program", below,
refers to any such program or work, and a "work based on the Program"
means either the Program or any derivative work under copyright law:
that is to say, a work containing the Program or a portion of it,
either verbatim or with modifications and/or translated into another
language. (Hereinafter, translation is included without limitation in
the term "modification".) Each licensee is addressed as "you".
Activities other than copying, distribution and modification are not
covered by this License; they are outside its scope. The act of
running the Program is not restricted, and the output from the Program
is covered only if its contents constitute a work based on the
Program (independent of having been made by running the Program).
Whether that is true depends on what the Program does.
1. You may copy and distribute verbatim copies of the Program's
source code as you receive it, in any medium, provided that you
conspicuously and appropriately publish on each copy an appropriate
copyright notice and disclaimer of warranty; keep intact all the
notices that refer to this License and to the absence of any warranty;
and give any other recipients of the Program a copy of this License
along with the Program.
You may charge a fee for the physical act of transferring a copy, and
you may at your option offer warranty protection in exchange for a fee.
2. You may modify your copy or copies of the Program or any portion
of it, thus forming a work based on the Program, and copy and
distribute such modifications or work under the terms of Section 1
above, provided that you also meet all of these conditions:
a) You must cause the modified files to carry prominent notices
stating that you changed the files and the date of any change.
b) You must cause any work that you distribute or publish, that in
whole or in part contains or is derived from the Program or any
part thereof, to be licensed as a whole at no charge to all third
parties under the terms of this License.
c) If the modified program normally reads commands interactively
when run, you must cause it, when started running for such
interactive use in the most ordinary way, to print or display an
announcement including an appropriate copyright notice and a
notice that there is no warranty (or else, saying that you provide
a warranty) and that users may redistribute the program under
these conditions, and telling the user how to view a copy of this
License. (Exception: if the Program itself is interactive but
does not normally print such an announcement, your work based on
the Program is not required to print an announcement.)
These requirements apply to the modified work as a whole. If
identifiable sections of that work are not derived from the Program,
and can be reasonably considered independent and separate works in
themselves, then this License, and its terms, do not apply to those
sections when you distribute them as separate works. But when you
distribute the same sections as part of a whole which is a work based
on the Program, the distribution of the whole must be on the terms of
this License, whose permissions for other licensees extend to the
entire whole, and thus to each and every part regardless of who wrote it.
Thus, it is not the intent of this section to claim rights or contest
your rights to work written entirely by you; rather, the intent is to
exercise the right to control the distribution of derivative or
collective works based on the Program.
In addition, mere aggregation of another work not based on the Program
with the Program (or with a work based on the Program) on a volume of
a storage or distribution medium does not bring the other work under
the scope of this License.
3. You may copy and distribute the Program (or a work based on it,
under Section 2) in object code or executable form under the terms of
Sections 1 and 2 above provided that you also do one of the following:
a) Accompany it with the complete corresponding machine-readable
source code, which must be distributed under the terms of Sections
1 and 2 above on a medium customarily used for software interchange; or,
b) Accompany it with a written offer, valid for at least three
years, to give any third party, for a charge no more than your
cost of physically performing source distribution, a complete
machine-readable copy of the corresponding source code, to be
distributed under the terms of Sections 1 and 2 above on a medium
customarily used for software interchange; or,
c) Accompany it with the information you received as to the offer
to distribute corresponding source code. (This alternative is
allowed only for noncommercial distribution and only if you
received the program in object code or executable form with such
an offer, in accord with Subsection b above.)
The source code for a work means the preferred form of the work for
making modifications to it. For an executable work, complete source
code means all the source code for all modules it contains, plus any
associated interface definition files, plus the scripts used to
control compilation and installation of the executable. However, as a
special exception, the source code distributed need not include
anything that is normally distributed (in either source or binary
form) with the major components (compiler, kernel, and so on) of the
operating system on which the executable runs, unless that component
itself accompanies the executable.
If distribution of executable or object code is made by offering
access to copy from a designated place, then offering equivalent
access to copy the source code from the same place counts as
distribution of the source code, even though third parties are not
compelled to copy the source along with the object code.
4. You may not copy, modify, sublicense, or distribute the Program
except as expressly provided under this License. Any attempt
otherwise to copy, modify, sublicense or distribute the Program is
void, and will automatically terminate your rights under this License.
However, parties who have received copies, or rights, from you under
this License will not have their licenses terminated so long as such
parties remain in full compliance.
5. You are not required to accept this License, since you have not
signed it. However, nothing else grants you permission to modify or
distribute the Program or its derivative works. These actions are
prohibited by law if you do not accept this License. Therefore, by
modifying or distributing the Program (or any work based on the
Program), you indicate your acceptance of this License to do so, and
all its terms and conditions for copying, distributing or modifying
the Program or works based on it.
6. Each time you redistribute the Program (or any work based on the
Program), the recipient automatically receives a license from the
original licensor to copy, distribute or modify the Program subject to
these terms and conditions. You may not impose any further
restrictions on the recipients' exercise of the rights granted herein.
You are not responsible for enforcing compliance by third parties to
this License.
7. If, as a consequence of a court judgment or allegation of patent
infringement or for any other reason (not limited to patent issues),
conditions are imposed on you (whether by court order, agreement or
otherwise) that contradict the conditions of this License, they do not
excuse you from the conditions of this License. If you cannot
distribute so as to satisfy simultaneously your obligations under this
License and any other pertinent obligations, then as a consequence you
may not distribute the Program at all. For example, if a patent
license would not permit royalty-free redistribution of the Program by
all those who receive copies directly or indirectly through you, then
the only way you could satisfy both it and this License would be to
refrain entirely from distribution of the Program.
If any portion of this section is held invalid or unenforceable under
any particular circumstance, the balance of the section is intended to
apply and the section as a whole is intended to apply in other
circumstances.
It is not the purpose of this section to induce you to infringe any
patents or other property right claims or to contest validity of any
such claims; this section has the sole purpose of protecting the
integrity of the free software distribution system, which is
implemented by public license practices. Many people have made
generous contributions to the wide range of software distributed
through that system in reliance on consistent application of that
system; it is up to the author/donor to decide if he or she is willing
to distribute software through any other system and a licensee cannot
impose that choice.
This section is intended to make thoroughly clear what is believed to
be a consequence of the rest of this License.
8. If the distribution and/or use of the Program is restricted in
certain countries either by patents or by copyrighted interfaces, the
original copyright holder who places the Program under this License
may add an explicit geographical distribution limitation excluding
those countries, so that distribution is permitted only in or among
countries not thus excluded. In such case, this License incorporates
the limitation as if written in the body of this License.
9. The Free Software Foundation may publish revised and/or new versions
of the General Public License from time to time. Such new versions will
be similar in spirit to the present version, but may differ in detail to
address new problems or concerns.
Each version is given a distinguishing version number. If the Program
specifies a version number of this License which applies to it and "any
later version", you have the option of following the terms and conditions
either of that version or of any later version published by the Free
Software Foundation. If the Program does not specify a version number of
this License, you may choose any version ever published by the Free Software
Foundation.
10. If you wish to incorporate parts of the Program into other free
programs whose distribution conditions are different, write to the author
to ask for permission. For software which is copyrighted by the Free
Software Foundation, write to the Free Software Foundation; we sometimes
make exceptions for this. Our decision will be guided by the two goals
of preserving the free status of all derivatives of our free software and
of promoting the sharing and reuse of software generally.
NO WARRANTY
11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
REPAIR OR CORRECTION.
12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
POSSIBILITY OF SUCH DAMAGES.
END OF TERMS AND CONDITIONS
How to Apply These Terms to Your New Programs
If you develop a new program, and you want it to be of the greatest
possible use to the public, the best way to achieve this is to make it
free software which everyone can redistribute and change under these terms.
To do so, attach the following notices to the program. It is safest
to attach them to the start of each source file to most effectively
convey the exclusion of warranty; and each file should have at least
the "copyright" line and a pointer to where the full notice is found.
<one line to give the program's name and a brief idea of what it does.>
Copyright (C) <year> <name of author>
This program is free software; you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation; either version 2 of the License, or
(at your option) any later version.
This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
GNU General Public License for more details.
You should have received a copy of the GNU General Public License along
with this program; if not, write to the Free Software Foundation, Inc.,
51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
Also add information on how to contact you by electronic and paper mail.
If the program is interactive, make it output a short notice like this
when it starts in an interactive mode:
Gnomovision version 69, Copyright (C) year name of author
Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
This is free software, and you are welcome to redistribute it
under certain conditions; type `show c' for details.
The hypothetical commands `show w' and `show c' should show the appropriate
parts of the General Public License. Of course, the commands you use may
be called something other than `show w' and `show c'; they could even be
mouse-clicks or menu items--whatever suits your program.
You should also get your employer (if you work as a programmer) or your
school, if any, to sign a "copyright disclaimer" for the program, if
necessary. Here is a sample; alter the names:
Yoyodyne, Inc., hereby disclaims all copyright interest in the program
`Gnomovision' (which makes passes at compilers) written by James Hacker.
<signature of Ty Coon>, 1 April 1989
Ty Coon, President of Vice
This General Public License does not permit incorporating your program into
proprietary programs. If your program is a subroutine library, you 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.

107
_admin.php 100644
View File

@ -0,0 +1,107 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')){return;}
$core->blog->settings->addNamespace('translater');
$core->addBehavior('pluginsToolsTabs',array('translaterAdminBehaviors','pluginsToolsTabs'));
$core->addBehavior('adminCurrentThemeDetails',array('translaterAdminBehaviors','adminCurrentThemeDetails'));
$core->addBehavior('addTranslaterProposalTool',array('translaterAdminBehaviors','addGoogleProposalTool'));
$core->addBehavior('addTranslaterProposalTool',array('translaterAdminBehaviors','addYahooProposalTool'));
$core->addBehavior('addTranslaterProposalTool',array('translaterAdminBehaviors','addMicrosoftProposalTool'));
$core->rest->addFunction('getProposal',array('translaterRest','getProposal'));
$_menu['Plugins']->addItem(
__('Translater'),
'plugin.php?p=translater',
'index.php?pf=translater/icon.png',
preg_match('/plugin.php\?p=translater(&.*)?$/',$_SERVER['REQUEST_URI']),
$core->auth->isSuperAdmin()
);
class translaterAdminBehaviors
{
# Plugins tab
public static function pluginsToolsTabs($core)
{
if (!$core->blog->settings->translater->translater_plugin_menu || !$core->auth->isSuperAdmin()) {
return;
}
echo
'<div class="multi-part" id="translater" title="'.
__('Translate extensions').
'">'.
'<table class="clear"><tr>'.
'<th>&nbsp;</th>'.
'<th>'.__('Name').'</th>'.
'<th class="nowrap">'.__('Version').'</th>'.
'<th class="nowrap">'.__('Details').'</th>'.
'<th class="nowrap">'.__('Author').'</th>'.
'</tr>';
$modules = $core->plugins->getModules();
foreach ($modules as $name => $plugin)
{
echo
'<tr class="line">'.
'<td class="nowrap">'.
'<a href="plugin.php?p=translater&amp;part=module&amp;type=plugin&amp;module='.$name.'"'.
' title="'.__('Translate this plugin').'">'.__($plugin['name']).'</a></td>'.
'<td class="nowrap">'.$name.'</td>'.
'<td class="nowrap">'.$plugin['version'].'</td>'.
'<td class="maximal">'.$plugin['desc'].'</td>'.
'<td class="nowrap">'.$plugin['author'].'</td>'.
'</tr>';
}
echo '</table></div>';
}
# Themes menu
public static function adminCurrentThemeDetails($core,$id,$infos)
{
if (!$core->blog->settings->translater->translater_theme_menu || !$core->auth->isSuperAdmin()) {
return;
}
$root = path::real($infos['root']);
if ($id != 'default' && is_dir($root.'/locales'))
{
return
'<p><a href="plugin.php?p=translater&amp;part=module&amp;type=theme&amp;module='.$id.'"'.
' class="button">'.__('Translate this theme').'</a></p>';
}
}
# Google Translater tools
public static function addGoogleProposalTool($proposal)
{
$proposal->addTool('googleProposalTool');
}
# Yahoo Babelfish tools
public static function addYahooProposalTool($proposal)
{
$proposal->addTool('yahooProposalTool');
}
# Microsoft Bing tools
public static function addMicrosoftProposalTool($proposal)
{
$proposal->addTool('microsoftProposalTool');
}
}
?>

24
_define.php 100644
View File

@ -0,0 +1,24 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')){return;}
$this->registerModule(
/* Name */ "translater",
/* Description*/ "Translate your Dotclear plugins and themes",
/* Author */ "JC Denis",
/* Version */ '2013.05.11',
/* Permissions */ null
);
?>

59
_install.php 100644
View File

@ -0,0 +1,59 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')){return;}
$rdc_version = '2.5-alpha';
$new_version = $core->plugins->moduleInfo('translater','version');
$old_version = $core->getVersion('translater');
if (version_compare($old_version,$new_version,'>=')) return;
try
{
if (version_compare(str_replace("-r","-p",DC_VERSION),$rdc_version,'<')) {
throw new Exception(sprintf('%s requires Dotclear %s','translater',$rdc_version));
}
$core->blog->settings->addNamespace('translater');
$core->blog->settings->translater->put('translater_plugin_menu',0,'boolean','Put a link in plugins page',false,true);
$core->blog->settings->translater->put('translater_theme_menu',0,'boolean','Put a link in themes page',false,true);
$core->blog->settings->translater->put('translater_backup_auto',1,'boolean','Make a backup of languages old files when there are modified',false,true);
$core->blog->settings->translater->put('translater_backup_limit',20,'string','Maximum backups per module',false,true);
$core->blog->settings->translater->put('translater_backup_folder','module','string','In which folder to store backups',false,true);
$core->blog->settings->translater->put('translater_start_page','setting,','string','Page to start on',false,true);
$core->blog->settings->translater->put('translater_write_po',1,'boolean','Write .po languages files',false,true);
$core->blog->settings->translater->put('translater_write_langphp',1,'boolean','Write .lang.php languages files',false,true);
$core->blog->settings->translater->put('translater_scan_tpl',0,'boolean','Translate strings of templates files',false,true);
$core->blog->settings->translater->put('translater_parse_nodc',1,'boolean','Translate only untranslated strings of Dotclear',false,true);
$core->blog->settings->translater->put('translater_hide_default',1,'boolean','Hide default modules of Dotclear',false,true);
$core->blog->settings->translater->put('translater_parse_comment',1,'boolean','Write comments and strings informations in lang files',false,true);
$core->blog->settings->translater->put('translater_parse_user',1,'boolean','Write inforamtions about author in lang files',false,true);
$core->blog->settings->translater->put('translater_parse_userinfo','displayname, email','string','Type of informations about user to write',false,true);
$core->blog->settings->translater->put('translater_import_overwrite',0,'boolean','Overwrite existing languages when import packages',false,true);
$core->blog->settings->translater->put('translater_export_filename','type-module-l10n-timestamp','string','Name of files of exported package',false,true);
$core->blog->settings->translater->put('translater_proposal_tool','google','string','Id of default tool for proposed translation',false,true);
$core->blog->settings->translater->put('translater_proposal_lang','en','string','Default source language for proposed translation',false,true);
$core->setVersion('translater',$new_version);
return true;
}
catch (Exception $e)
{
$core->error->add($e->getMessage());
}
return false;
?>

26
_prepend.php 100644
View File

@ -0,0 +1,26 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')){return;}
global $__autoload;
$__autoload['dcTranslater'] = dirname(__FILE__).'/inc/class.dc.translater.php';
$__autoload['translaterRest'] = dirname(__FILE__).'/inc/class.translater.rest.php';
$__autoload['translaterProposals'] = dirname(__FILE__).'/inc/class.translater.proposals.php';
$__autoload['translaterProposalTool'] = dirname(__FILE__).'/inc/lib.translater.proposal.php';
$__autoload['googleProposalTool'] = dirname(__FILE__).'/inc/lib.translater.google.php';
$__autoload['microsoftProposalTool'] = dirname(__FILE__).'/inc/lib.translater.microsoft.php';
?>

59
_uninstall.php 100644
View File

@ -0,0 +1,59 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')){return;}
$this->addUserAction(
/* type */ 'settings',
/* action */ 'delete_all',
/* ns */ 'translater',
/* description */ __('delete all settings')
);
$this->addUserAction(
/* type */ 'plugins',
/* action */ 'delete',
/* ns */ 'translater',
/* description */ __('delete plugin files')
);
$this->addUserAction(
/* type */ 'versions',
/* action */ 'delete',
/* ns */ 'translater',
/* description */ __('delete the version number')
);
$this->addDirectAction(
/* type */ 'settings',
/* action */ 'delete_all',
/* ns */ 'translater',
/* description */ sprintf(__('delete all %s settings'),'translater')
);
$this->addDirectAction(
/* type */ 'plugins',
/* action */ 'delete',
/* ns */ 'translater',
/* description */ sprintf(__('delete %s plugin files'),'translater')
);
$this->addDirectAction(
/* type */ 'versions',
/* action */ 'delete',
/* ns */ 'translater',
/* description */ sprintf(__('delete %s version number'),'translater')
);
?>

BIN
icon.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 691 B

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,64 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
/**
* Translater proposal tools container.
*/
class translaterProposals
{
public $core;
private $stack = array();
public function __construct($core)
{
$this->core = $core;
# --BEHAVIOR-- addTranslaterProposalTool
$core->callBehavior('addTranslaterProposalTool',$this);
}
public function addTool($id)
{
if (!class_exists($id)) {
return;
}
$r = new ReflectionClass($id);
$p = $r->getParentClass();
if (!$p || $p->name != 'translaterProposalTool') {
return;
}
$this->stack[$id] = new $id($this->core);
}
public function getTools()
{
return $this->stack;
}
public function getTool($id)
{
return array_key_exists($id,$this->stack) ? $this->stack[$id] : null;
}
public function hasTool($id)
{
return array_key_exists($id,$this->stack);
}
}
?>

View File

@ -0,0 +1,76 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')){return;}
/**
* Translater REST service.
*
* Admin service de retrieve translation of a string
* Queries come from translater jquery tools
*/
class translaterRest
{
public static function getProposal($core,$get)
{
$from = !empty($get['langFrom']) ? trim($get['langFrom']) : '';
$to = !empty($get['langTo']) ? trim($get['langTo']) : '';
$tool = !empty($get['langTool']) ? trim($get['langTool']) : '';
$str_in = !empty($get['langStr']) ? trim($get['langStr']) : '';
$str_in = text::toUTF8($str_in);
$str_in = trim($str_in);
$str_out = '';
$rsp = new xmlTag();
try
{
if (empty($from) || empty($to) || empty($tool))
{
throw new Exception(__('Missing params'));
}
$translater = new dcTranslater($core);
if (!empty($str_in))
{
if (!$translater->proposal->hasTool($tool))
{
throw new Exception(__('Failed to get translation tool'));
}
if (!$translater->proposal->getTool($tool)->isActive())
{
throw new Exception(__('Translation tool is not configured'));
}
$str_out = (string) $translater->proposal->getTool($tool)->translate($str_in,$from,$to);
}
$x = new xmlTag('proposal');
$x->lang_from = $from;
$x->lang_to = $to;
$x->tool = $tool;
$x->str_from = $str_in;
$x->str_to = text::toUTF8(html::decodeEntities($str_out));
$rsp->insertNode($x);
}
catch (Exception $e)
{
$core->error->add($e->getMessage());
}
return $rsp;
}
}
?>

BIN
inc/img/field.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 321 B

BIN
inc/img/toggle.png 100644

Binary file not shown.

After

Width:  |  Height:  |  Size: 209 B

View File

@ -0,0 +1,97 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')){return;}
/**
* Google proposal tool.
*
* This uses google API v2 to translate strings
*/
class googleProposalTool extends translaterProposalTool
{
private $api = 'https://www.googleapis.com/language/translate/v2';
private $agent = 'dcTranslater - http://jcd.lv/?q=translater';
private $key = null; //ex: AsSDqsGsfdSDSQFQsfedj9bnzY390aIg-1d
protected function setup()
{
$this->key = $this->core->blog->settings->translater->translater_google_proposal_key;
$this->setName(__('Google'));
$this->setDesc(__('Google Translation Tool API'));
$this->setActive(!empty($this->key));
}
public function form()
{
return
'<p><label class="classic" for="translater_google_proposal_key">'.
__('API Console Single Access Key').'<br />'.
form::field('translater_google_proposal_key',65,255,$this->key).
'</label></p>'.
'<p>'.__('You must have on Google API console:').'</p>'.
'<ul>'.
'<li><a href="https://code.google.com/apis/console/#access">'.__('A single access API key').'</a></li>'.
'<li><a href="https://code.google.com/apis/console/#services">'.__('Activate the "translate API" service').'</a></li>'.
'</ul>';
}
public function save()
{
$key = empty($_POST['translater_google_proposal_key']) ?
'' : $_POST['translater_google_proposal_key'];
$this->core->blog->settings->translater->put('translater_google_proposal_key',$key,'string','',true,true);
}
public function translate($str,$from,$to)
{
try
{
$data = array(
'key' => $this->key,
'q' => $str,
'source' => $from,
'target' => $to
);
$path = '';
$client = netHttp::initClient($this->api,$path);
$client->setUserAgent($this->agent);
$client->useGzip(false);
$client->setPersistReferers(false);
$client->get($path,$data);
$rs = $client->getContent();
if ($client->getStatus() != 200) {
throw new Exception(__('Failed to query service.'));
}
if (null === ($dec = json_decode($rs))) {
throw new Exception('Failed to decode result');
}
if ('' == @$dec->data->translations[0]->translatedText) {
throw new Exception('No data response');
}
return $dec->data->translations[0]->translatedText;
}
catch (Exception $e) {}
return '';
}
}
?>

View File

@ -0,0 +1,225 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_CONTEXT_ADMIN')){return;}
/**
* Microsoft proposal tool.
*
* This uses Microsoft API to translate strings
*/
class microsoftProposalTool extends translaterProposalTool
{
private $client = null; //ex: b6057813-234b-4154-b324-6342c27f608f
private $secret = null; //ex: DsdDScn/+xdSFF1GDxdx1wbkKPphAfAVSH5VXDBVDI=
protected function setup()
{
$this->setActive(false);
$this->client = $this->core->blog->settings->translater->translater_microsoft_proposal_client;
$this->secret = $this->core->blog->settings->translater->translater_microsoft_proposal_secret;
$this->setName(__('Bing'));
$this->setDesc(__('Microsoft Bing translation tool'));
$this->setActive(!empty($this->client) && !empty($this->secret));
}
public function form()
{
return
'<p><label class="classic" for="translater_microsoft_proposal_client">'.
__('Application client ID').'<br />'.
form::field('translater_microsoft_proposal_client',65,255,$this->client).
'</label></p>'.
'<p><label class="classic" for="translater_microsoft_proposal_secret">'.
__('Application client Secret').'<br />'.
form::field('translater_microsoft_proposal_secret',65,255,$this->secret).
'</label></p>'.
'<p>'.__('You must have:').'</p>'.
'<ul>'.
'<li><a href="https://datamarket.azure.com/account">'.__('A Microsoft Windows Azure account').'</a></li>'.
'<li><a href="https://datamarket.azure.com/dataset/bing/microsofttranslator">'.__('A valid subscription to Microsoft Translator').'</a></li>'.
'<li><a href="https://datamarket.azure.com/developer/applications/">'.__('And register an application').'</a></li>'.
'</ul>';
}
public function save()
{
$client = empty($_POST['translater_microsoft_proposal_client']) ?
'' : $_POST['translater_microsoft_proposal_client'];
$secret = empty($_POST['translater_microsoft_proposal_secret']) ?
'' : $_POST['translater_microsoft_proposal_secret'];
$this->core->blog->settings->translater->put('translater_microsoft_proposal_client',$client,'string','',true,true);
$this->core->blog->settings->translater->put('translater_microsoft_proposal_secret',$secret,'string','',true,true);
}
public function translate($str,$from,$to)
{
try {
return $this->doYourFuckingJob($this->client,$this->secret,$str,$from,$to);
}
catch (Exception $e) {}
return '';
}
//
// Microsoft fucking oAuth
//
private function doYourFuckingJob($client,$secret,$str,$from,$to)
{
try {
//Client ID of the application.
$clientID = $client;
//Client Secret key of the application.
$clientSecret = $secret;
//OAuth Url.
$authUrl = "https://datamarket.accesscontrol.windows.net/v2/OAuth2-13/";
//Application Scope Url
$scopeUrl = "http://api.microsofttranslator.com";
//Application grant type
$grantType = "client_credentials";
//Get the Access token.
$accessToken = $this->getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl);
//Create the authorization Header string.
$authHeader = "Authorization: Bearer ". $accessToken;
//Set the params.//
$fromLanguage = $from;
$toLanguage = $to;
$inputStr = $str;
$contentType = 'text/plain';
$category = 'general';
$params = "text=".urlencode($inputStr)."&to=".$toLanguage."&from=".$fromLanguage;
$translateUrl = "http://api.microsofttranslator.com/v2/Http.svc/Translate?$params";
//Get the curlResponse.
$curlResponse = $this->curlRequest($translateUrl, $authHeader);
//Interprets a string of XML into an object.
$xmlObj = simplexml_load_string($curlResponse);
foreach((array)$xmlObj[0] as $val){
$translatedStr = $val;
}
return (string) $translatedStr;
/*
echo "<table border=2px>";
echo "<tr>";
echo "<td><b>From $fromLanguage</b></td><td><b>To $toLanguage</b></td>";
echo "</tr>";
echo "<tr><td>".$inputStr."</td><td>".$translatedStr."</td></tr>";
echo "</table>";
*/
} catch (Exception $e) {
throw $e;
}
}
/*
* Get the access token.
*
* @param string $grantType Grant type.
* @param string $scopeUrl Application Scope URL.
* @param string $clientID Application client ID.
* @param string $clientSecret Application client ID.
* @param string $authUrl Oauth Url.
*
* @return string.
*/
private function getTokens($grantType, $scopeUrl, $clientID, $clientSecret, $authUrl)
{
try {
//Initialize the Curl Session.
$ch = curl_init();
//Create the request Array.
$paramArr = array (
'grant_type' => $grantType,
'scope' => $scopeUrl,
'client_id' => $clientID,
'client_secret' => $clientSecret
);
//Create an Http Query.//
$paramArr = http_build_query($paramArr);
//Set the Curl URL.
curl_setopt($ch, CURLOPT_URL, $authUrl);
//Set HTTP POST Request.
curl_setopt($ch, CURLOPT_POST, TRUE);
//Set data to POST in HTTP "POST" Operation.
curl_setopt($ch, CURLOPT_POSTFIELDS, $paramArr);
//CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec().
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate.
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
//Execute the cURL session.
$strResponse = curl_exec($ch);
//Get the Error Code returned by Curl.
$curlErrno = curl_errno($ch);
if($curlErrno){
$curlError = curl_error($ch);
curl_close($ch);
throw new Exception($curlError);
}
//Close the Curl Session.
curl_close($ch);
//Decode the returned JSON string.
$objResponse = json_decode($strResponse);
if (@$objResponse->error){
throw new Exception($objResponse->error_description);
}
return $objResponse->access_token;
} catch (Exception $e) {
throw $e;
}
}
/*
* Create and execute the HTTP CURL request.
*
* @param string $url HTTP Url.
* @param string $authHeader Authorization Header string.
* @param string $postData Data to post.
*
* @return string.
*
*/
private function curlRequest($url, $authHeader) {
//Initialize the Curl Session.
$ch = curl_init();
//Set the Curl url.
curl_setopt ($ch, CURLOPT_URL, $url);
//Set the HTTP HEADER Fields.
curl_setopt ($ch, CURLOPT_HTTPHEADER, array($authHeader,"Content-Type: text/xml"));
//CURLOPT_RETURNTRANSFER- TRUE to return the transfer as a string of the return value of curl_exec().
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
//CURLOPT_SSL_VERIFYPEER- Set FALSE to stop cURL from verifying the peer's certificate.
curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, False);
//Execute the cURL session.
$curlResponse = curl_exec($ch);
//Get the Error Code returned by Curl.
$curlErrno = curl_errno($ch);
if ($curlErrno) {
$curlError = curl_error($ch);
curl_close($ch);
throw new Exception($curlError);
}
//Close a cURL session.
curl_close($ch);
return $curlResponse;
}
}
?>

View File

@ -0,0 +1,125 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
#
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009-2013 Jean-Christian Denis and contributors
# contact@jcdenis.fr
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
#
# -- END LICENSE BLOCK ------------------------------------
/**
* Translater proposal tool.
*
* Generic class to provide translation tool
*/
abstract class translaterProposalTool
{
public $core;
private $active = false;
private $name = 'unknow';
private $desc = 'no description';
/**
Constructor
*/
final public function __construct($core)
{
$this->core = $core;
$this->setup();
}
/**
Set name of this tool
@param string Tool's name
*/
final protected function setName($name)
{
$this->name = (string) $name;
}
/**
Get name of this tool
@return string Tool's name
*/
final public function getName()
{
return $this->name;
}
/**
Set description of this tool
@param string Tool's description
*/
final protected function setDesc($desc)
{
$this->desc = (string) $desc;
}
/**
Get description of this tool
@return string Tool's description
*/
final public function getDesc()
{
return $this->desc;
}
/**
Set tool as (un)active
@param boolean $active True to set it as active
*/
final protected function setActive($active)
{
$this->active = (boolean) $active;
}
/**
Check if this tool is active
@return boolean True if it is active
*/
final public function isActive()
{
return $this->active;
}
/**
Set tool's info - using setName(),setDesc(),setActive()
*/
abstract protected function setup();
/**
Get configuration interface
@return Form field
*/
abstract public function form();
/**
Save configuration
*/
abstract public function save();
/**
Translate a string from a language to another
@param string $str Trimed UTF-8 string to translate
@param string $from Source language code
@param string to Destination language code
@return Translated string
*/
abstract public function translate($str,$from,$to);
}
?>

1386
index.php 100644

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,91 @@
/* -- BEGIN LICENSE BLOCK ----------------------------------
*
* This file is part of translater, a plugin for Dotclear 2.
*
* Copyright (c) 2009-2013 Jean-Christian Denis and contributors
* contact@jcdenis.fr
*
* Licensed under the GPL version 2.0 license.
* A copy of this license is available in LICENSE file or at
* http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
*
* -- END LICENSE BLOCK ------------------------------------*/
;if(window.jQuery) (function($){
$.fn.translater = function(options){
var opts = $.extend({}, $.fn.translater.defaults, options);
return this.each(function(){
var img = '<img src="index.php?pf=translater/inc/img/field.png" alt="" />';
var tog = '<img src="index.php?pf=translater/inc/img/toggle.png" alt="" />';
var line = this;
var msgid = $(line).children('.translatermsgid');
var msgfile = $(line).children('.translatermsgfile');
var msgstr = $(line).children('.translatermsgstr');
var target = $(line).children('.translatertarget');
$('.strlist').hide();
var img_go = $('<a class="addfield" title="'+opts.title_go+'">'+img+'</a>').css('cursor','pointer');
$(msgid).prepend(' ').prepend(img_go);
$(img_go).click(function(){
var txt = $(msgid).text();
$(img_go).css('cursor','wait');
$.get(opts.url,{f:opts.func,langFrom:opts.from,langTo:opts.to,langTool:opts.tool,langStr:txt},function(data){
data=$(data);
if(data.find('rsp').attr('status')=='ok' && $(data).find('proposal').attr('str_to')){
var resp = $(data).find('proposal').attr('str_to');
if (confirm(opts.title+'\n'+resp)){
addText(target,resp);
$(img_go).css('cursor','pointer');
}
else{
$(img_go).css('cursor','pointer');
}
}else{
alert(opts.failed);
$(img_go).css('cursor','pointer');
}
});
});
$(msgstr).children('.subtranslatermsgstr').each(function(){
var img_str = $('<a class="togglelist" title="detail">'+tog+'</a>').css('cursor','pointer');
$(this).children('strong').each(function(){
var txt = $(this).text();
var img_add = $('<a class="addfield" title="'+opts.title_add+'">'+img+'</a>').css('cursor','pointer');
$(this).prepend(' ').prepend(img_add);
$(img_add).click(function(){addText(target,txt);});
$(this).append(' ').append(img_str);
var strlist=$(this).siblings('.strlist');
$(strlist).click(function(){$(strlist).toggle();});
$(img_str).click(function(){$(strlist).toggle();});
});
});
var img_file = $('<a class="togglelist" title="detail">'+tog+'</a>').css('cursor','pointer');
$(msgfile).children('strong').each(function(){
$(this).append(' ').append(img_file);
var strlist=$(this).siblings('.strlist');
$(strlist).click(function(){$(strlist).toggle();});
$(img_file).click(function(){$(strlist).toggle();});
});
});
};
function addText(target,text){
$(target).children(':text').val(text);
}
$.fn.translater.defaults = {
url: '',
func: '',
from: 'en',
to: 'fr',
tool: 'google',
failed: 'Failed to translate this',
title: 'Copy translation to field:',
title_go: 'Find translation',
title_add: 'Add this translation'
};
})(jQuery);

View File

@ -0,0 +1,174 @@
<html>
<head>
<title>Translater</title>
</head>
<body>
<h3>Paramètres</h3>
<dl>
<dt>Activer l'interface simple</dt>
<dd>Permet de n'avoir que l'essentiel sous les yeux.</dd>
<dt>Utiliser deux colonnes sur la page d'administrations</dt>
<dd>Permet d'avoir un affichage sur deux colonnes.</dd>
<dt>Activer le menu de la page des extensions</dt>
<dd>Ajoute un onglet sur la page de gestion des extensions.</dd>
<dt>Activer le menu de la page des thèmes</dt>
<dd>Ajoute un lien sur les details du thème sélectionné sur le pages de gestion des thèmes.</dd>
<dt>Ecrire les fichier .po</dt>
<dd>C'est le format par défaut des fichiers de langue de Dotclear.</dd>
<dt>Ecrire les fichiers .lang.php</dt>
<dd>C'est le format <em>rapide</em> des fichiers de langues.
<em>Peu importe le choix de fichier, vous devez au moins en selectionner un.</em></dd>
<dt>Traduire également les chaines des fichiers de template</dt>
<dd>Cette option permet de traduire les balises de langage des fichiers .html. Ex: {{tpl:lang Lorem}}.</dd>
<dt>Traduire uniquement les chaines inconnues</dt>
<dd>Cette option est recommander est permet de griser les chaines déjà traduite dans Dotclear.</dd>
<dt>Ecrire les commentaires dans les fichiers</dt>
<dd>Cela est pratique lors du developpement d'une extensions, le nom et la ligne ou se trouve la chaine sont alors écrit dans le fichier de langue.
Il est préfèrable de désactiver cette option lors de la réalisation de version finale, afin d'avoir des fichiers plus légés.</dd>
<dt>Ecrire les informations à propos de l'auteur</dt>
<dd>Ajoute aux fichiers de langue <em>(si les commentaires sont actifs)</em> des informations à propos de l'auteur de la traduction.
Ces informations peuvent ne pas être présentes pour un auteur elles seront alors ignorées. Il accepte les masques suivants:
<ul>
<li>displayname : pseudo de l'auteur</li>
<li>firstname : prénom de l'auteur</li>
<li>name : nom de l'auteur</li>
<li>email : email de l'auteur</li>
<li>url : site de l'auteur</li>
</ul>
</dd>
<dt>Utiliser un outil d'aide à la traduction</dt>
<dd>Une fois qu'un outil est choisi, lors d'un click sur une texte à traduire dans l'edition d'une traduction,
une alerte javascript avec la traduction apparait.</dd>
<dt>Langue par default des sources l10n</dt>
<dd>Langue des textes présents dans les fonctions:<br/>__('...') et {{tpl:lang ...}.</dd>
<dt>Ecraser les langages existants</dt>
<dd>Lors de l'import d'un paquetage de langue, si cette option est activé, une langue présente dans l'extension sera remplacé par celle venant du paquetage.</dd>
<dt>Nom du paquetage exporté</dt>
<dd>C'est le nom par défaut du fichier zip lorsque vous exportez des sauvegardes.</dd>
<dd>Il accepte les masques suivants:
<ul>
<li>type : plugin ou thème</li>
<li>module : nom du module</li>
<li>version : la version du module</li>
<li>timestamp : le temps unix</li>
<li>%Y%m%D.... : les masques de date Dotclear</li>
</ul>
</dd>
<dt>Faire des sauvegardes lors de modifications</dt>
<dd>Permet de faire automatiquement des sauvegardes des fichiers de langue à chaque changement enregistré.</dd>
<dt>Limiter les sauvegardes</dt>
<dd>Permet de limiter le nombre de sauvegarde par module afin de ne pas prendre trop de place sur la plateforme.
Les sauvegardes ne sont pas effacées automatiquement il faut le faire dans le gesionnaire de sauvegarde.</dd>
<dt>Stoquer les sauvegardes dans un dossier particulier</dt>
<dd>Plusieurs choix de lieu de sauvegarde s'offrent:
<ul>
<li>Repertoires <em>locales</em> de chaque module</li>
<li>Repertoire racine des extensions</li>
<li>Repertoire publique <em>(du blog en cours)</em></li>
<li>Repertoire <em>cache</em> de Dotclear</li>
<li>Repertoire unique du module <em>translater</em></li>
</ul>
</dd>
<dd>Pour ne pas tous mélanger il est préférable de stoquer les sauvegardes dans chaque module associé.</dd>
</dl>
<h3>Ajout/Supression/Modification</h3>
<p>Cet onglet permet d'ajouter, de supprimer ou d'étider des langues d'une extension.
Il est possible de copier la traduction d'une langue à une autre lors de sa création.
La supression d'une langue ne supprimera pas les éventuelles sauvegardes associées à cette langue.</p>
<h3>Edition d'une langue</h3>
<dl>
<dt>Groupe</dt>
<dd>Cette option est uniquement présente en mode avancé.
C'est le nom du fichier de langue.
D'autres choix sont possibles mais Dotclear ne recherche que le groupe <em>main</em> pour un plugin et <em>public</em> pour un thème.
Pour de gros plugin ou tout simplement pour des raisons de commodité (!) vous pouvez vouloir séparer certaines traductions.
Il faut alors demander explicitement à Dotclear de les charger.
Exemple: l10n::set('mon_repertoire/error');</dd>
<dt>Chaine</dt>
<dd>C'est la chaine à traduire trouvée dans l'extension. elle est apellé avec __('ma_chaine') .</dd>
<dt>Fichier</dt>
<dd>Cette option est uniquement présente en mode avancé.
C'est la liste des fichiers ainsi que la ligne ou se trouve la chaine.</dd>
<dt>Traduction</dt>
<dd>Traduction donnée à cette chaine pour la langue choisie.
Cette case est grisée <em>(Inaccessible)</em> si cette chaine est déjà traduite et
que l'option <em>"Traduire uniquement les chaines inconnues"</em> est selectionnée dans les paramètres.</dd>
<dt>Existant</dt>
<dd>Indique la traduction et l'extension qui utilise cette chaine le cas échéant.</dd>
</dl>
<h3>Sauvegardes</h3>
<dl>
<dt>Créer une sauvegarde</dt>
<dd>Si des traductions existent, une partie "Créer une sauvegarde" apparait.
Il est possible de faire une sauvegarde <em>(au format zip)</em> d'une langue d'une extension.
Elle sera stoquée dans le repertoire choisi dans les paramètres.</dd>
<dt>Listes des sauvegardes</dt>
<dd>Si des sauvegardes existent, il est possible de restaurer ou de supprimer ces sauvegardes.
Il suffit de selectionner les sauvegardes puis de choisir "Restaurer les sauvegardes". Elles seront restaurées par ordre chronologique.
C'est à dire que la plus ancienne sauvegarde sera restaurée en premier puis les plus récentes.
Dans cette même liste on peut supprimer des sauvegardes. La date, la langue et la taille de la sauvegarde sont affichées dans cette liste.</dd>
</dl>
<h3>Import/Export</h3>
<dl>
<dt>Importer</dt>
<dd>Il est possible d'importer des paquetages de langue.
Le format de ces paquetages est le <em>zip</em> et la structure pour chaque fichier doit obligatoirement avoir:
<ul>
<li>le nom du module</li>
<li>le repertoire <em>locales</em></li>
<li>le code de la langue</li>
<li>le nom du fichier de langue</li>
</ul>
Ce qui donne par exemple pour l'extension <em>translater</em>:
<ul>
<li>translater/locales/fr/main.po</li>
<li>translater/locales/fr/main.lang.php</li>
<li>translater/locales/fr/error.po</li>
<li>...</li>
</ul>
Seuls les fichiers .po et .lang.php sont reconnus.
Un paquetage peut contenir plusieurs langues et plusieurs extensions.
Si l'import se fait depuis la page d'une extension, seule cette extension sera importée.
Si l'import se fait depuis la page général, toutes les extensions seront importées.
Si l'option <em>Ecraser les fichier lors de l'import</em> est activée dans les paramètres alors les fichiers exsitant seront remplacés.</dd>
</dl>
<h3>Support</h3>
<p>Si vous souhaitez plus d'aide ou apporter votre contribution à cette extension, voici quelques liens utiles.</p>
<ul>
<li><a href="http://forum.dotclear.net/viewtopic.php?id=39220">Sujet sur le forum Dotclear</a></li>
<li><a href="http://lab.dotclear.org/wiki/plugin/translater">Page dédiée du lab Dotclear</a></li>
<li><a href="http://jcd.lv/?q=translater">Blog de l'auteur</a></li>
</ul>
</body>
</html>

View File

@ -0,0 +1,402 @@
<?php
// Language: Français
// Module: translater - 2013.05.11
// Date: 2013-05-12 23:35:00
// Translated with dcTranslater - 2013.05.11
#_admin.php:26
#index.php:537
#index.php:570
#index.php:1384
$GLOBALS['__l10n']['Translater'] = 'Traducteur';
#_admin.php:44
$GLOBALS['__l10n']['Translate extensions'] = 'Traduire les extensions';
#_admin.php:48
#index.php:670
$GLOBALS['__l10n']['Name'] = 'Nom';
#_admin.php:62
$GLOBALS['__l10n']['Translate this plugin'] = 'Traduire cette extension';
#_admin.php:85
$GLOBALS['__l10n']['Translate this theme'] = 'Traduire ce thème';
#inc/class.dc.translater.php:434
$GLOBALS['__l10n']['Cannot find backups folder for module %s'] = 'Impossible de trouver le dossier de sauvegarde du module %s';
#inc/class.dc.translater.php:450
$GLOBALS['__l10n']['Cannot find languages folder for module %s'] = 'Impossible de trouver le dossier de langue du module %s';
#inc/class.dc.translater.php:470
$GLOBALS['__l10n']['Cannot find root folder for module %s'] = 'Impossible de trouver le dossier racine du module %s';
#inc/class.dc.translater.php:499
$GLOBALS['__l10n']['Limit of %s backups for module %s exceed'] = 'La limite de %s sauvegardes pour le module % est dépassée';
#inc/class.dc.translater.php:561
#inc/class.dc.translater.php:951
#inc/class.dc.translater.php:1028
$GLOBALS['__l10n']['Cannot find language folder %s for module %s'] = 'Impossible de trouver le dossier de langue %s pour le module %s';
#inc/class.dc.translater.php:616
$GLOBALS['__l10n']['Cannot delete backup file %s'] = 'Impossible d\'effacer le fichier de sauvegarde %s';
#inc/class.dc.translater.php:634
$GLOBALS['__l10n']['Cannot find backup file %s'] = 'Impossible de trouver le fichier de sauvegarde %s';
#inc/class.dc.translater.php:660
$GLOBALS['__l10n']['Wrong export query'] = 'Mauvaise requète d\'exportation';
#inc/class.dc.translater.php:671
$GLOBALS['__l10n']['Cannot use export mask %s'] = 'Impossible d\'utiliser le masque d\'exportation %s';
#inc/class.dc.translater.php:759
$GLOBALS['__l10n']['Wrong import query'] = 'Mauvaise requète d\'importation';
#inc/class.dc.translater.php:808
$GLOBALS['__l10n']['Nothing to import for these modules in pack %s'] = 'Rien à importer pour ces modules dans le paquetage %s';
#inc/class.dc.translater.php:837
$GLOBALS['__l10n']['Zip file %s is not in translater format'] = 'Le fichier zip n\'est pas au format de translater';
#inc/class.dc.translater.php:897
$GLOBALS['__l10n']['Language %s already exists for module %s'] = 'La langue %s existe dèjà pour le module %s';
#inc/class.dc.translater.php:908
$GLOBALS['__l10n']['Cannot copy file from language %s for module %s'] = 'Impossible de copier le fichier depuis le langage %s pour le module %s';
#inc/class.dc.translater.php:1000
$GLOBALS['__l10n']['No string to write, language %s deleted for module %s'] = 'Aucune chaine à écrire, la langue %s a été effacée pour le module %s';
#inc/class.dc.translater.php:1264
$GLOBALS['__l10n']['Cannot grant write acces on lang file %s'] = 'Impossible d\'avoir les droits en écriture sur le fichier de langue %s';
#inc/class.dc.translater.php:1275
$GLOBALS['__l10n']['Cannot write lang file %s'] = 'Impossible d\'écrire le fichier de langue %s';
#inc/class.dc.translater.php:1579
$GLOBALS['__l10n']['Cannot find language for code %s'] = 'Impossible de trouver de langue pour le code %s';
#inc/class.translater.rest.php:42
$GLOBALS['__l10n']['Missing params'] = 'Paramètres manquants';
#inc/class.translater.rest.php:51
$GLOBALS['__l10n']['Failed to get translation tool'] = 'Impossible de trouver l\'outil de traduction';
#inc/class.translater.rest.php:55
$GLOBALS['__l10n']['Translation tool is not configured'] = 'L\'outil de traduction n\'est pas configuré';
#inc/lib.translater.google.php:44
$GLOBALS['__l10n']['You must have on Google API console:'] = 'Vous devez avoir sur la console des API Google :';
#inc/lib.translater.google.php:80
$GLOBALS['__l10n']['Failed to query service.'] = 'Impossible d\'interoger le service.';
#inc/lib.translater.microsoft.php:49
$GLOBALS['__l10n']['You must have:'] = 'Vous devez avoir :';
#index.php:26
#index.php:526
#index.php:1382
$GLOBALS['__l10n']['Settings'] = 'Paramètres';
#index.php:42
$GLOBALS['__l10n']['locales folders of each module'] = 'le répertoire locales de chaque module';
#index.php:43
$GLOBALS['__l10n']['plugins folder root'] = 'le répertoire racine des extensions';
#index.php:44
$GLOBALS['__l10n']['public folder root'] = 'le répertoire public du blog';
#index.php:45
$GLOBALS['__l10n']['cache folder of Dotclear'] = 'le répertoire cache de Dotclear';
#index.php:46
$GLOBALS['__l10n']['locales folder of translater'] = 'le répertoire locales de l\'extension translater';
#index.php:51
$GLOBALS['__l10n']['Translation successfully updated'] = 'Traduction mise à jour avec succès';
#index.php:52
$GLOBALS['__l10n']['Translation successfully created'] = 'Traduction crée avec succès';
#index.php:53
$GLOBALS['__l10n']['Translation successfully deleted'] = 'Traduction effacée avec succès';
#index.php:54
$GLOBALS['__l10n']['Backups successfully create'] = 'Sauvegardes crées avec succès';
#index.php:55
$GLOBALS['__l10n']['Backups successfully restored'] = 'Sauvegardes effectuées avec succès';
#index.php:56
$GLOBALS['__l10n']['Backups successfully deleted'] = 'Sauvegardes effacées avec succès';
#index.php:57
$GLOBALS['__l10n']['Package successfully imported'] = 'Paquetage importé avec succès';
#index.php:58
$GLOBALS['__l10n']['Package successfully exported'] = 'Paquetage exporté avec succès';
#index.php:62
$GLOBALS['__l10n']['Failed to update settings: %s'] = 'Impossible de mettre à jour les paramètres : %s';
#index.php:63
$GLOBALS['__l10n']['Failed to update translation: %s'] = 'Impossible de mettre à jour la traduction : %s';
#index.php:64
$GLOBALS['__l10n']['Failed to create translation: %s'] = 'Impossible de créer la traduction : %s';
#index.php:65
$GLOBALS['__l10n']['Failed to delete translation: %s'] = 'Impossible d\'effacer la traduction : %s';
#index.php:66
$GLOBALS['__l10n']['Failed to create backups: %s'] = 'Impossible de créer les sauvegardes : %s';
#index.php:67
$GLOBALS['__l10n']['Failed to restore backups: %s'] = 'Impossible de restaurer les sauvegardes : %s';
#index.php:68
$GLOBALS['__l10n']['Failed to delete backups: %s'] = 'Impossible d\'effacer les sauvegardes : %s';
#index.php:69
$GLOBALS['__l10n']['Failed to import package: %s'] = 'Impossible d\'importer le paquetage : %s';
#index.php:70
$GLOBALS['__l10n']['Failed to export package: %s'] = 'Impossible d\'exporter le paquetage : %s';
#index.php:112
$GLOBALS['__l10n']['No lang to create'] = 'Pas de langue à créer';
#index.php:134
$GLOBALS['__l10n']['No lang to delete'] = 'Pas de langue à effacer';
#index.php:156
$GLOBALS['__l10n']['No lang to backup'] = 'Pas de langue à sauvegarder';
#index.php:189
$GLOBALS['__l10n']['No blackup to restore'] = 'Pas de langue à restaurer';
#index.php:208
$GLOBALS['__l10n']['No bakcup to to restore'] = 'Pas de sauvegarde à restaurer';
#index.php:229
#index.php:247
$GLOBALS['__l10n']['No backup to delete'] = 'Pas de sauvegarde à effacer';
#index.php:290
#index.php:364
$GLOBALS['__l10n']['Nothing to export'] = 'Rien à exporter';
#index.php:312
$GLOBALS['__l10n']['No language to update'] = 'Pas de langue à mettre à jour';
#index.php:443
#index.php:490
$GLOBALS['__l10n']['Failed to launch translater: %s'] = 'Impossible de démarrer translater : %s';
#index.php:556
$GLOBALS['__l10n']['Use this %s translation:'] = 'Utiliser la traduction de %s :';
#index.php:557
$GLOBALS['__l10n']['Translate this text with %s'] = 'Traduire ce texte avec %s';
#index.php:558
$GLOBALS['__l10n']['Use this text'] = 'Utiliser ce texte';
#index.php:606
$GLOBALS['__l10n']['Translate theme "%s" (by %s)'] = 'Traduire le thème "%s" (de %s)';
#index.php:607
$GLOBALS['__l10n']['Translate plugin "%s" (by %s)'] = 'Traduire l\'extension "%s" (de %s)';
#index.php:627
#index.php:741
$GLOBALS['__l10n']['Edit translation'] = 'Modifier la traduction';
#index.php:639
$GLOBALS['__l10n']['Id'] = 'Id';
#index.php:649
$GLOBALS['__l10n']['There is no editable modules'] = 'Il n\'y a pas de modules modifiables.';
#index.php:665
$GLOBALS['__l10n']['Summary'] = 'Résumé';
#index.php:666
$GLOBALS['__l10n']['Module'] = 'Module';
#index.php:668
$GLOBALS['__l10n']['About'] = 'À propos';
#index.php:678
$GLOBALS['__l10n']['Root'] = 'Racine';
#index.php:680
#index.php:694
#index.php:811
#index.php:1342
$GLOBALS['__l10n']['Backups'] = 'Sauvegardes';
#index.php:695
$GLOBALS['__l10n']['Last backup'] = 'Dernière sauvegarde';
#index.php:722
$GLOBALS['__l10n']['no backup'] = 'Aucune sauvegarde';
#index.php:731
$GLOBALS['__l10n']['Translations'] = 'Traductions';
#index.php:737
$GLOBALS['__l10n']['Edit language'] = 'Modifier une langue';
#index.php:757
$GLOBALS['__l10n']['Add language'] = 'Ajouter une langue';
#index.php:764
$GLOBALS['__l10n']['Copy from language:'] = 'Copier depuis la langue :';
#index.php:766
$GLOBALS['__l10n']['Optionnal'] = 'Optionnel';
#index.php:773
$GLOBALS['__l10n']['Add translation'] = 'Ajouter la traduction';
#index.php:790
$GLOBALS['__l10n']['Delete language'] = 'Effacer une langue';
#index.php:794
$GLOBALS['__l10n']['Delete translation'] = 'Effacer la traduction';
#index.php:816
$GLOBALS['__l10n']['Create backups'] = 'Créer une sauvegarde';
#index.php:818
$GLOBALS['__l10n']['Choose languages to backup'] = 'Choisir la langue à sauvegarder';
#index.php:839
$GLOBALS['__l10n']['Backup'] = 'Sauvegarde';
#index.php:856
$GLOBALS['__l10n']['List of backups'] = 'Liste des sauvegardes';
#index.php:860
#index.php:1066
$GLOBALS['__l10n']['File'] = 'Fichier';
#index.php:863
$GLOBALS['__l10n']['Size'] = 'Taille';
#index.php:887
$GLOBALS['__l10n']['Selected backups action:'] = 'Action sur les sauvegardes sélectionnées :';
#index.php:889
$GLOBALS['__l10n']['Restore backups'] = 'Restaurer les sauvegardes';
#index.php:890
$GLOBALS['__l10n']['Delete backups'] = 'Effacer les sauvegardes';
#index.php:916
#index.php:1183
$GLOBALS['__l10n']['Choose language package to import'] = 'Choisir le paquetage de langue à importer';
#index.php:938
#index.php:1240
$GLOBALS['__l10n']['Choose languages to export'] = 'Choisir les langues à exporter';
#index.php:1059
$GLOBALS['__l10n']['Group'] = 'Groupe';
#index.php:1061
$GLOBALS['__l10n']['String'] = 'Chaîne';
#index.php:1063
#index.php:1284
$GLOBALS['__l10n']['Translation'] = 'Traduction';
#index.php:1064
$GLOBALS['__l10n']['Existing'] = 'Existant';
#index.php:1127
$GLOBALS['__l10n']['%s occurrences'] = '%s occurrences';
#index.php:1153
$GLOBALS['__l10n']['Total of %s strings.'] = 'Total de %s chaînes.';
#index.php:1155
$GLOBALS['__l10n']['Change the group of the selected entries to:'] = 'Changer le groupe des entrées sélectionnées vers :';
#index.php:1212
$GLOBALS['__l10n']['Choose modules to export'] = 'Choisir les modules à exporter';
#index.php:1214
$GLOBALS['__l10n']['Modules'] = 'Modules';
#index.php:1287
$GLOBALS['__l10n']['Write .po files'] = 'Écrire les fichier .po';
#index.php:1290
$GLOBALS['__l10n']['Write .lang.php files'] = 'Écrire les fichier .lang.php';
#index.php:1293
$GLOBALS['__l10n']['Translate also strings of template files'] = 'Traduire également les chaînes des fichiers de template';
#index.php:1296
$GLOBALS['__l10n']['Translate only unknow strings'] = 'Traduire uniquement les chaînes inconnues';
#index.php:1299
$GLOBALS['__l10n']['Hide default modules of Dotclear'] = 'Cacher les modules d\'origine de Dotclear';
#index.php:1302
$GLOBALS['__l10n']['Write comments in files'] = 'Écrire les commentaires dans les fichiers';
#index.php:1305
$GLOBALS['__l10n']['Write informations about author in files'] = 'Écrire les informations à propos de l\'auteur dans les fichiers';
#index.php:1309
$GLOBALS['__l10n']['Tools'] = 'Outils';
#index.php:1310
$GLOBALS['__l10n']['Default language of l10n source:'] = 'Langue par défaut des sources l10n :';
#index.php:1314
$GLOBALS['__l10n']['Select and configure the tool to use to translate strings:'] = 'Sélectionner et configurer un outil de traduction :';
#index.php:1326
$GLOBALS['__l10n']['Nothing to configure for %s tool.'] = 'Rien à configurer pour l\'outil %s.';
#index.php:1337
$GLOBALS['__l10n']['Overwrite existing languages'] = 'Écraser les langages existants';
#index.php:1338
$GLOBALS['__l10n']['Name of exported package'] = 'Nom du paquetage exporté';
#index.php:1345
$GLOBALS['__l10n']['Make backups when changes are made'] = 'Faire des sauvegardes lors des modifications';
#index.php:1346
$GLOBALS['__l10n']['Limit backups to %s files per module'] = 'Limiter les sauvegardes à %s fichiers par module';
#index.php:1349
$GLOBALS['__l10n']['Store backups in %s'] = 'Stocker les sauvegardes dans %s';
#index.php:1354
$GLOBALS['__l10n']['Behaviors'] = 'Comportements';
#index.php:1355
$GLOBALS['__l10n']['Default start menu:'] = 'Menu de départ par défaut :';
#index.php:1360
$GLOBALS['__l10n']['Enable menu on extensions page'] = 'Activer le menu sur la page des extensions';
#index.php:1363
$GLOBALS['__l10n']['Enable menu on themes page'] = 'Activer le menu sur la page des thèmes';
$GLOBALS['__l10n']['translater'] = 'Traducteur';
$GLOBALS['__l10n']['Translate your Dotclear plugins and themes'] = 'Traduire vos extensions et thèmes pour Dotclear';
?>

537
locales/fr/main.po 100644
View File

@ -0,0 +1,537 @@
# Language: Français
# Module: translater - 2013.05.11
# Date: 2013-05-12 23:35:00
# Translated with translater 2013.05.11
msgid ""
msgstr ""
"Content-Type: text/plain; charset=UTF-8\n"
"Project-Id-Version: translater 2013.05.11\n"
"POT-Creation-Date: \n"
"PO-Revision-Date: 2013-05-12T23:35:00+00:00\n"
"Last-Translator: Jean-Christian Denis\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Transfer-Encoding: 8bit\n"
#: _admin.php:26
#: index.php:537
#: index.php:570
#: index.php:1384
msgid "Translater"
msgstr "Traducteur"
#: _admin.php:44
msgid "Translate extensions"
msgstr "Traduire les extensions"
#: _admin.php:48
#: index.php:670
msgid "Name"
msgstr "Nom"
#: _admin.php:62
msgid "Translate this plugin"
msgstr "Traduire cette extension"
#: _admin.php:85
msgid "Translate this theme"
msgstr "Traduire ce thème"
#: inc/class.dc.translater.php:434
msgid "Cannot find backups folder for module %s"
msgstr "Impossible de trouver le dossier de sauvegarde du module %s"
#: inc/class.dc.translater.php:450
msgid "Cannot find languages folder for module %s"
msgstr "Impossible de trouver le dossier de langue du module %s"
#: inc/class.dc.translater.php:470
msgid "Cannot find root folder for module %s"
msgstr "Impossible de trouver le dossier racine du module %s"
#: inc/class.dc.translater.php:499
msgid "Limit of %s backups for module %s exceed"
msgstr "La limite de %s sauvegardes pour le module % est dépassée"
#: inc/class.dc.translater.php:561
#: inc/class.dc.translater.php:951
#: inc/class.dc.translater.php:1028
msgid "Cannot find language folder %s for module %s"
msgstr "Impossible de trouver le dossier de langue %s pour le module %s"
#: inc/class.dc.translater.php:616
msgid "Cannot delete backup file %s"
msgstr "Impossible d'effacer le fichier de sauvegarde %s"
#: inc/class.dc.translater.php:634
msgid "Cannot find backup file %s"
msgstr "Impossible de trouver le fichier de sauvegarde %s"
#: inc/class.dc.translater.php:660
msgid "Wrong export query"
msgstr "Mauvaise requète d'exportation"
#: inc/class.dc.translater.php:671
msgid "Cannot use export mask %s"
msgstr "Impossible d'utiliser le masque d'exportation %s"
#: inc/class.dc.translater.php:759
msgid "Wrong import query"
msgstr "Mauvaise requète d'importation"
#: inc/class.dc.translater.php:808
msgid "Nothing to import for these modules in pack %s"
msgstr "Rien à importer pour ces modules dans le paquetage %s"
#: inc/class.dc.translater.php:837
msgid "Zip file %s is not in translater format"
msgstr "Le fichier zip n'est pas au format de translater"
#: inc/class.dc.translater.php:897
msgid "Language %s already exists for module %s"
msgstr "La langue %s existe dèjà pour le module %s"
#: inc/class.dc.translater.php:908
msgid "Cannot copy file from language %s for module %s"
msgstr "Impossible de copier le fichier depuis le langage %s pour le module %s"
#: inc/class.dc.translater.php:1000
msgid "No string to write, language %s deleted for module %s"
msgstr "Aucune chaine à écrire, la langue %s a été effacée pour le module %s"
#: inc/class.dc.translater.php:1264
msgid "Cannot grant write acces on lang file %s"
msgstr "Impossible d'avoir les droits en écriture sur le fichier de langue %s"
#: inc/class.dc.translater.php:1275
msgid "Cannot write lang file %s"
msgstr "Impossible d'écrire le fichier de langue %s"
#: inc/class.dc.translater.php:1579
msgid "Cannot find language for code %s"
msgstr "Impossible de trouver de langue pour le code %s"
#: inc/class.translater.rest.php:42
msgid "Missing params"
msgstr "Paramètres manquants"
#: inc/class.translater.rest.php:51
msgid "Failed to get translation tool"
msgstr "Impossible de trouver l'outil de traduction"
#: inc/class.translater.rest.php:55
msgid "Translation tool is not configured"
msgstr "L'outil de traduction n'est pas configuré"
#: inc/lib.translater.google.php:44
msgid "You must have on Google API console:"
msgstr "Vous devez avoir sur la console des API Google :"
#: inc/lib.translater.google.php:80
msgid "Failed to query service."
msgstr "Impossible d'interoger le service."
#: inc/lib.translater.microsoft.php:49
msgid "You must have:"
msgstr "Vous devez avoir :"
#: index.php:26
#: index.php:526
#: index.php:1382
msgid "Settings"
msgstr "Paramètres"
#: index.php:42
msgid "locales folders of each module"
msgstr "le répertoire locales de chaque module"
#: index.php:43
msgid "plugins folder root"
msgstr "le répertoire racine des extensions"
#: index.php:44
msgid "public folder root"
msgstr "le répertoire public du blog"
#: index.php:45
msgid "cache folder of Dotclear"
msgstr "le répertoire cache de Dotclear"
#: index.php:46
msgid "locales folder of translater"
msgstr "le répertoire locales de l'extension translater"
#: index.php:51
msgid "Translation successfully updated"
msgstr "Traduction mise à jour avec succès"
#: index.php:52
msgid "Translation successfully created"
msgstr "Traduction crée avec succès"
#: index.php:53
msgid "Translation successfully deleted"
msgstr "Traduction effacée avec succès"
#: index.php:54
msgid "Backups successfully create"
msgstr "Sauvegardes crées avec succès"
#: index.php:55
msgid "Backups successfully restored"
msgstr "Sauvegardes effectuées avec succès"
#: index.php:56
msgid "Backups successfully deleted"
msgstr "Sauvegardes effacées avec succès"
#: index.php:57
msgid "Package successfully imported"
msgstr "Paquetage importé avec succès"
#: index.php:58
msgid "Package successfully exported"
msgstr "Paquetage exporté avec succès"
#: index.php:62
msgid "Failed to update settings: %s"
msgstr "Impossible de mettre à jour les paramètres : %s"
#: index.php:63
msgid "Failed to update translation: %s"
msgstr "Impossible de mettre à jour la traduction : %s"
#: index.php:64
msgid "Failed to create translation: %s"
msgstr "Impossible de créer la traduction : %s"
#: index.php:65
msgid "Failed to delete translation: %s"
msgstr "Impossible d'effacer la traduction : %s"
#: index.php:66
msgid "Failed to create backups: %s"
msgstr "Impossible de créer les sauvegardes : %s"
#: index.php:67
msgid "Failed to restore backups: %s"
msgstr "Impossible de restaurer les sauvegardes : %s"
#: index.php:68
msgid "Failed to delete backups: %s"
msgstr "Impossible d'effacer les sauvegardes : %s"
#: index.php:69
msgid "Failed to import package: %s"
msgstr "Impossible d'importer le paquetage : %s"
#: index.php:70
msgid "Failed to export package: %s"
msgstr "Impossible d'exporter le paquetage : %s"
#: index.php:112
msgid "No lang to create"
msgstr "Pas de langue à créer"
#: index.php:134
msgid "No lang to delete"
msgstr "Pas de langue à effacer"
#: index.php:156
msgid "No lang to backup"
msgstr "Pas de langue à sauvegarder"
#: index.php:189
msgid "No blackup to restore"
msgstr "Pas de langue à restaurer"
#: index.php:208
msgid "No bakcup to to restore"
msgstr "Pas de sauvegarde à restaurer"
#: index.php:229
#: index.php:247
msgid "No backup to delete"
msgstr "Pas de sauvegarde à effacer"
#: index.php:290
#: index.php:364
msgid "Nothing to export"
msgstr "Rien à exporter"
#: index.php:312
msgid "No language to update"
msgstr "Pas de langue à mettre à jour"
#: index.php:443
#: index.php:490
msgid "Failed to launch translater: %s"
msgstr "Impossible de démarrer translater : %s"
#: index.php:556
msgid "Use this %s translation:"
msgstr "Utiliser la traduction de %s :"
#: index.php:557
msgid "Translate this text with %s"
msgstr "Traduire ce texte avec %s"
#: index.php:558
msgid "Use this text"
msgstr "Utiliser ce texte"
#: index.php:606
msgid "Translate theme \"%s\" (by %s)"
msgstr "Traduire le thème \"%s\" (de %s)"
#: index.php:607
msgid "Translate plugin \"%s\" (by %s)"
msgstr "Traduire l'extension \"%s\" (de %s)"
#: index.php:627
#: index.php:741
msgid "Edit translation"
msgstr "Modifier la traduction"
#: index.php:639
msgid "Id"
msgstr "Id"
#: index.php:649
msgid "There is no editable modules"
msgstr "Il n'y a pas de modules modifiables."
#: index.php:665
msgid "Summary"
msgstr "Résumé"
#: index.php:666
msgid "Module"
msgstr "Module"
#: index.php:668
msgid "About"
msgstr "À propos"
#: index.php:678
msgid "Root"
msgstr "Racine"
#: index.php:680
#: index.php:694
#: index.php:811
#: index.php:1342
msgid "Backups"
msgstr "Sauvegardes"
#: index.php:695
msgid "Last backup"
msgstr "Dernière sauvegarde"
#: index.php:722
msgid "no backup"
msgstr "Aucune sauvegarde"
#: index.php:731
msgid "Translations"
msgstr "Traductions"
#: index.php:737
msgid "Edit language"
msgstr "Modifier une langue"
#: index.php:757
msgid "Add language"
msgstr "Ajouter une langue"
#: index.php:764
msgid "Copy from language:"
msgstr "Copier depuis la langue :"
#: index.php:766
msgid "Optionnal"
msgstr "Optionnel"
#: index.php:773
msgid "Add translation"
msgstr "Ajouter la traduction"
#: index.php:790
msgid "Delete language"
msgstr "Effacer une langue"
#: index.php:794
msgid "Delete translation"
msgstr "Effacer la traduction"
#: index.php:816
msgid "Create backups"
msgstr "Créer une sauvegarde"
#: index.php:818
msgid "Choose languages to backup"
msgstr "Choisir la langue à sauvegarder"
#: index.php:839
msgid "Backup"
msgstr "Sauvegarde"
#: index.php:856
msgid "List of backups"
msgstr "Liste des sauvegardes"
#: index.php:860
#: index.php:1066
msgid "File"
msgstr "Fichier"
#: index.php:863
msgid "Size"
msgstr "Taille"
#: index.php:887
msgid "Selected backups action:"
msgstr "Action sur les sauvegardes sélectionnées :"
#: index.php:889
msgid "Restore backups"
msgstr "Restaurer les sauvegardes"
#: index.php:890
msgid "Delete backups"
msgstr "Effacer les sauvegardes"
#: index.php:916
#: index.php:1183
msgid "Choose language package to import"
msgstr "Choisir le paquetage de langue à importer"
#: index.php:938
#: index.php:1240
msgid "Choose languages to export"
msgstr "Choisir les langues à exporter"
#: index.php:1059
msgid "Group"
msgstr "Groupe"
#: index.php:1061
msgid "String"
msgstr "Chaîne"
#: index.php:1063
#: index.php:1284
msgid "Translation"
msgstr "Traduction"
#: index.php:1064
msgid "Existing"
msgstr "Existant"
#: index.php:1127
msgid "%s occurrences"
msgstr "%s occurrences"
#: index.php:1153
msgid "Total of %s strings."
msgstr "Total de %s chaînes."
#: index.php:1155
msgid "Change the group of the selected entries to:"
msgstr "Changer le groupe des entrées sélectionnées vers :"
#: index.php:1212
msgid "Choose modules to export"
msgstr "Choisir les modules à exporter"
#: index.php:1214
msgid "Modules"
msgstr "Modules"
#: index.php:1287
msgid "Write .po files"
msgstr "Écrire les fichier .po"
#: index.php:1290
msgid "Write .lang.php files"
msgstr "Écrire les fichier .lang.php"
#: index.php:1293
msgid "Translate also strings of template files"
msgstr "Traduire également les chaînes des fichiers de template"
#: index.php:1296
msgid "Translate only unknow strings"
msgstr "Traduire uniquement les chaînes inconnues"
#: index.php:1299
msgid "Hide default modules of Dotclear"
msgstr "Cacher les modules d'origine de Dotclear"
#: index.php:1302
msgid "Write comments in files"
msgstr "Écrire les commentaires dans les fichiers"
#: index.php:1305
msgid "Write informations about author in files"
msgstr "Écrire les informations à propos de l'auteur dans les fichiers"
#: index.php:1309
msgid "Tools"
msgstr "Outils"
#: index.php:1310
msgid "Default language of l10n source:"
msgstr "Langue par défaut des sources l10n :"
#: index.php:1314
msgid "Select and configure the tool to use to translate strings:"
msgstr "Sélectionner et configurer un outil de traduction :"
#: index.php:1326
msgid "Nothing to configure for %s tool."
msgstr "Rien à configurer pour l'outil %s."
#: index.php:1337
msgid "Overwrite existing languages"
msgstr "Écraser les langages existants"
#: index.php:1338
msgid "Name of exported package"
msgstr "Nom du paquetage exporté"
#: index.php:1345
msgid "Make backups when changes are made"
msgstr "Faire des sauvegardes lors des modifications"
#: index.php:1346
msgid "Limit backups to %s files per module"
msgstr "Limiter les sauvegardes à %s fichiers par module"
#: index.php:1349
msgid "Store backups in %s"
msgstr "Stocker les sauvegardes dans %s"
#: index.php:1354
msgid "Behaviors"
msgstr "Comportements"
#: index.php:1355
msgid "Default start menu:"
msgstr "Menu de départ par défaut :"
#: index.php:1360
msgid "Enable menu on extensions page"
msgstr "Activer le menu sur la page des extensions"
#: index.php:1363
msgid "Enable menu on themes page"
msgstr "Activer le menu sur la page des thèmes"
msgid "translater"
msgstr "Traducteur"
msgid "Translate your Dotclear plugins and themes"
msgstr "Traduire vos extensions et thèmes pour Dotclear"

View File

@ -0,0 +1,16 @@
<?php
# -- BEGIN LICENSE BLOCK ----------------------------------
# This file is part of translater, a plugin for Dotclear 2.
#
# Copyright (c) 2009 JC Denis and contributors
# jcdenis@gdwd.com
#
# Licensed under the GPL version 2.0 license.
# A copy of this license is available in LICENSE file or at
# http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
# -- END LICENSE BLOCK ------------------------------------
if (!defined('DC_RC_PATH')) { return; }
$__resources['help']['translater'] = dirname(__FILE__).'/help/help.html';
?>

86
release.txt 100644
View File

@ -0,0 +1,86 @@
x.x xxxxxxxx
- help translation
- source translation
2013.05.11
* Rewrited proposal tools
* Added Microsoft translation tool
* Updated Google translation tool
* Removed permissions, now required superadmin
* Fixed page title and messages and contents
* Moved all sub-pages into one page
1.5 20100901
* Added option to set defaut tab (closes #552)
* Fixed occurrences count (closes #551)
* Fixed regxep (closes #550)
* Cleaned design (thanks to osku)
1.4.2 20100901
* Tried to fix crash with regexp on parsing .po file
1.4.1 20100626
* Fixed crash on .po files
* Fixed toggle function
* Fixed admin crash on non 2.2
* Fixed minor bugs
* Added option to hide default modules of Dotclear
1.4 20100605
* Switched to DC 2.2
* Added toogle list of existing translation
* Fixed google translate (now uses Google ajax API)
* Removed "simple mode"
* Changed admin interface (easy, light, fast)
1.3 20091025
* Added babelfish help
* Added behaviors on files writing
* Fixed regexp again
* Changed priority to .po files instead of .lang.php files
1.2 20091010
* Added direct text copy and paste
* Added grouping file change
* Fixed some typo
1.1 20091002
* Added the proposed translation
* Rewrited settings system
* Speed up expert mode
1.0 20090928
* Added translation of template files. closes #250
0.9 20090923
* Fixed bug on translate escape string
* Added _uninstall.php support
0.8 20090816
* Fixed php 5.3 compatibility
0.7
* Fixed some l10n
* Fixed ''xhtml strict'' validation
0.6
* Added ''author'' to langs files
* Added ''two-cols'' option
* Added ''sort option'' on array of translations
* Fixed ''bugs'' with no theme
* Fixed ''bugs'' with folder perms
* Fixed ''nothing to update" in simple mode
* Fixed ''bugs'' in Import/export
* Fixed ''html &gt;'' like DC changset 2385
* Fixed ''xhtml strict'' validation
0.5
* Fixed ''admin url''
* Added user perm check
* Fixed ''bugs'' with bad strings (close #166)
0.4
* Changed default tab to plugin
* Replaced list of modules in select box rather than in help
* Fixed wrong message when nothing to export
* Added help in helpBlock