Init
commit
58dee1a55a
|
@ -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.
|
|
@ -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> </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&part=module&type=plugin&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&part=module&type=theme&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');
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -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
|
||||
);
|
||||
?>
|
|
@ -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;
|
||||
?>
|
|
@ -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';
|
||||
?>
|
|
@ -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')
|
||||
);
|
||||
?>
|
File diff suppressed because it is too large
Load Diff
|
@ -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);
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
?>
|
Binary file not shown.
After Width: | Height: | Size: 321 B |
Binary file not shown.
After Width: | Height: | Size: 209 B |
|
@ -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 '';
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -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;
|
||||
}
|
||||
}
|
||||
?>
|
|
@ -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);
|
||||
}
|
||||
?>
|
|
@ -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);
|
|
@ -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>
|
|
@ -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';
|
||||