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';