mirror of
https://github.com/WenPai-org/wp-chinese-converter.git
synced 2025-08-04 01:19:34 +08:00
New Version
Rename WP Chinese Conversion to WP Chinese Switcher
This commit is contained in:
parent
e4af889ab9
commit
30fb92ad32
12 changed files with 23329 additions and 0 deletions
18552
ZhConversion.php
Executable file
18552
ZhConversion.php
Executable file
File diff suppressed because it is too large
Load diff
89
convert.html
Executable file
89
convert.html
Executable file
|
@ -0,0 +1,89 @@
|
||||||
|
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
|
||||||
|
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="zh" lang="zh">
|
||||||
|
<head profile="http://gmpg.org/xfn/11">
|
||||||
|
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
|
||||||
|
<title>Chinese Switcher</title>
|
||||||
|
<style type="text/css">
|
||||||
|
body {
|
||||||
|
margin: 0 auto; width: 900px;
|
||||||
|
}
|
||||||
|
|
||||||
|
.general {
|
||||||
|
margin-top: 20px;
|
||||||
|
}
|
||||||
|
</style>
|
||||||
|
</head>
|
||||||
|
|
||||||
|
<body>
|
||||||
|
<div id="wrapper" class="general">
|
||||||
|
<form action="convert.php" method="post" id="form1">
|
||||||
|
<label for="data">Original Text: </label><br />
|
||||||
|
<textarea name="data" id="data" rows="20" cols="100"></textarea><br />
|
||||||
|
<label for="variant">Convert to: </label>
|
||||||
|
<select id="variant" name="variant" >
|
||||||
|
<option value="zh-hans">简体中文 (zh-hans)</option>
|
||||||
|
<option value="zh-hant">繁體中文 (zh-hant)</option>
|
||||||
|
<option value="zh-cn">大陆简体 (zh-cn)</option>
|
||||||
|
<option value="zh-hk">港澳繁體 (zh-hk)</option>
|
||||||
|
<option value="zh-mo">澳門繁體 (zh-mo)</option>
|
||||||
|
<option value="zh-sg">马新简体 (zh-sg)</option>
|
||||||
|
<option value="zh-my">马来西亚简体 (zh-my)</option>
|
||||||
|
<option value="zh-tw">台灣正體 (zh-tw)</option>
|
||||||
|
</select><br />
|
||||||
|
<input type="hidden" name="dochineseconversion" value="1" />
|
||||||
|
<input type="submit" id="s" name="submit" value="Submit (Ctrl + Enter)" class="general" />
|
||||||
|
</form>
|
||||||
|
<div id="error" class="general"></div>
|
||||||
|
<div id="return" style="display: none" class="general">
|
||||||
|
<label for="response">Converted Text: </label><br />
|
||||||
|
<textarea id="response" rows="20" cols="100"></textarea><br />
|
||||||
|
</div><br />
|
||||||
|
</div>
|
||||||
|
<script type="text/javascript" >
|
||||||
|
/* <![CDATA[ */
|
||||||
|
document.forms[0].onsubmit = function() {
|
||||||
|
if(XMLHttpRequest) {var ajax = new XMLHttpRequest();}
|
||||||
|
else { var ajax = new ActiveXObject("Microsoft.XMLHTTP"); }
|
||||||
|
ajax.onreadystatechange = function() {
|
||||||
|
if( ajax.readyState == 4 ) {
|
||||||
|
if(ajax.status == 200 ) {
|
||||||
|
document.getElementById("response").value = ajax.responseText;
|
||||||
|
document.getElementById("return").style.display = "block";
|
||||||
|
document.getElementById("error").innerHTML = "";
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
document.getElementById("error").innerHTML = "Error, please try again.";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
var t = 'dochineseconversion=1&variant=' +
|
||||||
|
( document.getElementById("variant").options[document.getElementById("variant").selectedIndex].value || document.getElementById("variant").options[document.getElementById("variant").selectedIndex].text ) +
|
||||||
|
'&data=' + encodeURIComponent(document.getElementById("data").value);
|
||||||
|
document.getElementById("error").innerHTML = "Loading...";
|
||||||
|
ajax.open("POST", 'convert.php', true);
|
||||||
|
ajax.setRequestHeader("Content-Type", "application/x-www-form-urlencoded");
|
||||||
|
ajax.send(t);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
var isCtrl = false;
|
||||||
|
document.onkeydown = function(e) {
|
||||||
|
if(typeof(e) == "undefined") e = window.event || window.Event;
|
||||||
|
if( (e.which || e.keyCode) == 17 ) isCtrl = true;
|
||||||
|
}
|
||||||
|
document.onkeyup = function(e) {
|
||||||
|
if(typeof(e) == "undefined") e = window.event || window.Event;
|
||||||
|
if( isCtrl &&
|
||||||
|
( (e.which || e.keyCode) == 13 || (e.which || e.keyCode) == 10 )
|
||||||
|
) {
|
||||||
|
if( typeof(e.preventDefault) != "undefined" ) e.preventDefault();
|
||||||
|
document.getElementById("s").click();
|
||||||
|
isCtrl = false;
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
isCtrl = false;
|
||||||
|
}
|
||||||
|
/* ]]> */
|
||||||
|
</script>
|
||||||
|
</body>
|
||||||
|
</html>
|
80
convert.php
Executable file
80
convert.php
Executable file
|
@ -0,0 +1,80 @@
|
||||||
|
<?php
|
||||||
|
/**
|
||||||
|
* 本文件是為第三方應用預留的. 本插件中不會載入和使用這個文件.
|
||||||
|
*
|
||||||
|
* 通過include本文件, 您可以使用中文繁簡轉換函數zhconversion($str, $variant)
|
||||||
|
* 如果$_GET['doconversion']或$_POST['doconversion'])有設置, 本文件將獲取$_REQUEST['data']并把其轉換為$_REQUEST['variant']語言后輸出.
|
||||||
|
*
|
||||||
|
* 您不應該也不需要在Wordpress程序, 插件/主題 或 任何已經包含wp-config.php文件的php程序中包含本文件
|
||||||
|
*
|
||||||
|
* 本插件目录下convert.html是一个简单的在线繁简转换工具, 使用了本php文件. 当作是本插件的bonus吧 ^_^
|
||||||
|
*/
|
||||||
|
|
||||||
|
global $zh2Hans, $zh2Hant, $zh2TW, $zh2CN, $zh2SG, $zh2HK;
|
||||||
|
require_once( dirname(__FILE__) . '/ZhConversion.php');
|
||||||
|
|
||||||
|
global $wpcs_langs;
|
||||||
|
$wpcs_langs = array(
|
||||||
|
'zh-hans' => array('zhconversion_hans', 'zh2Hans', '简体中文'),
|
||||||
|
'zh-hant' => array('zhconversion_hant', 'zh2Hant', '繁體中文'),
|
||||||
|
'zh-cn' => array('zhconversion_cn', 'zh2CN', '大陆简体'),
|
||||||
|
'zh-hk' => array('zhconversion_hk', 'zh2HK', '港澳繁體'),
|
||||||
|
'zh-sg' => array('zhconversion_sg', 'zh2SG', '马新简体'),
|
||||||
|
'zh-tw' => array('zhconversion_tw', 'zh2TW', '台灣正體'),
|
||||||
|
'zh-mo' => array('zhconversion_hk', 'zh2MO', '澳門繁體'),
|
||||||
|
'zh-my' => array('zhconversion_sg', 'zh2MY', '马来西亚简体'),
|
||||||
|
'zh' => array('zhconversion_zh', 'zh2ZH', '中文'),
|
||||||
|
);
|
||||||
|
|
||||||
|
if( empty($nochineseconversion) && empty($GLOBALS['nochineseconversion']) ) {
|
||||||
|
if( ( isset($_GET['dochineseconversion']) || isset($_POST['dochineseconversion']) ) &&
|
||||||
|
isset($_REQUEST['data']) )
|
||||||
|
{ $wpcs_data = get_magic_quotes_gpc() ? stripslashes($_REQUEST['data']) : $_REQUEST['data'];
|
||||||
|
$wpcs_variant = str_replace('_', '-', strtolower(trim($_REQUEST['variant'])));
|
||||||
|
if( !empty($wpcs_variant) && in_array($wpcs_variant, array('zh-hans', 'zh-hant', 'zh-cn', 'zh-hk', 'zh-sg', 'zh-tw', 'zh-my', 'zh-mo')) )
|
||||||
|
echo zhconversion($wpcs_data, $wpcs_variant);
|
||||||
|
else echo $wpcs_data;
|
||||||
|
die();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
function zhconversion($str, $variant) {
|
||||||
|
global $wpcs_langs;
|
||||||
|
return $wpcs_langs[$variant][0]($str);
|
||||||
|
}
|
||||||
|
|
||||||
|
function zhconversion_hant($str) {
|
||||||
|
global $zh2Hant;
|
||||||
|
return strtr($str, $zh2Hant );
|
||||||
|
}
|
||||||
|
|
||||||
|
function zhconversion_hans($str) {
|
||||||
|
global $zh2Hans;
|
||||||
|
return strtr($str, $zh2Hans);
|
||||||
|
}
|
||||||
|
|
||||||
|
function zhconversion_cn($str) {
|
||||||
|
global $zh2Hans, $zh2CN;
|
||||||
|
return strtr(strtr($str, $zh2CN), $zh2Hans);
|
||||||
|
}
|
||||||
|
|
||||||
|
function zhconversion_tw($str) {
|
||||||
|
global $zh2Hant, $zh2TW;
|
||||||
|
return strtr(strtr($str, $zh2TW), $zh2Hant);
|
||||||
|
}
|
||||||
|
|
||||||
|
function zhconversion_sg($str) {
|
||||||
|
global $zh2Hans, $zh2SG;
|
||||||
|
return strtr(strtr($str, $zh2SG), $zh2Hans);
|
||||||
|
}
|
||||||
|
|
||||||
|
function zhconversion_hk($str) {
|
||||||
|
global $zh2Hant, $zh2HK;
|
||||||
|
return strtr(strtr($str, $zh2HK), $zh2Hant);
|
||||||
|
}
|
||||||
|
|
||||||
|
function zhconversion_zh($str) {
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
?>
|
14
extra_zhconversion-sample.php
Executable file
14
extra_zhconversion-sample.php
Executable file
|
@ -0,0 +1,14 @@
|
||||||
|
<?php
|
||||||
|
/*
|
||||||
|
这个文件是本插件可选的转换表, 把本文件重命名为extra_zhconversion.php, 移动到wp-content/目录里. 则本插件会在载入主转换表(ZhConversion.php)后载入本文件.
|
||||||
|
您可以参考ZhConversion.php里内容, 扩展繁简转换表.
|
||||||
|
*/
|
||||||
|
|
||||||
|
//下面这些转换行使繁简语言导航提示不繁简转换.
|
||||||
|
$zh2Hant['大陆简体']='大陆简体';
|
||||||
|
$zh2Hant['马新简体']='马新简体';
|
||||||
|
$zh2Hant['简体中文']='简体中文';
|
||||||
|
$zh2Hans['港澳繁體']='港澳繁體';
|
||||||
|
$zh2Hans['台灣正體']='台灣正體';
|
||||||
|
$zh2Hans['繁體中文']='繁體中文';
|
||||||
|
|
674
license.txt
Executable file
674
license.txt
Executable file
|
@ -0,0 +1,674 @@
|
||||||
|
GNU GENERAL PUBLIC LICENSE
|
||||||
|
Version 3, 29 June 2007
|
||||||
|
|
||||||
|
Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/>
|
||||||
|
Everyone is permitted to copy and distribute verbatim copies
|
||||||
|
of this license document, but changing it is not allowed.
|
||||||
|
|
||||||
|
Preamble
|
||||||
|
|
||||||
|
The GNU General Public License is a free, copyleft license for
|
||||||
|
software and other kinds of works.
|
||||||
|
|
||||||
|
The licenses for most software and other practical works are designed
|
||||||
|
to take away your freedom to share and change the works. By contrast,
|
||||||
|
the GNU General Public License is intended to guarantee your freedom to
|
||||||
|
share and change all versions of a program--to make sure it remains free
|
||||||
|
software for all its users. We, the Free Software Foundation, use the
|
||||||
|
GNU General Public License for most of our software; it applies also to
|
||||||
|
any other work released this way by its authors. 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
|
||||||
|
them 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 prevent others from denying you
|
||||||
|
these rights or asking you to surrender the rights. Therefore, you have
|
||||||
|
certain responsibilities if you distribute copies of the software, or if
|
||||||
|
you modify it: responsibilities to respect the freedom of others.
|
||||||
|
|
||||||
|
For example, if you distribute copies of such a program, whether
|
||||||
|
gratis or for a fee, you must pass on to the recipients the same
|
||||||
|
freedoms that you received. 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.
|
||||||
|
|
||||||
|
Developers that use the GNU GPL protect your rights with two steps:
|
||||||
|
(1) assert copyright on the software, and (2) offer you this License
|
||||||
|
giving you legal permission to copy, distribute and/or modify it.
|
||||||
|
|
||||||
|
For the developers' and authors' protection, the GPL clearly explains
|
||||||
|
that there is no warranty for this free software. For both users' and
|
||||||
|
authors' sake, the GPL requires that modified versions be marked as
|
||||||
|
changed, so that their problems will not be attributed erroneously to
|
||||||
|
authors of previous versions.
|
||||||
|
|
||||||
|
Some devices are designed to deny users access to install or run
|
||||||
|
modified versions of the software inside them, although the manufacturer
|
||||||
|
can do so. This is fundamentally incompatible with the aim of
|
||||||
|
protecting users' freedom to change the software. The systematic
|
||||||
|
pattern of such abuse occurs in the area of products for individuals to
|
||||||
|
use, which is precisely where it is most unacceptable. Therefore, we
|
||||||
|
have designed this version of the GPL to prohibit the practice for those
|
||||||
|
products. If such problems arise substantially in other domains, we
|
||||||
|
stand ready to extend this provision to those domains in future versions
|
||||||
|
of the GPL, as needed to protect the freedom of users.
|
||||||
|
|
||||||
|
Finally, every program is threatened constantly by software patents.
|
||||||
|
States should not allow patents to restrict development and use of
|
||||||
|
software on general-purpose computers, but in those that do, we wish to
|
||||||
|
avoid the special danger that patents applied to a free program could
|
||||||
|
make it effectively proprietary. To prevent this, the GPL assures that
|
||||||
|
patents cannot be used to render the program non-free.
|
||||||
|
|
||||||
|
The precise terms and conditions for copying, distribution and
|
||||||
|
modification follow.
|
||||||
|
|
||||||
|
TERMS AND CONDITIONS
|
||||||
|
|
||||||
|
0. Definitions.
|
||||||
|
|
||||||
|
"This License" refers to version 3 of the GNU General Public License.
|
||||||
|
|
||||||
|
"Copyright" also means copyright-like laws that apply to other kinds of
|
||||||
|
works, such as semiconductor masks.
|
||||||
|
|
||||||
|
"The Program" refers to any copyrightable work licensed under this
|
||||||
|
License. Each licensee is addressed as "you". "Licensees" and
|
||||||
|
"recipients" may be individuals or organizations.
|
||||||
|
|
||||||
|
To "modify" a work means to copy from or adapt all or part of the work
|
||||||
|
in a fashion requiring copyright permission, other than the making of an
|
||||||
|
exact copy. The resulting work is called a "modified version" of the
|
||||||
|
earlier work or a work "based on" the earlier work.
|
||||||
|
|
||||||
|
A "covered work" means either the unmodified Program or a work based
|
||||||
|
on the Program.
|
||||||
|
|
||||||
|
To "propagate" a work means to do anything with it that, without
|
||||||
|
permission, would make you directly or secondarily liable for
|
||||||
|
infringement under applicable copyright law, except executing it on a
|
||||||
|
computer or modifying a private copy. Propagation includes copying,
|
||||||
|
distribution (with or without modification), making available to the
|
||||||
|
public, and in some countries other activities as well.
|
||||||
|
|
||||||
|
To "convey" a work means any kind of propagation that enables other
|
||||||
|
parties to make or receive copies. Mere interaction with a user through
|
||||||
|
a computer network, with no transfer of a copy, is not conveying.
|
||||||
|
|
||||||
|
An interactive user interface displays "Appropriate Legal Notices"
|
||||||
|
to the extent that it includes a convenient and prominently visible
|
||||||
|
feature that (1) displays an appropriate copyright notice, and (2)
|
||||||
|
tells the user that there is no warranty for the work (except to the
|
||||||
|
extent that warranties are provided), that licensees may convey the
|
||||||
|
work under this License, and how to view a copy of this License. If
|
||||||
|
the interface presents a list of user commands or options, such as a
|
||||||
|
menu, a prominent item in the list meets this criterion.
|
||||||
|
|
||||||
|
1. Source Code.
|
||||||
|
|
||||||
|
The "source code" for a work means the preferred form of the work
|
||||||
|
for making modifications to it. "Object code" means any non-source
|
||||||
|
form of a work.
|
||||||
|
|
||||||
|
A "Standard Interface" means an interface that either is an official
|
||||||
|
standard defined by a recognized standards body, or, in the case of
|
||||||
|
interfaces specified for a particular programming language, one that
|
||||||
|
is widely used among developers working in that language.
|
||||||
|
|
||||||
|
The "System Libraries" of an executable work include anything, other
|
||||||
|
than the work as a whole, that (a) is included in the normal form of
|
||||||
|
packaging a Major Component, but which is not part of that Major
|
||||||
|
Component, and (b) serves only to enable use of the work with that
|
||||||
|
Major Component, or to implement a Standard Interface for which an
|
||||||
|
implementation is available to the public in source code form. A
|
||||||
|
"Major Component", in this context, means a major essential component
|
||||||
|
(kernel, window system, and so on) of the specific operating system
|
||||||
|
(if any) on which the executable work runs, or a compiler used to
|
||||||
|
produce the work, or an object code interpreter used to run it.
|
||||||
|
|
||||||
|
The "Corresponding Source" for a work in object code form means all
|
||||||
|
the source code needed to generate, install, and (for an executable
|
||||||
|
work) run the object code and to modify the work, including scripts to
|
||||||
|
control those activities. However, it does not include the work's
|
||||||
|
System Libraries, or general-purpose tools or generally available free
|
||||||
|
programs which are used unmodified in performing those activities but
|
||||||
|
which are not part of the work. For example, Corresponding Source
|
||||||
|
includes interface definition files associated with source files for
|
||||||
|
the work, and the source code for shared libraries and dynamically
|
||||||
|
linked subprograms that the work is specifically designed to require,
|
||||||
|
such as by intimate data communication or control flow between those
|
||||||
|
subprograms and other parts of the work.
|
||||||
|
|
||||||
|
The Corresponding Source need not include anything that users
|
||||||
|
can regenerate automatically from other parts of the Corresponding
|
||||||
|
Source.
|
||||||
|
|
||||||
|
The Corresponding Source for a work in source code form is that
|
||||||
|
same work.
|
||||||
|
|
||||||
|
2. Basic Permissions.
|
||||||
|
|
||||||
|
All rights granted under this License are granted for the term of
|
||||||
|
copyright on the Program, and are irrevocable provided the stated
|
||||||
|
conditions are met. This License explicitly affirms your unlimited
|
||||||
|
permission to run the unmodified Program. The output from running a
|
||||||
|
covered work is covered by this License only if the output, given its
|
||||||
|
content, constitutes a covered work. This License acknowledges your
|
||||||
|
rights of fair use or other equivalent, as provided by copyright law.
|
||||||
|
|
||||||
|
You may make, run and propagate covered works that you do not
|
||||||
|
convey, without conditions so long as your license otherwise remains
|
||||||
|
in force. You may convey covered works to others for the sole purpose
|
||||||
|
of having them make modifications exclusively for you, or provide you
|
||||||
|
with facilities for running those works, provided that you comply with
|
||||||
|
the terms of this License in conveying all material for which you do
|
||||||
|
not control copyright. Those thus making or running the covered works
|
||||||
|
for you must do so exclusively on your behalf, under your direction
|
||||||
|
and control, on terms that prohibit them from making any copies of
|
||||||
|
your copyrighted material outside their relationship with you.
|
||||||
|
|
||||||
|
Conveying under any other circumstances is permitted solely under
|
||||||
|
the conditions stated below. Sublicensing is not allowed; section 10
|
||||||
|
makes it unnecessary.
|
||||||
|
|
||||||
|
3. Protecting Users' Legal Rights From Anti-Circumvention Law.
|
||||||
|
|
||||||
|
No covered work shall be deemed part of an effective technological
|
||||||
|
measure under any applicable law fulfilling obligations under article
|
||||||
|
11 of the WIPO copyright treaty adopted on 20 December 1996, or
|
||||||
|
similar laws prohibiting or restricting circumvention of such
|
||||||
|
measures.
|
||||||
|
|
||||||
|
When you convey a covered work, you waive any legal power to forbid
|
||||||
|
circumvention of technological measures to the extent such circumvention
|
||||||
|
is effected by exercising rights under this License with respect to
|
||||||
|
the covered work, and you disclaim any intention to limit operation or
|
||||||
|
modification of the work as a means of enforcing, against the work's
|
||||||
|
users, your or third parties' legal rights to forbid circumvention of
|
||||||
|
technological measures.
|
||||||
|
|
||||||
|
4. Conveying Verbatim Copies.
|
||||||
|
|
||||||
|
You may convey 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;
|
||||||
|
keep intact all notices stating that this License and any
|
||||||
|
non-permissive terms added in accord with section 7 apply to the code;
|
||||||
|
keep intact all notices of the absence of any warranty; and give all
|
||||||
|
recipients a copy of this License along with the Program.
|
||||||
|
|
||||||
|
You may charge any price or no price for each copy that you convey,
|
||||||
|
and you may offer support or warranty protection for a fee.
|
||||||
|
|
||||||
|
5. Conveying Modified Source Versions.
|
||||||
|
|
||||||
|
You may convey a work based on the Program, or the modifications to
|
||||||
|
produce it from the Program, in the form of source code under the
|
||||||
|
terms of section 4, provided that you also meet all of these conditions:
|
||||||
|
|
||||||
|
a) The work must carry prominent notices stating that you modified
|
||||||
|
it, and giving a relevant date.
|
||||||
|
|
||||||
|
b) The work must carry prominent notices stating that it is
|
||||||
|
released under this License and any conditions added under section
|
||||||
|
7. This requirement modifies the requirement in section 4 to
|
||||||
|
"keep intact all notices".
|
||||||
|
|
||||||
|
c) You must license the entire work, as a whole, under this
|
||||||
|
License to anyone who comes into possession of a copy. This
|
||||||
|
License will therefore apply, along with any applicable section 7
|
||||||
|
additional terms, to the whole of the work, and all its parts,
|
||||||
|
regardless of how they are packaged. This License gives no
|
||||||
|
permission to license the work in any other way, but it does not
|
||||||
|
invalidate such permission if you have separately received it.
|
||||||
|
|
||||||
|
d) If the work has interactive user interfaces, each must display
|
||||||
|
Appropriate Legal Notices; however, if the Program has interactive
|
||||||
|
interfaces that do not display Appropriate Legal Notices, your
|
||||||
|
work need not make them do so.
|
||||||
|
|
||||||
|
A compilation of a covered work with other separate and independent
|
||||||
|
works, which are not by their nature extensions of the covered work,
|
||||||
|
and which are not combined with it such as to form a larger program,
|
||||||
|
in or on a volume of a storage or distribution medium, is called an
|
||||||
|
"aggregate" if the compilation and its resulting copyright are not
|
||||||
|
used to limit the access or legal rights of the compilation's users
|
||||||
|
beyond what the individual works permit. Inclusion of a covered work
|
||||||
|
in an aggregate does not cause this License to apply to the other
|
||||||
|
parts of the aggregate.
|
||||||
|
|
||||||
|
6. Conveying Non-Source Forms.
|
||||||
|
|
||||||
|
You may convey a covered work in object code form under the terms
|
||||||
|
of sections 4 and 5, provided that you also convey the
|
||||||
|
machine-readable Corresponding Source under the terms of this License,
|
||||||
|
in one of these ways:
|
||||||
|
|
||||||
|
a) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by the
|
||||||
|
Corresponding Source fixed on a durable physical medium
|
||||||
|
customarily used for software interchange.
|
||||||
|
|
||||||
|
b) Convey the object code in, or embodied in, a physical product
|
||||||
|
(including a physical distribution medium), accompanied by a
|
||||||
|
written offer, valid for at least three years and valid for as
|
||||||
|
long as you offer spare parts or customer support for that product
|
||||||
|
model, to give anyone who possesses the object code either (1) a
|
||||||
|
copy of the Corresponding Source for all the software in the
|
||||||
|
product that is covered by this License, on a durable physical
|
||||||
|
medium customarily used for software interchange, for a price no
|
||||||
|
more than your reasonable cost of physically performing this
|
||||||
|
conveying of source, or (2) access to copy the
|
||||||
|
Corresponding Source from a network server at no charge.
|
||||||
|
|
||||||
|
c) Convey individual copies of the object code with a copy of the
|
||||||
|
written offer to provide the Corresponding Source. This
|
||||||
|
alternative is allowed only occasionally and noncommercially, and
|
||||||
|
only if you received the object code with such an offer, in accord
|
||||||
|
with subsection 6b.
|
||||||
|
|
||||||
|
d) Convey the object code by offering access from a designated
|
||||||
|
place (gratis or for a charge), and offer equivalent access to the
|
||||||
|
Corresponding Source in the same way through the same place at no
|
||||||
|
further charge. You need not require recipients to copy the
|
||||||
|
Corresponding Source along with the object code. If the place to
|
||||||
|
copy the object code is a network server, the Corresponding Source
|
||||||
|
may be on a different server (operated by you or a third party)
|
||||||
|
that supports equivalent copying facilities, provided you maintain
|
||||||
|
clear directions next to the object code saying where to find the
|
||||||
|
Corresponding Source. Regardless of what server hosts the
|
||||||
|
Corresponding Source, you remain obligated to ensure that it is
|
||||||
|
available for as long as needed to satisfy these requirements.
|
||||||
|
|
||||||
|
e) Convey the object code using peer-to-peer transmission, provided
|
||||||
|
you inform other peers where the object code and Corresponding
|
||||||
|
Source of the work are being offered to the general public at no
|
||||||
|
charge under subsection 6d.
|
||||||
|
|
||||||
|
A separable portion of the object code, whose source code is excluded
|
||||||
|
from the Corresponding Source as a System Library, need not be
|
||||||
|
included in conveying the object code work.
|
||||||
|
|
||||||
|
A "User Product" is either (1) a "consumer product", which means any
|
||||||
|
tangible personal property which is normally used for personal, family,
|
||||||
|
or household purposes, or (2) anything designed or sold for incorporation
|
||||||
|
into a dwelling. In determining whether a product is a consumer product,
|
||||||
|
doubtful cases shall be resolved in favor of coverage. For a particular
|
||||||
|
product received by a particular user, "normally used" refers to a
|
||||||
|
typical or common use of that class of product, regardless of the status
|
||||||
|
of the particular user or of the way in which the particular user
|
||||||
|
actually uses, or expects or is expected to use, the product. A product
|
||||||
|
is a consumer product regardless of whether the product has substantial
|
||||||
|
commercial, industrial or non-consumer uses, unless such uses represent
|
||||||
|
the only significant mode of use of the product.
|
||||||
|
|
||||||
|
"Installation Information" for a User Product means any methods,
|
||||||
|
procedures, authorization keys, or other information required to install
|
||||||
|
and execute modified versions of a covered work in that User Product from
|
||||||
|
a modified version of its Corresponding Source. The information must
|
||||||
|
suffice to ensure that the continued functioning of the modified object
|
||||||
|
code is in no case prevented or interfered with solely because
|
||||||
|
modification has been made.
|
||||||
|
|
||||||
|
If you convey an object code work under this section in, or with, or
|
||||||
|
specifically for use in, a User Product, and the conveying occurs as
|
||||||
|
part of a transaction in which the right of possession and use of the
|
||||||
|
User Product is transferred to the recipient in perpetuity or for a
|
||||||
|
fixed term (regardless of how the transaction is characterized), the
|
||||||
|
Corresponding Source conveyed under this section must be accompanied
|
||||||
|
by the Installation Information. But this requirement does not apply
|
||||||
|
if neither you nor any third party retains the ability to install
|
||||||
|
modified object code on the User Product (for example, the work has
|
||||||
|
been installed in ROM).
|
||||||
|
|
||||||
|
The requirement to provide Installation Information does not include a
|
||||||
|
requirement to continue to provide support service, warranty, or updates
|
||||||
|
for a work that has been modified or installed by the recipient, or for
|
||||||
|
the User Product in which it has been modified or installed. Access to a
|
||||||
|
network may be denied when the modification itself materially and
|
||||||
|
adversely affects the operation of the network or violates the rules and
|
||||||
|
protocols for communication across the network.
|
||||||
|
|
||||||
|
Corresponding Source conveyed, and Installation Information provided,
|
||||||
|
in accord with this section must be in a format that is publicly
|
||||||
|
documented (and with an implementation available to the public in
|
||||||
|
source code form), and must require no special password or key for
|
||||||
|
unpacking, reading or copying.
|
||||||
|
|
||||||
|
7. Additional Terms.
|
||||||
|
|
||||||
|
"Additional permissions" are terms that supplement the terms of this
|
||||||
|
License by making exceptions from one or more of its conditions.
|
||||||
|
Additional permissions that are applicable to the entire Program shall
|
||||||
|
be treated as though they were included in this License, to the extent
|
||||||
|
that they are valid under applicable law. If additional permissions
|
||||||
|
apply only to part of the Program, that part may be used separately
|
||||||
|
under those permissions, but the entire Program remains governed by
|
||||||
|
this License without regard to the additional permissions.
|
||||||
|
|
||||||
|
When you convey a copy of a covered work, you may at your option
|
||||||
|
remove any additional permissions from that copy, or from any part of
|
||||||
|
it. (Additional permissions may be written to require their own
|
||||||
|
removal in certain cases when you modify the work.) You may place
|
||||||
|
additional permissions on material, added by you to a covered work,
|
||||||
|
for which you have or can give appropriate copyright permission.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, for material you
|
||||||
|
add to a covered work, you may (if authorized by the copyright holders of
|
||||||
|
that material) supplement the terms of this License with terms:
|
||||||
|
|
||||||
|
a) Disclaiming warranty or limiting liability differently from the
|
||||||
|
terms of sections 15 and 16 of this License; or
|
||||||
|
|
||||||
|
b) Requiring preservation of specified reasonable legal notices or
|
||||||
|
author attributions in that material or in the Appropriate Legal
|
||||||
|
Notices displayed by works containing it; or
|
||||||
|
|
||||||
|
c) Prohibiting misrepresentation of the origin of that material, or
|
||||||
|
requiring that modified versions of such material be marked in
|
||||||
|
reasonable ways as different from the original version; or
|
||||||
|
|
||||||
|
d) Limiting the use for publicity purposes of names of licensors or
|
||||||
|
authors of the material; or
|
||||||
|
|
||||||
|
e) Declining to grant rights under trademark law for use of some
|
||||||
|
trade names, trademarks, or service marks; or
|
||||||
|
|
||||||
|
f) Requiring indemnification of licensors and authors of that
|
||||||
|
material by anyone who conveys the material (or modified versions of
|
||||||
|
it) with contractual assumptions of liability to the recipient, for
|
||||||
|
any liability that these contractual assumptions directly impose on
|
||||||
|
those licensors and authors.
|
||||||
|
|
||||||
|
All other non-permissive additional terms are considered "further
|
||||||
|
restrictions" within the meaning of section 10. If the Program as you
|
||||||
|
received it, or any part of it, contains a notice stating that it is
|
||||||
|
governed by this License along with a term that is a further
|
||||||
|
restriction, you may remove that term. If a license document contains
|
||||||
|
a further restriction but permits relicensing or conveying under this
|
||||||
|
License, you may add to a covered work material governed by the terms
|
||||||
|
of that license document, provided that the further restriction does
|
||||||
|
not survive such relicensing or conveying.
|
||||||
|
|
||||||
|
If you add terms to a covered work in accord with this section, you
|
||||||
|
must place, in the relevant source files, a statement of the
|
||||||
|
additional terms that apply to those files, or a notice indicating
|
||||||
|
where to find the applicable terms.
|
||||||
|
|
||||||
|
Additional terms, permissive or non-permissive, may be stated in the
|
||||||
|
form of a separately written license, or stated as exceptions;
|
||||||
|
the above requirements apply either way.
|
||||||
|
|
||||||
|
8. Termination.
|
||||||
|
|
||||||
|
You may not propagate or modify a covered work except as expressly
|
||||||
|
provided under this License. Any attempt otherwise to propagate or
|
||||||
|
modify it is void, and will automatically terminate your rights under
|
||||||
|
this License (including any patent licenses granted under the third
|
||||||
|
paragraph of section 11).
|
||||||
|
|
||||||
|
However, if you cease all violation of this License, then your
|
||||||
|
license from a particular copyright holder is reinstated (a)
|
||||||
|
provisionally, unless and until the copyright holder explicitly and
|
||||||
|
finally terminates your license, and (b) permanently, if the copyright
|
||||||
|
holder fails to notify you of the violation by some reasonable means
|
||||||
|
prior to 60 days after the cessation.
|
||||||
|
|
||||||
|
Moreover, your license from a particular copyright holder is
|
||||||
|
reinstated permanently if the copyright holder notifies you of the
|
||||||
|
violation by some reasonable means, this is the first time you have
|
||||||
|
received notice of violation of this License (for any work) from that
|
||||||
|
copyright holder, and you cure the violation prior to 30 days after
|
||||||
|
your receipt of the notice.
|
||||||
|
|
||||||
|
Termination of your rights under this section does not terminate the
|
||||||
|
licenses of parties who have received copies or rights from you under
|
||||||
|
this License. If your rights have been terminated and not permanently
|
||||||
|
reinstated, you do not qualify to receive new licenses for the same
|
||||||
|
material under section 10.
|
||||||
|
|
||||||
|
9. Acceptance Not Required for Having Copies.
|
||||||
|
|
||||||
|
You are not required to accept this License in order to receive or
|
||||||
|
run a copy of the Program. Ancillary propagation of a covered work
|
||||||
|
occurring solely as a consequence of using peer-to-peer transmission
|
||||||
|
to receive a copy likewise does not require acceptance. However,
|
||||||
|
nothing other than this License grants you permission to propagate or
|
||||||
|
modify any covered work. These actions infringe copyright if you do
|
||||||
|
not accept this License. Therefore, by modifying or propagating a
|
||||||
|
covered work, you indicate your acceptance of this License to do so.
|
||||||
|
|
||||||
|
10. Automatic Licensing of Downstream Recipients.
|
||||||
|
|
||||||
|
Each time you convey a covered work, the recipient automatically
|
||||||
|
receives a license from the original licensors, to run, modify and
|
||||||
|
propagate that work, subject to this License. You are not responsible
|
||||||
|
for enforcing compliance by third parties with this License.
|
||||||
|
|
||||||
|
An "entity transaction" is a transaction transferring control of an
|
||||||
|
organization, or substantially all assets of one, or subdividing an
|
||||||
|
organization, or merging organizations. If propagation of a covered
|
||||||
|
work results from an entity transaction, each party to that
|
||||||
|
transaction who receives a copy of the work also receives whatever
|
||||||
|
licenses to the work the party's predecessor in interest had or could
|
||||||
|
give under the previous paragraph, plus a right to possession of the
|
||||||
|
Corresponding Source of the work from the predecessor in interest, if
|
||||||
|
the predecessor has it or can get it with reasonable efforts.
|
||||||
|
|
||||||
|
You may not impose any further restrictions on the exercise of the
|
||||||
|
rights granted or affirmed under this License. For example, you may
|
||||||
|
not impose a license fee, royalty, or other charge for exercise of
|
||||||
|
rights granted under this License, and you may not initiate litigation
|
||||||
|
(including a cross-claim or counterclaim in a lawsuit) alleging that
|
||||||
|
any patent claim is infringed by making, using, selling, offering for
|
||||||
|
sale, or importing the Program or any portion of it.
|
||||||
|
|
||||||
|
11. Patents.
|
||||||
|
|
||||||
|
A "contributor" is a copyright holder who authorizes use under this
|
||||||
|
License of the Program or a work on which the Program is based. The
|
||||||
|
work thus licensed is called the contributor's "contributor version".
|
||||||
|
|
||||||
|
A contributor's "essential patent claims" are all patent claims
|
||||||
|
owned or controlled by the contributor, whether already acquired or
|
||||||
|
hereafter acquired, that would be infringed by some manner, permitted
|
||||||
|
by this License, of making, using, or selling its contributor version,
|
||||||
|
but do not include claims that would be infringed only as a
|
||||||
|
consequence of further modification of the contributor version. For
|
||||||
|
purposes of this definition, "control" includes the right to grant
|
||||||
|
patent sublicenses in a manner consistent with the requirements of
|
||||||
|
this License.
|
||||||
|
|
||||||
|
Each contributor grants you a non-exclusive, worldwide, royalty-free
|
||||||
|
patent license under the contributor's essential patent claims, to
|
||||||
|
make, use, sell, offer for sale, import and otherwise run, modify and
|
||||||
|
propagate the contents of its contributor version.
|
||||||
|
|
||||||
|
In the following three paragraphs, a "patent license" is any express
|
||||||
|
agreement or commitment, however denominated, not to enforce a patent
|
||||||
|
(such as an express permission to practice a patent or covenant not to
|
||||||
|
sue for patent infringement). To "grant" such a patent license to a
|
||||||
|
party means to make such an agreement or commitment not to enforce a
|
||||||
|
patent against the party.
|
||||||
|
|
||||||
|
If you convey a covered work, knowingly relying on a patent license,
|
||||||
|
and the Corresponding Source of the work is not available for anyone
|
||||||
|
to copy, free of charge and under the terms of this License, through a
|
||||||
|
publicly available network server or other readily accessible means,
|
||||||
|
then you must either (1) cause the Corresponding Source to be so
|
||||||
|
available, or (2) arrange to deprive yourself of the benefit of the
|
||||||
|
patent license for this particular work, or (3) arrange, in a manner
|
||||||
|
consistent with the requirements of this License, to extend the patent
|
||||||
|
license to downstream recipients. "Knowingly relying" means you have
|
||||||
|
actual knowledge that, but for the patent license, your conveying the
|
||||||
|
covered work in a country, or your recipient's use of the covered work
|
||||||
|
in a country, would infringe one or more identifiable patents in that
|
||||||
|
country that you have reason to believe are valid.
|
||||||
|
|
||||||
|
If, pursuant to or in connection with a single transaction or
|
||||||
|
arrangement, you convey, or propagate by procuring conveyance of, a
|
||||||
|
covered work, and grant a patent license to some of the parties
|
||||||
|
receiving the covered work authorizing them to use, propagate, modify
|
||||||
|
or convey a specific copy of the covered work, then the patent license
|
||||||
|
you grant is automatically extended to all recipients of the covered
|
||||||
|
work and works based on it.
|
||||||
|
|
||||||
|
A patent license is "discriminatory" if it does not include within
|
||||||
|
the scope of its coverage, prohibits the exercise of, or is
|
||||||
|
conditioned on the non-exercise of one or more of the rights that are
|
||||||
|
specifically granted under this License. You may not convey a covered
|
||||||
|
work if you are a party to an arrangement with a third party that is
|
||||||
|
in the business of distributing software, under which you make payment
|
||||||
|
to the third party based on the extent of your activity of conveying
|
||||||
|
the work, and under which the third party grants, to any of the
|
||||||
|
parties who would receive the covered work from you, a discriminatory
|
||||||
|
patent license (a) in connection with copies of the covered work
|
||||||
|
conveyed by you (or copies made from those copies), or (b) primarily
|
||||||
|
for and in connection with specific products or compilations that
|
||||||
|
contain the covered work, unless you entered into that arrangement,
|
||||||
|
or that patent license was granted, prior to 28 March 2007.
|
||||||
|
|
||||||
|
Nothing in this License shall be construed as excluding or limiting
|
||||||
|
any implied license or other defenses to infringement that may
|
||||||
|
otherwise be available to you under applicable patent law.
|
||||||
|
|
||||||
|
12. No Surrender of Others' Freedom.
|
||||||
|
|
||||||
|
If 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 convey a
|
||||||
|
covered work so as to satisfy simultaneously your obligations under this
|
||||||
|
License and any other pertinent obligations, then as a consequence you may
|
||||||
|
not convey it at all. For example, if you agree to terms that obligate you
|
||||||
|
to collect a royalty for further conveying from those to whom you convey
|
||||||
|
the Program, the only way you could satisfy both those terms and this
|
||||||
|
License would be to refrain entirely from conveying the Program.
|
||||||
|
|
||||||
|
13. Use with the GNU Affero General Public License.
|
||||||
|
|
||||||
|
Notwithstanding any other provision of this License, you have
|
||||||
|
permission to link or combine any covered work with a work licensed
|
||||||
|
under version 3 of the GNU Affero General Public License into a single
|
||||||
|
combined work, and to convey the resulting work. The terms of this
|
||||||
|
License will continue to apply to the part which is the covered work,
|
||||||
|
but the special requirements of the GNU Affero General Public License,
|
||||||
|
section 13, concerning interaction through a network will apply to the
|
||||||
|
combination as such.
|
||||||
|
|
||||||
|
14. Revised Versions of this License.
|
||||||
|
|
||||||
|
The Free Software Foundation may publish revised and/or new versions of
|
||||||
|
the GNU 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 that a certain numbered version of the GNU General
|
||||||
|
Public License "or any later version" applies to it, you have the
|
||||||
|
option of following the terms and conditions either of that numbered
|
||||||
|
version or of any later version published by the Free Software
|
||||||
|
Foundation. If the Program does not specify a version number of the
|
||||||
|
GNU General Public License, you may choose any version ever published
|
||||||
|
by the Free Software Foundation.
|
||||||
|
|
||||||
|
If the Program specifies that a proxy can decide which future
|
||||||
|
versions of the GNU General Public License can be used, that proxy's
|
||||||
|
public statement of acceptance of a version permanently authorizes you
|
||||||
|
to choose that version for the Program.
|
||||||
|
|
||||||
|
Later license versions may give you additional or different
|
||||||
|
permissions. However, no additional obligations are imposed on any
|
||||||
|
author or copyright holder as a result of your choosing to follow a
|
||||||
|
later version.
|
||||||
|
|
||||||
|
15. Disclaimer of Warranty.
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
16. Limitation of Liability.
|
||||||
|
|
||||||
|
IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
|
||||||
|
WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
|
||||||
|
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.
|
||||||
|
|
||||||
|
17. Interpretation of Sections 15 and 16.
|
||||||
|
|
||||||
|
If the disclaimer of warranty and limitation of liability provided
|
||||||
|
above cannot be given local legal effect according to their terms,
|
||||||
|
reviewing courts shall apply local law that most closely approximates
|
||||||
|
an absolute waiver of all civil liability in connection with the
|
||||||
|
Program, unless a warranty or assumption of liability accompanies a
|
||||||
|
copy of the Program in return for a fee.
|
||||||
|
|
||||||
|
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
|
||||||
|
state 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 3 of the License, or
|
||||||
|
(at your option) any later version.
|
||||||
|
|
||||||
|
This program is distributed in the hope that it will be useful,
|
||||||
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
GNU General Public License for more details.
|
||||||
|
|
||||||
|
You should have received a copy of the GNU General Public License
|
||||||
|
along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
Also add information on how to contact you by electronic and paper mail.
|
||||||
|
|
||||||
|
If the program does terminal interaction, make it output a short
|
||||||
|
notice like this when it starts in an interactive mode:
|
||||||
|
|
||||||
|
<program> Copyright (C) <year> <name of author>
|
||||||
|
This program 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, your program's commands
|
||||||
|
might be different; for a GUI interface, you would use an "about box".
|
||||||
|
|
||||||
|
You should also get your employer (if you work as a programmer) or school,
|
||||||
|
if any, to sign a "copyright disclaimer" for the program, if necessary.
|
||||||
|
For more information on this, and how to apply and follow the GNU GPL, see
|
||||||
|
<http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
The GNU 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. But first, please read
|
||||||
|
<http://www.gnu.org/philosophy/why-not-lgpl.html>.
|
173
readme.txt
Executable file
173
readme.txt
Executable file
|
@ -0,0 +1,173 @@
|
||||||
|
=== WP Chinese Switcher ===
|
||||||
|
Contributors: Ono Oogami
|
||||||
|
Donate link: https://oogami.name/donate/
|
||||||
|
Tags: chinese, 中文, 繁体, 简体, 繁简转换, Chinese Simplified, Chinese Traditional, widget, sidebar
|
||||||
|
Requires at least: 4.5
|
||||||
|
Tested up to: 4.8.3
|
||||||
|
Stable tag: 1.1.16
|
||||||
|
|
||||||
|
Adds the language conversion function between Chinese Simplified and Chinese Traditional to your WP Blog. Released under GPL license.
|
||||||
|
|
||||||
|
== Description ==
|
||||||
|
This plugin is designed for Chinese bloggers. It adds the language conversion function between Chinese Simplified and Chinese Traditional to your WP Blog. The conversion is done in the server-side using a conversion table copied from Mediawiki. To use this plugin, just activate it and add the widget to the sidebar. The widget will output the Chinese Simplfied / Traditional Version's link of current page.
|
||||||
|
|
||||||
|
这个插件为中文Blogger设计, 提供完整的基于服务器端的中文繁简转换解决方案. 相比用Javascript进行客户端繁简转换, 本插件提供的转换功能更为专业和可靠, 支持六种中文语言: 简体中文(zh-hans), 繁体中文(zh-hant) , 台湾正体(zh-tw), 港澳繁体(zh-hk), 马新简体(zh-sg)和大陆简体(zh-cn); 并且提供更多其它特性. 插件使用的繁简转换表和核心转换技术均来源于Mediawiki, 最早由中文维基的zhengzhu同学发明.
|
||||||
|
|
||||||
|
使用方法: 激活插件后到侧边栏添加本插件的Widget即可. 插件将在后台"Settings"菜单里增加"Chinese Switcher"子菜单. 您可以到[我的博客](https://oogami.name/ "Demo Link")查看演示, 侧边栏的右上方为本插件输出的Widget效果. (CSS是另加的)
|
||||||
|
|
||||||
|
最新稳定版本: Version 1.1.16
|
||||||
|
|
||||||
|
* 修复 Wordpress 4.8.3 下搜索关键字繁简自动转换失效问题.
|
||||||
|
* 自动修改页面html的lang=""属性为合适的中文语言.
|
||||||
|
|
||||||
|
术语定义:
|
||||||
|
|
||||||
|
* 页面原始版本: 即您博客页面的原始内容, 不进行中文繁简转换, 内容繁简共存. 这个页面URL就是您原来的Permalink.
|
||||||
|
* 中文转换版本: 本插件生成的页面版本, 把数据库中内容进行中文转换后输出. 输出的中文类型共六种: 简体中文(zh-hans), 繁体中文(zh-hant) , 台湾正体(zh-tw), 港澳繁体(zh-hk), 马新简体(zh-sg)和大陆简体(zh-cn).
|
||||||
|
|
||||||
|
|
||||||
|
特性(Features):
|
||||||
|
|
||||||
|
* 繁简转换页面URL支持<code>/permalink/to/your/original/post/?variant=zh-xx</code>, <code>/permalink/to/your/original/post/zh-xx/</code>和<code>/zh-xx/permalink/to/your/original/post/</code>三种形式.(zh-xx为语言代码)
|
||||||
|
* 基于词语繁简转换. 如 "网络" 在台湾正体(zh-tw)里会被转换为 "網路".
|
||||||
|
* 自动在转换后版本页面加上noindex的meta标签, 避免搜索引擎重复索引.
|
||||||
|
* 使用Cookie保存访客语言偏好. 插件将记录浏览者最后一次访问时的页面语言, 在浏览者再次访问显示对应版本. (此功能默认不开启)
|
||||||
|
* 自动识别浏览器语言. 插件将识别用户浏览器首选中文语言, 并显示对应版本页面. (此功能默认不开启)
|
||||||
|
* 中文搜索关键词简繁体通用. 这将增强Wordpress的搜索功能, 使其同时在数据库里搜索关键词的简繁体版本. 例如, 假如访客在浏览您博客页面时通过表单提交了关键词为 "網路" 的搜索, 如果您的文章里有 "网络" 这个词, 则这篇文章也会被放到搜索结果里返回. (此功能默认不开启)
|
||||||
|
* 后台可设置不转换部分HTML标签里中文.
|
||||||
|
* Self-documented codes, easy to modify base your own needs.
|
||||||
|
|
||||||
|
如果使用缓存插件 (WP Super cache, Hyper Cache, etc), 上面部分功能(识别浏览器语言, 使用Cookie保存访客语言偏好)可能存在兼容性问题。
|
||||||
|
|
||||||
|
== Installation ==
|
||||||
|
Upload the WPCS plugin to your blog, Activate it,
|
||||||
|
|
||||||
|
To use this plugin, just add it's widget to the sidebar. The widget will output the Chinese Simplfied/ Traditional Version's link of current page. You can also use the <code><?php wpcs_output_navi(); ?> </code> tag in your template.
|
||||||
|
|
||||||
|
上传插件, 激活. 然后直接到侧边栏里添加本插件的Widget即可. Widget里已经定义好了相应元素的class
|
||||||
|
和id, 请自己加CSS. 您也可以在模板中调用 <code><?php wpcs_output_navi(); ?> </code> 标签.
|
||||||
|
|
||||||
|
Widget将输出当前页面各种中文版本的导航链接. 如果您想自定义输出内容, 可以参考下面的代码, 在模板里添加.
|
||||||
|
|
||||||
|
<code>
|
||||||
|
<?php
|
||||||
|
//必须声明为全局变量,因为WP通过函数载入模板的...
|
||||||
|
|
||||||
|
global $wpcs_target_lang; //当前页面语言的中文代码, 例如zh-cn; 如果是原始版本则为false.
|
||||||
|
global $wpcs_noconversion_url; //当前页面原始版本链接, 即原来的Permalink.
|
||||||
|
global $wpcs_langs_urls; //关联数组, 含有当前页面各个中文语言版本URL, 键值为语言代码(如zh-tw).
|
||||||
|
global $wpcs_langs; //二维数组, 保存有插件所有支持的中文语言相关信息, 外层键值为语言代码(如zh-tw). 内层键值为连续索引.
|
||||||
|
|
||||||
|
$output = '<div id="wpcs_output">';
|
||||||
|
$output .= '<span id="wpcs_original_link" class="' .
|
||||||
|
( $wpcs_target_lang == false ? 'wpcs_current_lang' : 'wpcs_lang' ) .
|
||||||
|
'" ><a href="' . $wpcs_noconversion_url . '" title="不转换">不转换</a></span>';
|
||||||
|
|
||||||
|
foreach( $wpcs_langs_urls as $key => $value ) {
|
||||||
|
$output .= '<span id="wpcs_' . $key . '" class="' . //您可以根据自己需要修改, 如把span改为li
|
||||||
|
( $wpcs_target_lang == $key ? 'wpcs_current_lang' : 'wpcs_lang' ) .
|
||||||
|
'" ><a href="' . $value .
|
||||||
|
'" title="' . $wpcs_langs[$key][2] . '" >' . $wpcs_langs[$key][2] . '</a></span>'; // $wpcs_langs[$key][2]为语言名称, 如 "简体中文", "港澳繁體", "臺灣正體"等
|
||||||
|
}
|
||||||
|
|
||||||
|
$output .= '</div>';
|
||||||
|
echo $output;
|
||||||
|
|
||||||
|
?>
|
||||||
|
</code>
|
||||||
|
|
||||||
|
设置本插件请到后台"Options"菜单里的"Chinese Switcher"子菜单页.
|
||||||
|
|
||||||
|
== Screenshots ==
|
||||||
|
Not yet. But you can see demo in [my blog](https://oogami.name/ "Demo Link")
|
||||||
|
|
||||||
|
== Frequently Asked Questions ==
|
||||||
|
|
||||||
|
= Why choosing this plugin =
|
||||||
|
|
||||||
|
I. 相比Javascrip繁简转换, 服务器端繁简转换具有非常多优点. 特别在Javascript受限制场合
|
||||||
|
(如Opera Mini/ iPhone等移动浏览器), javascript的繁简转换毫无作用, 而本插件则完全不受影响.
|
||||||
|
|
||||||
|
II. 本插件完全中文化. 从输出的Widget到后台菜单, 代码里注释都是中文; 后台管理界面内置中文繁简自适应和切换功能.
|
||||||
|
您无需任何适应就能使用本插件并根据自己需要修改代码.
|
||||||
|
|
||||||
|
III. 这个插件是作者为自己的[Blog](https://oogami.name/ "Author Homepage")写的, 作者有多年独立博客写作历史;
|
||||||
|
熟悉Wordpress, LAMP和Blog的相关技术和文化; 会一直维护本插件并定期发布稳定版本, 保持与最新版Wordpress的兼容性.
|
||||||
|
|
||||||
|
== Changelog ==
|
||||||
|
|
||||||
|
= 1.1.16 =
|
||||||
|
* 2017.11.07
|
||||||
|
* 修复 Wordpress 4.8.3 下搜索关键字繁简自动转换失效问题.
|
||||||
|
* 自动修改页面html的lang=""属性为合适的中文语言.
|
||||||
|
|
||||||
|
= 1.1.15 =
|
||||||
|
* 2016.04.22
|
||||||
|
* 修复 Wordpress 4.5 下搜索关键字繁简自动转换失效问题.
|
||||||
|
* 修复一些其它 bug.
|
||||||
|
|
||||||
|
= 1.1.14.2 =
|
||||||
|
* 2014.11.13
|
||||||
|
* 修复一个 bug
|
||||||
|
|
||||||
|
= 1.1.14.1 =
|
||||||
|
* 2013.11.08
|
||||||
|
* 修复1.1.14版本中引入的一个Bug (Wordpress未开启永久链接时繁简转换页里"首页"链接的url错误).
|
||||||
|
|
||||||
|
= 1.1.14 =
|
||||||
|
* 2013.11.05
|
||||||
|
* 新功能: 允许不转换所有lang="ja"的html tag里的内容.(默认关闭)
|
||||||
|
* 新功能: 不转换html中位于<!--wpcs_NC_START-->和<!!--wpcs_NC_END-->之间的内容.
|
||||||
|
* 新功能: 在Wordpress文章的html编辑器中增加一个Quick Tag, 方便快速插入<!--wpcs_NC_START-->和<!--wpcs_NC_END-->的不转换标记
|
||||||
|
* 功能增强: "不转换部分HTML标签中内容"功能现在支持使用CSS选择器
|
||||||
|
* 修复WP Super Cache兼容插件某些情况下无法正常工作的bug
|
||||||
|
* 修复某些情況下"中文搜索关键词简繁体通用"功能无法工作的bug
|
||||||
|
* 修复一些其它bug
|
||||||
|
|
||||||
|
= 1.1.13 =
|
||||||
|
* 2013.04.16
|
||||||
|
* 在<body>标签的class属性里添加当前显示页面的中文语言代码,可以用其对不同繁简语言页面应用独立的css样式
|
||||||
|
* 修复首页显示固定Page时繁简转换页面仍然为最新posts的错误。
|
||||||
|
|
||||||
|
= 1.1.12 =
|
||||||
|
* 2012.09.18
|
||||||
|
* 增加对wp cache plugin插件兼容性支持
|
||||||
|
|
||||||
|
= 1.1.10 =
|
||||||
|
* 2011.04.19
|
||||||
|
* 修复Bug
|
||||||
|
|
||||||
|
= 1.1.9 =
|
||||||
|
* 2010.9.7
|
||||||
|
* 修复大量Bug. 推荐所有人更新.
|
||||||
|
|
||||||
|
= 1.1.8 =
|
||||||
|
* 2010.7.14
|
||||||
|
* 修复wordpress安装在子目录时可能出现的繁简转换頁永久链接错误.
|
||||||
|
* 修复开启SSL时繁简转换頁永久链接错误.
|
||||||
|
* 在rel="canonical"的link标签里输出页面原始链接
|
||||||
|
* 优化代码
|
||||||
|
* 兼容Wordpress 3.0
|
||||||
|
|
||||||
|
= 1.1.7 =
|
||||||
|
* 2009.12
|
||||||
|
* 优化代码
|
||||||
|
* Bugs fix
|
||||||
|
|
||||||
|
= 1.1.6 =
|
||||||
|
* 2009.09.02
|
||||||
|
* 繁简转换页面增加一种<code>/zh-tw/original/permalink/</code>的URL形式.
|
||||||
|
* 允许自定义各种中文语言显示名称
|
||||||
|
* 优化代码
|
||||||
|
|
||||||
|
= 1.1.5 =
|
||||||
|
* 2009.08.02
|
||||||
|
* Bugs fix
|
||||||
|
* 允许自定义"不转换"标签名称
|
||||||
|
|
||||||
|
= 1.1.4 =
|
||||||
|
* 2009.06.30
|
||||||
|
* Bugs fix
|
||||||
|
* 大幅优化代码
|
||||||
|
|
||||||
|
更早版本略- -
|
23
search-variant.js
Executable file
23
search-variant.js
Executable file
|
@ -0,0 +1,23 @@
|
||||||
|
/*
|
||||||
|
Powered by WP Chinese Switcher Plugin ( https://oogami.name/project/wpcs/ )
|
||||||
|
Search Variant JS
|
||||||
|
|
||||||
|
This JS try to get your blog's search form element , and append a '<input type="hidden" name="variant" value="VALUE" />' child to this element . So If you run a search , browser will submit the "variant" var to server , the "variant" 's value is set by your current Chinese Language ( 'zh-hans' for Chinese Simplfied or 'zh-hant' for Chinese Traditional etc...)
|
||||||
|
|
||||||
|
If you are in a page with no Chinese Switcher, this file will not be loaded .
|
||||||
|
|
||||||
|
*/
|
||||||
|
|
||||||
|
window.addEventListener('load', function() {
|
||||||
|
if(typeof wpcs_target_lang == 'undefined') return;
|
||||||
|
|
||||||
|
var theTextNode = document.querySelector('input[name="s"]');
|
||||||
|
if (theTextNode) {
|
||||||
|
var wpcs_input_variant = document.createElement("input");
|
||||||
|
wpcs_input_variant.id = 'wpcs_input_variant';
|
||||||
|
wpcs_input_variant.type = 'hidden';
|
||||||
|
wpcs_input_variant.name = 'variant';
|
||||||
|
wpcs_input_variant.value = wpcs_target_lang;
|
||||||
|
theTextNode.parentNode.appendChild(wpcs_input_variant);
|
||||||
|
}
|
||||||
|
});
|
1
search-variant.min.js
vendored
Executable file
1
search-variant.min.js
vendored
Executable file
|
@ -0,0 +1 @@
|
||||||
|
window.addEventListener("load",function(){if("undefined"!=typeof wpcs_target_lang){var b=document.querySelector('input[name="s"]');if(b){var a=document.createElement("input");a.id="wpcs_input_variant";a.type="hidden";a.name="variant";a.value=wpcs_target_lang;b.parentNode.appendChild(a)}}});
|
1721
simple_html_dom.php
Executable file
1721
simple_html_dom.php
Executable file
File diff suppressed because it is too large
Load diff
472
wp-chinese-switcher-admin.php
Executable file
472
wp-chinese-switcher-admin.php
Executable file
|
@ -0,0 +1,472 @@
|
||||||
|
<?php
|
||||||
|
class wpcs_Admin {
|
||||||
|
var $base = '';
|
||||||
|
var $is_submitted = false;
|
||||||
|
var $is_success = false;
|
||||||
|
var $is_error = false;
|
||||||
|
var $message = '';
|
||||||
|
var $options = false;
|
||||||
|
var $langs = false;
|
||||||
|
var $url = '';
|
||||||
|
var $admin_lang = false;
|
||||||
|
|
||||||
|
function wpcs_Admin() {
|
||||||
|
return $this->__construct();
|
||||||
|
}
|
||||||
|
|
||||||
|
function __construct() {
|
||||||
|
global $wpcs_options, $wpcs_langs;
|
||||||
|
$locale = str_replace('_', '-', strtolower(get_locale()));
|
||||||
|
if($wpcs_options === false) $wpcs_options = get_option('wpcs_options');
|
||||||
|
$this->langs = &$wpcs_langs;
|
||||||
|
$this->options = $wpcs_options;
|
||||||
|
|
||||||
|
if( !empty($_GET['variant']) && in_array($_GET['variant'], array_keys($this->langs)) )
|
||||||
|
$this->admin_lang = $_GET['variant'];
|
||||||
|
else if( in_array($locale, array_keys($this->langs)) )
|
||||||
|
$this->admin_lang = $locale;
|
||||||
|
$this->base = str_replace(basename( __FILE__), "", plugin_basename(__FILE__));
|
||||||
|
$this->url = admin_url('options-general.php?page=' . $this->base . 'wp-chinese-switcher.php');
|
||||||
|
add_filter('plugin_action_links', array(&$this, 'action_links'), 10, 2);
|
||||||
|
if (function_exists('add_options_page')) {
|
||||||
|
add_options_page('WP Chinese Switcher', 'Chinese Switcher', 'manage_options', $this->base . 'wp-chinese-switcher.php', array(&$this, 'display_options'));
|
||||||
|
}
|
||||||
|
|
||||||
|
wp_enqueue_script('jquery');
|
||||||
|
}
|
||||||
|
|
||||||
|
function action_links($links, $file) {
|
||||||
|
if ($file == $this->base . 'wp-chinese-switcher.php')
|
||||||
|
$links[] = '<a href="options-general.php?page=' . $file . '" title="Change Settings">Settings</a>';
|
||||||
|
return $links;
|
||||||
|
}
|
||||||
|
|
||||||
|
function install_cache_module() {
|
||||||
|
global $wpcs_options;
|
||||||
|
|
||||||
|
$ret = true;
|
||||||
|
|
||||||
|
$file = file_get_contents( dirname(__FILE__) . '/wpcs-wp-super-cache-plugin.php' );
|
||||||
|
|
||||||
|
$used_langs = 'Array()';
|
||||||
|
if( count($wpcs_options['wpcs_used_langs']) > 0 ) {
|
||||||
|
$used_langs = "Array('" . implode("', '", $wpcs_options['wpcs_used_langs']) . "')";
|
||||||
|
}
|
||||||
|
$file = str_replace( '##wpcs_auto_language_recong##',
|
||||||
|
$wpcs_options['wpcs_auto_language_recong'], $file );
|
||||||
|
$file = str_replace( '##wpcs_used_langs##',
|
||||||
|
$used_langs, $file );
|
||||||
|
|
||||||
|
$fp = @fopen( WP_PLUGIN_DIR . '/wp-super-cache/plugins/wpcs-wp-super-cache-plugin.php', 'w' );
|
||||||
|
if( $fp ) {
|
||||||
|
fputs( $fp, $file );
|
||||||
|
fclose( $fp );
|
||||||
|
} else {
|
||||||
|
$ret = false;
|
||||||
|
}
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
function uninstall_cache_module() {
|
||||||
|
return unlink(WP_PLUGIN_DIR . '/wp-super-cache/plugins/wpcs-wp-super-cache-plugin.php');
|
||||||
|
}
|
||||||
|
|
||||||
|
function get_cache_status() {
|
||||||
|
if( !is_plugin_active('wp-super-cache/wp-cache.php')) {
|
||||||
|
return 0; // not activated
|
||||||
|
}
|
||||||
|
if( ! file_exists(WP_PLUGIN_DIR . '/wp-super-cache/plugins/wpcs-wp-super-cache-plugin.php') ) {
|
||||||
|
return 1;
|
||||||
|
}
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
function display_options() {
|
||||||
|
global $wp_rewrite;
|
||||||
|
|
||||||
|
if( !empty($_POST['wpcso_uninstall_nonce']) ) {
|
||||||
|
delete_option('wpcs_options');
|
||||||
|
update_option('rewrite_rules', '');
|
||||||
|
echo '<div class="wrap"><h2>WP Chinese Switcher Setting</h2><div class="updated">Uninstall Successfully. 卸载成功, 現在您可以到<a href="plugins.php">插件菜单</a>里禁用本插件.</div></div>';
|
||||||
|
return;
|
||||||
|
} else if($this->options === false) {
|
||||||
|
echo '<div class="wrap"><h2>WP Chinese Switcher Setting</h2><div class="error">错误: 没有找到配置信息, 可能由于Wordpress系统错误或者您已经卸载了本插件. 您可以<a href="plugins.php">尝试</a>禁用本插件后再重新激活.</div></div>';
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( !empty($_POST['toggle_cache']) ) {
|
||||||
|
if( $this->get_cache_status() == 1 ) {
|
||||||
|
$result = $this->install_cache_module();
|
||||||
|
if( $result )
|
||||||
|
echo '<div class="updated fade" style=""><p>安装WP Super Cache 兼容成功.</p></div>';
|
||||||
|
else
|
||||||
|
echo '<div class="error" style=""><p>错误: 安装WP Super Cache 兼容失败.</p></div>';
|
||||||
|
} else if( $this->get_cache_status() == 2 ) {
|
||||||
|
$result = $this->uninstall_cache_module();
|
||||||
|
if( $result )
|
||||||
|
echo '<div class="updated fade" style=""><p>卸载WP Super Cache 兼容成功.</p></div>';
|
||||||
|
else
|
||||||
|
echo '<div class="error" style=""><p>错误: 卸载WP Super Cache 兼容失败.</p></div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if(!empty($_POST['wpcso_submitted'])) {
|
||||||
|
$this->is_submitted = true;
|
||||||
|
$this->process();
|
||||||
|
|
||||||
|
if( $this->get_cache_status() == 2 )
|
||||||
|
$this->install_cache_module();
|
||||||
|
}
|
||||||
|
?>
|
||||||
|
<script type="text/javascript">
|
||||||
|
//<!--
|
||||||
|
function toggleVisibility(id) {
|
||||||
|
var e = document.getElementById(id);
|
||||||
|
if( !e ) return;
|
||||||
|
if(e.style.display == "block")
|
||||||
|
e.style.display = "none";
|
||||||
|
else
|
||||||
|
e.style.display = "block";
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
//-->
|
||||||
|
</script>
|
||||||
|
<div class="wrap"><div style="padding: 2px 5px 0 0;">Select Admin Language: <?php echo $this->navi(); ?></div>
|
||||||
|
<h2>WP Chinese Switcher Settings</h2>
|
||||||
|
<?php ob_start(); ?>
|
||||||
|
<?php if($this->is_submitted && $this->is_success) { ?>
|
||||||
|
<div class="updated fade" style=""><p><?php echo $this->message; ?></p></div>
|
||||||
|
<?php } else if($this->is_submitted && $this->is_error) { ?>
|
||||||
|
<div class="error" style=""><p><?php echo $this->message; ?></p></div>
|
||||||
|
<?php } ?>
|
||||||
|
<p>版本 <?php echo wpcs_VERSION; ?>. <a href="https://wenpai.org/" title="文派开源" target="_blank" >文派开源</a> | <a href="https://wpchineseswitcher.com" target="_blank" title="插件主页" >插件主页</a> </p>
|
||||||
|
<div style="padding-top:20px;padding-bottom:20px;"><b>单击选项名查看帮助!</b></div>
|
||||||
|
<form id="wpcso_form" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>" ><input type="hidden" name="wpcso_submitted" value="1" />
|
||||||
|
<table class="form-table"><tbody>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_nt');">自定义"不转换"标签名: </a></td>
|
||||||
|
<td><!--wpcs_NC_START-->
|
||||||
|
<input type="text" style="width: 100px;" name="wpcso_no_conversion_tip" id="wpcso_no_conversion_tip" value="<?php echo esc_html($this->options['nctip']); ?>" /><!--wpcs_NC_END-->
|
||||||
|
<div id="wpcs_help_nt" style="display: none;">本插件输出的widget中将包含当前页面原始版本链接, 您可以在这里自定义其显示的名称. 如果留空则使用默认的"不转换".</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_uls');">对下面几种中文开启转换功能:</a></td>
|
||||||
|
<td><!--wpcs_NC_START-->
|
||||||
|
<?php foreach($this->langs as $key => $value) { ?>
|
||||||
|
<input type="checkbox" id="wpcso_variant_<?php echo $key; ?>" name="wpcso_variant_<?php echo $key; ?>"<?php echo in_array($key, $this->options['wpcs_used_langs']) ? ' checked="checked"' : ''; ?> />
|
||||||
|
<label for="wpcso_variant_<?php echo $key; ?>"><?php $str = $value[2] . ' (' . $key . ')'; echo str_replace(' ', ' ', str_pad($str, 14 + strlen($str) - mb_strlen($str)));?></label>
|
||||||
|
<input type="text" style="width: 100px;" name="<?php echo $this->langs[$key][1]; ?>" value="<?php echo !empty($this->options[$value[1]]) ? esc_html($this->options[$value[1]]) : ''; ?>" /><br />
|
||||||
|
<?php } ?><!--wpcs_NC_END-->
|
||||||
|
<div id="wpcs_help_uls" style="display: none;">未选中的中文语言将不被使用,此项设置为全局设置.您应该选中至少一种中文语言,否则本插件全部功能都不会工作.
|
||||||
|
在每个复选框后的文本输入框里可以输入该语言自定义名称, 如果留空会使用默认值. <!--wpcs_NC_START-->("简体中文", "繁體中文"...)<!--wpcs_NC_END--></div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td scope="row" valign="top" width="30%" ><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_sc');" >中文搜索关键词简繁转换: </a></td>
|
||||||
|
<td>
|
||||||
|
<select id="wpcso_search_conversion" value="" name="wpcso_search_conversion" style="width: 250px;">
|
||||||
|
<option value="2"<?php echo $this->options['wpcs_search_conversion'] == 2 ? ' selected="selected"' : ''; ?>>开启</option>
|
||||||
|
<option value="0"<?php echo ( $this->options['wpcs_search_conversion'] != 2 && $this->options['wpcs_search_conversion'] != 1 ) ? ' selected="selected"' : ''; ?>>关闭</option>
|
||||||
|
<option value="1"<?php echo $this->options['wpcs_search_conversion'] == 1 ? ' selected="selected"' : ''; ?>>仅当中文语言不是"不转换"时开启(默认值)</option>
|
||||||
|
</select>
|
||||||
|
<div id="wpcs_help_sc" style="display: none;">本选项将增强Wordpress搜索功能, 使其对中文关键词繁简统一处理.
|
||||||
|
例如搜索"<!--wpcs_NC_START--><code>网络</code><!--wpcs_NC_END-->"时, 数据库里含有"<!--wpcs_NC_START--><code>网络</code><!--wpcs_NC_END-->",
|
||||||
|
"<!--wpcs_NC_START--><code >網路</code><!--wpcs_NC_END-->" 和"<!--wpcs_NC_START--><code >網絡</code><!--wpcs_NC_END-->"的文章都会放到搜索结果里返回.
|
||||||
|
支持多个中文词语搜索, 如搜索"<!--wpcs_NC_START--><code>简体 繁体</code><!--wpcs_NC_END-->"时,
|
||||||
|
含有"<!--wpcs_NC_START--><code>簡體</code><!--wpcs_NC_END-->"和"<!--wpcs_NC_START--><code>繁體</code><!--wpcs_NC_END-->"两个词的文章也会被返回.
|
||||||
|
(此功能将增加搜索时数据库负担)</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_ua');">识别浏览器中文语言动作:</a></td>
|
||||||
|
<td>
|
||||||
|
<select id="wpcso_browser_redirect" value="" name="wpcso_browser_redirect" style="width: 250px;">
|
||||||
|
<option value="2"<?php echo $this->options['wpcs_browser_redirect'] == 2 ? ' selected="selected"' : ''; ?>>直接显示对应繁简版本内容</option>
|
||||||
|
<option value="1"<?php echo $this->options['wpcs_browser_redirect'] == 1 ? ' selected="selected"' : ''; ?>>跳转到对应繁简版本页面</option>
|
||||||
|
<option value="0"<?php echo $this->options['wpcs_browser_redirect'] == 0 ? ' selected="selected"' : ''; ?>>关闭此功能(默认值)</option>
|
||||||
|
</select> <input type="checkbox" name="wpcso_auto_language_recong" id="wpcso_auto_language_recong" value=""<?php echo $this->options['wpcs_auto_language_recong'] == 1 ? ' checked="checked"' : ''; ?> /><label for="wpcso_auto_language_recong">允许繁简语系内部通用.</label>
|
||||||
|
<div id="wpcs_help_ua" style="display: none;"><b>本项设置不会应用于搜索引擎.</b> 如果本选项设置不为"关闭", 程序将识别访客浏览器首选中文语言.
|
||||||
|
如果设置为"跳转到对应繁简版本页面", 程序将302重定向到当前页面的访客浏览器首选语言版本.
|
||||||
|
如果设置为"直接显示对应繁简版本内容",程序将直接显示对应中文转换版本内容而不进行重定向. <b>如果本选项设置为"直接显示对应繁简版本内容",
|
||||||
|
必须把下一个选项"使用Cookie保存并识别用户语言偏好"关闭或也设置为直接显示对应繁简版本,否则本插件只会在浏览器第一次访问时直接显示,
|
||||||
|
其他情况跳转.</b>.<br /><br />关于"<b>允许繁简语系内部通用</b>"复选项说明: 只有当"识别浏览器动作"选项不为"关闭"时该复选框才有效. 具体说明,
|
||||||
|
假如您在本页第一项设置里禁用了部分中文,如zh-hk, 那么浏览器里语言设置里只有"<!--wpcs_NC_START-->港澳繁體<!--wpcs_NC_END-->"的用户访问时默认不会被识别;
|
||||||
|
但如果选中了此复选框,只要您开启了"<!--wpcs_NC_START-->繁體中文<!--wpcs_NC_END-->", "<!--wpcs_NC_START-->台灣正體<!--wpcs_NC_END-->"
|
||||||
|
或 "<!--wpcs_NC_START-->港澳繁體<!--wpcs_NC_END-->" 中任一种语言, 浏览器使用这三种语言的用户都会被本插件识别并根据选项做出动作.
|
||||||
|
(但此时页面被转换后的语言可能并不是用户浏览器设置的那种, 而是您开启的那种繁体语言). 简体语系同理.<br /></div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr><td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_co');">使用Cookie保存并识别用户语言偏好:</a></td>
|
||||||
|
<td>
|
||||||
|
<select id="wpcso_use_cookie_variant" value="" name="wpcso_use_cookie_variant" style="width: 250px;">';
|
||||||
|
<option value="2"<?php echo $this->options['wpcs_use_cookie_variant'] == 2 ? ' selected="selected"' : ''; ?>>直接显示对应繁简版本内容</option>
|
||||||
|
<option value="1"<?php echo $this->options['wpcs_use_cookie_variant'] == 1 ? ' selected="selected"' : ''; ?>>跳转到对应繁简版本页面</option>
|
||||||
|
<option value="0"<?php echo $this->options['wpcs_use_cookie_variant'] == 0 ? ' selected="selected"' : ''; ?>>关闭此功能(默认值)</option>
|
||||||
|
</select>
|
||||||
|
<div id="wpcs_help_co" style="display: none;"><b>本项设置不会应用于搜索引擎.</b> 如果开启这项设置,本插件将自动保存访客的语言选择.举例而言,
|
||||||
|
当用户通过 "<?php echo $this->options['wpcs_use_permalink'] ?
|
||||||
|
esc_html(trailingslashit(wpcs_link_conversion(get_option('home') . '/', 'zh-tw'))) :
|
||||||
|
esc_html(wpcs_link_conversion(get_option('home') . '/', 'zh-tw')); ?>"
|
||||||
|
这个链接访问了您博客的台湾繁体版本时,程序将保存信息到Cookie中. 如果该用户重启浏览器并通过 "<?php echo get_option('home'); ?>/" 再次访问您博客时,
|
||||||
|
则会被自动跳转到台湾繁体版本的地址. 如果设置为"直接显示对应繁简版本",则不会进行跳转.
|
||||||
|
(参见上一项的说明)<br /><br /><b>本选项和上一项"识别浏览器"选项与缓存插件不兼容</b>.如果您使用了WP Super Cache/ Hyper Cache之类Cache插件,
|
||||||
|
请把这两项设置均设为"关闭",否则这两个功能不但不会正常工作, 而且可能造成缓存异常.<br /></div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_nc');">不转换文章中某些HTML标签里中文:</a></td>
|
||||||
|
<td>
|
||||||
|
<input type="text" value="<?php echo $this->options['wpcs_no_conversion_tag']; ?>" style="width: 250px;" name="wpcso_no_conversion_tag" id="wpcso_no_conversion_tag" /> (默认空)
|
||||||
|
<div id="wpcs_help_nc" style="display: none;">这里输入的HTML标签里内容将不进行中文繁简转换(仅适用文章内容), 保持原样输出. 请输入HTML标签名, 如<code>pre</code>;
|
||||||
|
多个HTML标签之间以 <code>,</code> 分割, 如 <code>pre,code</code>. 支持部分基本的<a href="http://www.w3schools.com/cssref/css_selectors.asp" target="_blank">CSS选择器</a>的DOM筛选语法,如<code>div.nocc</code>,
|
||||||
|
<code>.class1,div#para1</code>, <code>table,span.nocc,div[attr="hello"]</code>. 如果遇到html错误, 请关闭此选项.</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_nc_ja');">不转换日语(lang="ja")的HTML标签里内容:</a></td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" name="wpcso_no_conversion_ja" id="wpcso_no_conversion_ja" <?php echo !empty($this->options['wpcs_no_conversion_ja']) ? ' checked="checked"' : ''; ?> />
|
||||||
|
<label for="wpcso_no_conversion_ja">(默认关闭)</label>
|
||||||
|
<div id="wpcs_help_nc_ja" style="display: none;">如果选中此选项, 文章内容中用 lang="ja" 标记为日本语的html tag将不进行繁简转换, 保持原样输出.
|
||||||
|
例如: "<!--wpcs_NC_START--><code lang="ja"><span lang="ja">あなたを、お連れしましょうか? この町の願いが叶う場所に。</span></code><!--wpcs_NC_END-->"
|
||||||
|
中的CJK汉字<!--wpcs_NC_START--><code lang="ja">連</code><!--wpcs_NC_END-->和<!--wpcs_NC_START--><code lang="ja">叶</code><!--wpcs_NC_END-->将不会进行繁简转换.
|
||||||
|
如果遇到html错误, 请关闭此选项. </div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_no_conversion_qtag');">不转换HTML中任意內容TAG:</a></td>
|
||||||
|
<td>
|
||||||
|
<!--wpcs_NC_START--><code><!--wpcs_NC_START-->爱与正义, 剑與魔法, 光榮與夢想<!--wpcs_NC_END--></code><!--wpcs_NC_END--><br />
|
||||||
|
<input type="checkbox" name="wpcso_no_conversion_qtag" id="wpcso_no_conversion_qtag" <?php echo !empty($this->options['wpcs_no_conversion_qtag']) ? ' checked="checked"' : ''; ?> />
|
||||||
|
<label for="wpcso_no_conversion_qtag">在Wordpress文章html编辑器中添加"不转换中文"的Quick tag</label>
|
||||||
|
<div id="wpcs_no_conversion_qtag" style="display: none;">
|
||||||
|
HTML中所有位于 <code><!--wpcs_NC_START--></code> 和 <code><!--wpcs_NC_END--></code>之间的内容将不会进行繁简转换, 保持原样输出.
|
||||||
|
您可以在模板或post内容中使用这个标签.<br />您可以选择在Wordpress的文章编辑器(html模式)工具栏中插入一个按钮(显示为"wpcs_NC"), 方便快速在文章中插入这个标签.
|
||||||
|
</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_pl');">繁简转换页面永久链接格式:</a></td><td>
|
||||||
|
<label><input type="radio" name="wpcso_use_permalink" value="0"<?php echo $this->options['wpcs_use_permalink'] == 0 ? ' checked="checked"' : ''; ?> /> <code><?php echo get_option('home') . (empty($wp_rewrite->permalink_structure) ? '/?p=123&variant=zh-tw' : $wp_rewrite->permalink_structure . '?variant=zh-tw'); ?></code> (默认)</label><br />
|
||||||
|
<label><input type="radio" name="wpcso_use_permalink" value="1"<?php echo empty($wp_rewrite->permalink_structure) ? ' disabled="disabled"' : ''; ?><?php echo $this->options['wpcs_use_permalink'] == 1 ? ' checked="checked"' : ''; ?> /> <code><?php echo get_option('home') . user_trailingslashit(trailingslashit($wp_rewrite->permalink_structure) . 'zh-tw') . ( empty($wp_rewrite->permalink_structure) ? '/' : '' ); ?></code></label><br />
|
||||||
|
<label><input type="radio" name="wpcso_use_permalink" value="2"<?php echo empty($wp_rewrite->permalink_structure) ? ' disabled="disabled"' : ''; ?><?php echo $this->options['wpcs_use_permalink'] == 2 ? ' checked="checked"' : ''; ?> /> <code><?php echo get_option('home') . '/zh-tw' . $wp_rewrite->permalink_structure . ( empty($wp_rewrite->permalink_structure) ? '/' : '' ); ?></code></label><br />
|
||||||
|
<div id="wpcs_help_pl" style="display: none;">更改此项设置前,<b>请仔细阅读下面的说明:</b><br />本项设置决定插件生成的繁简转换页面Permalink.
|
||||||
|
默认的形式为您原始Permalink后加上?variant=zh-tw参数.(zh-tw为当前请求的语言代码) .您可以修改这个permalink形式.本插件提供两种非默认的Permalink格式:
|
||||||
|
您原始的Permalink后加上/zh-tw 或/zh-tw/; 或/zh-tw后加上您原来Permalink. 两种区别在于中文语言代码(zh-tw)附加在您原来Permalink的末尾或开头.
|
||||||
|
URL末尾是否有 / 取决于您的Wordpress永久链接末尾是否有/. 但<b>首页的繁简转换版本URL末尾永远有 "/"</b> . 如果您的Wordpress未开启永久链接,
|
||||||
|
本项设置只能选择第一种URL形式. </div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_ob');">对页面内容整体转换:</a></td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="wpcso_use_fullpage_conversion" name="wpcso_use_fullpage_conversion"<?php echo $this->options['wpcs_use_fullpage_conversion'] == 1 ? ' checked="checked"' : ''; ?> /> <label for="wpcso_use_fullpage_conversion">(默认开启)</label>
|
||||||
|
<div id="wpcs_help_ob" style="display: none;">
|
||||||
|
开启此选项后,插件将对Wordpress输出的全部页面内容进行中文整体转换(使用ob_start和ob_flush函数),
|
||||||
|
这将极大提高页面生成速度并减少资源使用.但也可能造成意想不到问题.如果遇到异常(包括中文转换错误, HTML页面错误或php错误等),请关闭此选项.</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_credit');">您喜欢这个插件吗?</a></td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" id="wpcso_trackback_plugin_author" name="wpcso_trackback_plugin_author"<?php echo $this->options['wpcs_trackback_plugin_author'] != 0 ? ' checked="checked"' : ''; ?> value="<?php echo $this->options['wpcs_trackback_plugin_author'] == 2 ? '2' : '1'; ?>" /><label for="wpcso_trackback_plugin_author"> 告诉作者我在使用本插件(发送一个trackback)</label><br />
|
||||||
|
<input type="checkbox" id="wpcso_add_author_link" name="wpcso_add_author_link"<?php echo $this->options['wpcs_add_author_link'] >0 ? ' checked="checked"' : ''; ?> value="" /><label for="wpcso_add_author_link"> 在博客链接里添加插件作者主页</label>
|
||||||
|
<div id="wpcs_help_credit" style="display: none;">
|
||||||
|
这个插件是免费和自由的. 如果您喜欢本插件, 您可以通过这里的选项支持我们. 告诉作者我在使用本插件
|
||||||
|
(通过向<a href="https://oogami.name/project/wpcs/" target="_blank" title="插件主页" >插件主页</a>发送一个trackback);
|
||||||
|
或在博客链接(Links)里添加插件作者的主页 (<a href="https://oogami.name/" target="_blank" title="小野大神的 Blog,关注文明与幻想。" >小野大神</a>).
|
||||||
|
感谢您的支持.</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
|
||||||
|
<tr><td><input class="button" type="submit" name="submit" value="保存选项" /></td></tr>
|
||||||
|
</tbody></table></form>
|
||||||
|
<?php
|
||||||
|
$cache_status = $this->get_cache_status();
|
||||||
|
?>
|
||||||
|
<div id="wpcs_block_cache" style="display: <?php
|
||||||
|
echo ( $cache_status != 0 ) ? 'block' : 'none';
|
||||||
|
?>;">
|
||||||
|
<div style="padding-top: 30px; padding-bottom: 20px; "><b>WP Super Cache兼容:</b></div>
|
||||||
|
<form id="wpcso_cache_form" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
|
||||||
|
<table class="form-table"><tbody>
|
||||||
|
<tr><td valign="top" width="30%"><?php
|
||||||
|
if( $cache_status == 2 )
|
||||||
|
echo '<div style="font-weight: solid; width: 50px; color: green; border: 1px solid #333; margin: 2px; padding: 5px">已安装</div>';
|
||||||
|
else if( empty($this->options['wpcs_browser_redirect']) && empty($this->options['wpcs_use_cookie_variant']) )
|
||||||
|
echo '<div style="color: green; font-weight: solid; width: 350px; border: 1px solid #333; margin: 2px; padding: 5px">未开启"识别浏览器中文语言动作"和"使用Cookie保存并识别用户语言偏好"功能. 无需安装</div>';
|
||||||
|
else
|
||||||
|
echo '<div style="font-weight: solid; width: 50px; color: red; border: 1px solid #333; margin: 2px; padding: 5px">未安装</div>';
|
||||||
|
?></td><td><?php
|
||||||
|
if( $cache_status == 2 ) {
|
||||||
|
if( empty($GLOBALS['cache_enabled']) ) {
|
||||||
|
echo '<div style="font-weight: solid; border: 1px solid #333; margin: 2px; padding: 5px">WP Super Cache未开启缓存</div>';
|
||||||
|
} else if( !empty($GLOBALS['super_cache_enabled']) ) {
|
||||||
|
echo '<div style="color: red; font-weight: solid; border: 1px solid #333; margin: 2px; padding: 5px">警告: WP Super Cache未设为"legacy page caching"模式, 本兼容模块无法正常工作.</div>';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
?></td></tr>
|
||||||
|
<tr>
|
||||||
|
<td valign="top" colspan="2"><div style="width: 800px;">默认情况下, 本插件的"识别浏览器中文语言动作"和"使用Cookie保存并识别用户语言偏好"这两个功能与缓存插件不兼容.
|
||||||
|
如果您使用的是<a href="http://wordpress.org/extend/plugins/wp-super-cache/">WP Super Cache</a>的"Legacy page caching"缓存模式,
|
||||||
|
您可以点击下面的按钮安装WP Super Cache兼容. <b>注意: 如果您没有开启"识别浏览器中文语言动作"和"使用Cookie保存并识别用户语言偏好"这两个功能(默认均为关闭),
|
||||||
|
则无需安装此兼容</b>; 安装本兼容将增加WP Super Cache的缓存磁盘空间占用; <b>仅支持WP Super Cache插件的"Legacy page caching"模式,
|
||||||
|
不支持"PHP Cache"和"mod_rewrite cache"模式. (WP Super Cache 插件安装后默认为"PHP Cache"模式, 您必须手动切换到"Legacy"模式.)</b></div></td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input type="hidden" name="toggle_cache" value="1" />
|
||||||
|
<input class="button" type="submit" name="submit" value="<?php
|
||||||
|
if( $this->get_cache_status() == 0 )
|
||||||
|
echo "未使用WP Super Cache插件";
|
||||||
|
else if( $this->get_cache_status() == 1 )
|
||||||
|
echo "安装兼容";
|
||||||
|
else
|
||||||
|
echo "卸载兼容";
|
||||||
|
?>" <?php
|
||||||
|
if( $this->get_cache_status() == 0 || ( empty($this->options['wpcs_browser_redirect']) && empty($this->options['wpcs_use_cookie_variant']) ) )
|
||||||
|
echo 'disabled="disabled"';
|
||||||
|
?> />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody></table>
|
||||||
|
</form>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<div style="padding-top: 30px;padding-bottom: 20px;"><b>卸载本插件:</b></div>
|
||||||
|
<form id="wpcso_uninstall_form" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
|
||||||
|
<table class="form-table"><tbody>
|
||||||
|
<tr>
|
||||||
|
<td valign="top" width="30%"><a title="单击查看帮助" style="cursor: pointer;" onclick="toggleVisibility('wpcs_help_uninstall');">确定卸载本插件?</a></td>
|
||||||
|
<td>
|
||||||
|
<input type="checkbox" name="wpcso_uninstall_nonce" id="wpcso_uninstall_nonce" value="1" /> <label for="wpcso_uninstall_nonce">确认卸载 (此操作不可逆)</label>
|
||||||
|
<div id="wpcs_help_uninstall" style="display: none;">这将清除数据库options表中本插件的设置项(键值为wpcs_options), 提交后还需要到wordpress插件管理菜单里禁用本插件.</div>
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
<tr>
|
||||||
|
<td>
|
||||||
|
<input class="button" type="submit" name="submit" value="卸载插件" />
|
||||||
|
</td>
|
||||||
|
</tr>
|
||||||
|
</tbody></table>
|
||||||
|
</form>
|
||||||
|
</div> <!-- close wrap div -->
|
||||||
|
<?php
|
||||||
|
$o = ob_get_clean();
|
||||||
|
if($this->admin_lang) {
|
||||||
|
wpcs_load_conversion_table();
|
||||||
|
$o = limit_zhconversion($o, $this->langs[$this->admin_lang][0]);
|
||||||
|
}
|
||||||
|
echo $o;
|
||||||
|
}
|
||||||
|
|
||||||
|
function navi() {
|
||||||
|
$variant = !empty($_GET['variant']) ? $_GET['variant'] : '';
|
||||||
|
$str = '<span><a title="默认/ 默認" href="' . $this->url . '" ' . ( !$variant ? 'style="color: #464646; text-decoration: none !important;"' : '' ) . ' >默认/ 默認</a></span> ';
|
||||||
|
if(!$this->options['wpcs_used_langs']) return $str;
|
||||||
|
foreach($this->langs as $key => $value) {
|
||||||
|
$str .= '<span><a href="' . $this->url . '&variant=' . $key . '" title="' . $value[2] . '" ' . ( $variant == $key ? 'style="color: #464646; text-decoration: none !important;"' : '' ) . '>' . $value[2] . '</a> </span>';
|
||||||
|
}
|
||||||
|
return $str;
|
||||||
|
}
|
||||||
|
|
||||||
|
function process() {
|
||||||
|
global $wp_rewrite, $wpcs_options;
|
||||||
|
$langs = array();
|
||||||
|
foreach($this->langs as $key => $value) {
|
||||||
|
if(isset($_POST[ 'wpcso_variant_' . $key ]))
|
||||||
|
$langs[]=$key;
|
||||||
|
}
|
||||||
|
$options = array(
|
||||||
|
'wpcs_used_langs' => $langs,
|
||||||
|
'wpcs_search_conversion' => intval($_POST['wpcso_search_conversion']),
|
||||||
|
'wpcs_browser_redirect' => intval($_POST['wpcso_browser_redirect']),
|
||||||
|
'wpcs_use_cookie_variant' => intval($_POST['wpcso_use_cookie_variant']),
|
||||||
|
'wpcs_use_fullpage_conversion' => ( isset($_POST['wpcso_use_fullpage_conversion']) ? 1 : 0 ),
|
||||||
|
'wpcs_trackback_plugin_author' => ( isset($_POST['wpcso_trackback_plugin_author']) ? intval($_POST['wpcso_trackback_plugin_author']) : 0 ),
|
||||||
|
'wpcs_add_author_link' => ( isset($_POST['wpcso_add_author_link']) ? 1 : 0 ),
|
||||||
|
'wpcs_use_permalink' => intval($_POST['wpcso_use_permalink']),
|
||||||
|
'wpcs_auto_language_recong' => ( isset($_POST['wpcso_auto_language_recong']) ? 1 : 0 ),
|
||||||
|
'wpcs_no_conversion_tag' => trim($_POST['wpcso_no_conversion_tag'], " \t\n\r\0\x0B,|"),
|
||||||
|
'wpcs_no_conversion_ja' => ( isset($_POST['wpcso_no_conversion_ja']) ? 1 : 0 ),
|
||||||
|
'wpcs_no_conversion_qtag' => ( isset($_POST['wpcso_no_conversion_qtag']) ? 1 : 0 ),
|
||||||
|
'nctip' => trim($_POST['wpcso_no_conversion_tip']),
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach( $this->langs as $lang => $value ) {
|
||||||
|
if( !empty( $_POST[$value[1]] ) )
|
||||||
|
$options[$value[1]] = trim($_POST[$value[1]]);
|
||||||
|
}
|
||||||
|
|
||||||
|
if( $this->get_cache_status() == 2 && empty($options['wpcs_browser_redirect']) && empty($options['wpcs_use_cookie_variant']) ) {
|
||||||
|
$this->uninstall_cache_module();
|
||||||
|
}
|
||||||
|
|
||||||
|
if($options['wpcs_trackback_plugin_author'] == 1) {
|
||||||
|
$options['wpcs_trackback_plugin_author'] = $this->trackback();
|
||||||
|
if($options['wpcs_trackback_plugin_author'] == 2)
|
||||||
|
$this->message .= '已成功向<a href="https://oogami.name/project/wpcs/" target="_blank">插件主页</a>发送Trackback。感谢您的支持。<br />';
|
||||||
|
else
|
||||||
|
$this->message .= '向<a href="https://oogami.name/project/wpcs/" target="_blank">插件主页</a>发送Trackback失败,您可以尝试重新提交。<br />';
|
||||||
|
}
|
||||||
|
|
||||||
|
if($options['wpcs_add_author_link'] == 1 && $this->options['wpcs_add_author_link'] == 0) {
|
||||||
|
if($options['wpcs_add_author_link'] = wp_insert_link(array('link_target' =>'_blank', 'link_description' => '小野大神的 Blog,关注文明与幻想。', 'link_rss' => 'https://oogami.name/feed/', 'link_name' => '小野大神', 'link_url' => 'https://oogami.name/')) )
|
||||||
|
$this->message .= '已成功添加<a href="https://oogami.name/" target="_blank">插件作者</a>的主页链接。感谢您的支持<br />';
|
||||||
|
else { $options['wpcs_add_author_link'] = 0;
|
||||||
|
$this->message .= '添加插件作者主页链接失败。请重试。<br />';
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else if($options['wpcs_add_author_link'] == 0 && $this->options['wpcs_add_author_link'] != 0) {
|
||||||
|
if(wp_delete_link( $this->options['wpcs_add_author_link'] ))
|
||||||
|
$this->message .= '已删除插件作者的主页链接。<br />';
|
||||||
|
}
|
||||||
|
|
||||||
|
$wpcs_options = $options; //因为可能需要刷新rewrite规则, 必须立即更新wpcs_options全局变量
|
||||||
|
if( $this->options['wpcs_use_permalink'] != $options['wpcs_use_permalink'] ||
|
||||||
|
( $this->options['wpcs_use_permalink'] != 0 && $this->options['wpcs_used_langs'] != $options['wpcs_used_langs'] )
|
||||||
|
) {
|
||||||
|
if( !has_filter('rewrite_rules_array', 'wpcs_rewrite_rules') )
|
||||||
|
add_filter('rewrite_rules_array', 'wpcs_rewrite_rules');
|
||||||
|
$wp_rewrite->flush_rules();
|
||||||
|
}
|
||||||
|
|
||||||
|
update_option('wpcs_options', $options);
|
||||||
|
|
||||||
|
$this->options=$options;
|
||||||
|
$this->is_success = true;
|
||||||
|
$this->message .= '<br />设置已更新。';
|
||||||
|
}
|
||||||
|
|
||||||
|
function trackback() {
|
||||||
|
$options = array();
|
||||||
|
$options['timeout'] = 4;
|
||||||
|
$options['body'] = array(
|
||||||
|
'title' => 'WPCS Trackback',
|
||||||
|
'url' => get_option('home') . '/',
|
||||||
|
'blog_name' => get_option('blogname'),
|
||||||
|
'excerpt' => 'Hello, I am using the WP Chinese Switcher Plugin Version ' . wpcs_VERSION
|
||||||
|
);
|
||||||
|
$response = @wp_remote_post('https://oogami.name/project/wpcs/trackback/', $options);
|
||||||
|
$message = 'WPCS Version ' . wpcs_VERSION . "\n";
|
||||||
|
$message .= get_option('home') . '/';
|
||||||
|
@wp_mail('support@feibisi.com', 'WPCS Feedback - ' . get_option('blogname'), $message );
|
||||||
|
|
||||||
|
if ( is_wp_error( $response ) )
|
||||||
|
return 0;
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
1433
wp-chinese-switcher.php
Executable file
1433
wp-chinese-switcher.php
Executable file
File diff suppressed because it is too large
Load diff
97
wpcs-wp-super-cache-plugin.php
Executable file
97
wpcs-wp-super-cache-plugin.php
Executable file
|
@ -0,0 +1,97 @@
|
||||||
|
<?php
|
||||||
|
|
||||||
|
/**
|
||||||
|
*wp super cache plugin. Add basic compability with "php cache" mode of wp super cache plugin. Experimental!
|
||||||
|
*
|
||||||
|
*Don't edit this file manully.
|
||||||
|
*
|
||||||
|
*@since 1.1.11
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
|
||||||
|
$GLOBALS['wp_supercache_wpcs_version'] = '1.0';
|
||||||
|
|
||||||
|
$GLOBALS['wpcs_options'] = array(
|
||||||
|
'wpcs_used_langs' => ##wpcs_used_langs##,
|
||||||
|
'wpcs_auto_language_recong' => ##wpcs_auto_language_recong##,
|
||||||
|
);
|
||||||
|
|
||||||
|
function wp_supercache_wpcs_get_prefered_language($accept_languages, $target_langs, $flag = 0) {
|
||||||
|
$langs = array();
|
||||||
|
preg_match_all('/([a-z]{1,8}(-[a-z]{1,8})?)\s*(;\s*q\s*=\s*(1|0\.[0-9]+))?/i', $accept_languages, $lang_parse);
|
||||||
|
|
||||||
|
if(count($lang_parse[1])) {
|
||||||
|
$langs = array_combine($lang_parse[1], $lang_parse[4]);//array_combine需要php5以上版本
|
||||||
|
foreach($langs as $lang => $val) {
|
||||||
|
if($val === '') $langs[$lang] = '1';
|
||||||
|
}
|
||||||
|
arsort($langs, SORT_NUMERIC);
|
||||||
|
$langs = array_keys($langs);
|
||||||
|
$langs = array_map('strtolower', $langs);
|
||||||
|
|
||||||
|
foreach($langs as $val) {
|
||||||
|
if(in_array($val, $target_langs))
|
||||||
|
return $val;
|
||||||
|
}
|
||||||
|
|
||||||
|
if( $flag ) {
|
||||||
|
$array = array('zh-hans', 'zh-cn', 'zh-sg', 'zh-my');
|
||||||
|
$a = array_intersect($array, $target_langs);
|
||||||
|
if(!empty($a)) {
|
||||||
|
$b = array_intersect($array, $langs);
|
||||||
|
if(!empty($b)) {
|
||||||
|
$a = each($a);
|
||||||
|
return $a[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$array = array('zh-hant', 'zh-tw', 'zh-hk', 'zh-mo');
|
||||||
|
$a = array_intersect($array, $target_langs);
|
||||||
|
if(!empty($a)) {
|
||||||
|
$b = array_intersect($array, $langs);
|
||||||
|
if(!empty($b)) {
|
||||||
|
$a = each($a);
|
||||||
|
return $a[1];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return 'null';
|
||||||
|
}
|
||||||
|
return 'null';
|
||||||
|
}
|
||||||
|
|
||||||
|
function wp_supercache_wpcs_admin() {
|
||||||
|
$id = 'wpcs-section';
|
||||||
|
?>
|
||||||
|
<fieldset id="<?php echo $id; ?>" class="options">
|
||||||
|
<h4>WP Chinese Switcher</h4>
|
||||||
|
<p>Wp super cache - WP Chinese Switcher plugin is activated. To uninstall it, go to WP Chinese Switcher plugin setting page.</p>
|
||||||
|
</fieldset>
|
||||||
|
<?php
|
||||||
|
}
|
||||||
|
add_cacheaction( 'cache_admin_page', 'wp_supercache_wpcs_admin' );
|
||||||
|
|
||||||
|
function wp_supercache_wpcs_cache_key($cachekey) {
|
||||||
|
global $wpcs_options;
|
||||||
|
|
||||||
|
$browser_lang = wp_supercache_wpcs_get_prefered_language($_SERVER['HTTP_ACCEPT_LANGUAGE'], $wpcs_options['wpcs_used_langs'], $wpcs_options['wpcs_auto_language_recong']);
|
||||||
|
|
||||||
|
$cookie_lang = 'null';
|
||||||
|
foreach( $_COOKIE as $key => $val ) {
|
||||||
|
if ( preg_match( "/^wpcs_variant_/", $key ) ) {
|
||||||
|
$cookie_lang = $val;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
$is_redirect = 'direct';
|
||||||
|
foreach( $_COOKIE as $key => $val ) {
|
||||||
|
if ( preg_match( "/^wpcs_is_redirect_/", $key ) ) {
|
||||||
|
$is_redirect = 'redirect';
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $cachekey . '_' . $browser_lang . '_' . $cookie_lang . '_' . $is_redirect;
|
||||||
|
}
|
||||||
|
add_cacheaction('wp_cache_key', 'wp_supercache_wpcs_cache_key');
|
Loading…
Add table
Add a link
Reference in a new issue