From 8e64071c856fb734c5359d79676f3d2380d4197a Mon Sep 17 00:00:00 2001 From: inureyes Date: Sat, 19 Dec 2009 09:27:12 +0000 Subject: [PATCH] =?UTF-8?q?=20refs=20#514,=20#567=20=20=20*=20=EC=B2=B4?= =?UTF-8?q?=ED=81=AC=EC=97=85=20=EC=98=A4=EB=A5=98=20=EC=88=98=EC=A0=95?= =?UTF-8?q?=EC=9D=84=20=ED=8F=AC=ED=95=A8=ED=95=98=EC=97=AC=201.8=20?= =?UTF-8?q?=ED=8A=B8=EB=A6=AC=EC=97=90=20=EB=8F=99=EA=B8=B0=ED=99=94?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- documents/changelog_ko.txt | 16 +- framework/data/Condition.php | 6 - .../legacy/Needlworks.Cache.PageCache.php | 16 +- framework/model/Config.php | 5 +- interface/blog/checkup.php | 25 +- interface/common/owner/header.php | 4 +- interface/i/login/index.php | 4 +- interface/owner/entry/edit/index.php | 10 +- interface/owner/setting/blog/icons/index.php | 5 +- interface/owner/setting/blog/index.php | 1 + library/{ => function}/trace.php | 0 library/model/blog.response.remote.php | 4 +- library/plugins.php | 21 +- library/view/iphoneView.php | 25 +- library/view/ownerView.php | 4 +- plugins/BlogAPI/index.xml | 4 +- plugins/BlogIcon/index.xml | 4 +- plugins/CL_Moblog/index.xml | 4 +- plugins/CT_LinePost/index.xml | 4 +- plugins/ED_xquared/index.xml | 4 +- plugins/FM_Modern/editor.js | 12 +- plugins/FM_Modern/index.php | 4 - plugins/GoogleMap/index.xml | 4 +- .../JP_TC_PluginForTwitter/images/ajax.gif | Bin 0 -> 1737 bytes .../JP_TC_PluginForTwitter/images/blank.gif | Bin 0 -> 807 bytes .../images/checkicon.gif | Bin 0 -> 57 bytes .../JP_TC_PluginForTwitter/images/delete.gif | Bin 0 -> 122 bytes .../images/fav-throbber.gif | Bin 0 -> 864 bytes .../images/favorite.gif | Bin 0 -> 132 bytes .../JP_TC_PluginForTwitter/images/follow.gif | Bin 0 -> 136 bytes .../images/following.gif | Bin 0 -> 125 bytes .../images/icon_add.png | Bin 0 -> 512 bytes .../images/icon_plugin.png | Bin 0 -> 27302 bytes .../images/icon_plugin_off.png | Bin 0 -> 11999 bytes .../images/icon_plugin_on.png | Bin 0 -> 14755 bytes .../images/icon_remove.png | Bin 0 -> 595 bytes .../JP_TC_PluginForTwitter/images/message.gif | Bin 0 -> 134 bytes .../JP_TC_PluginForTwitter/images/more.gif | Bin 0 -> 129 bytes .../images/non-favorite.gif | Bin 0 -> 132 bytes .../JP_TC_PluginForTwitter/images/reply.gif | Bin 0 -> 117 bytes .../JP_TC_PluginForTwitter/images/retweet.gif | Bin 0 -> 132 bytes .../images/search_icon.gif | Bin 0 -> 200 bytes .../JP_TC_PluginForTwitter/images/spinner.gif | Bin 0 -> 457 bytes .../images/toggle_down_dark.png | Bin 0 -> 258 bytes .../images/toggle_up_dark.png | Bin 0 -> 288 bytes .../images/unfollow.gif | Bin 0 -> 144 bytes plugins/JP_TC_PluginForTwitter/index.php | 1440 +++++++++++++++++ plugins/JP_TC_PluginForTwitter/index.xml | 101 ++ plugins/JP_TC_PluginForTwitter/lib/JSON.php | 615 +++++++ .../lib/libcurlemu/LICENSE | 340 ++++ .../lib/libcurlemu/README | 99 ++ .../lib/libcurlemu/class_HTTPRetriever.php | 1162 +++++++++++++ .../lib/libcurlemu/example.php | 35 + .../lib/libcurlemu/libcurlemu.inc.php | 111 ++ .../lib/libcurlemu/libcurlexternal.inc.php | 637 ++++++++ .../lib/libcurlemu/libcurlnative.inc.php | 453 ++++++ .../lib/twitter.lib.php | 632 ++++++++ .../JP_TC_PluginForTwitter/plugin-main.css | 576 +++++++ .../script/jquery-1.3.2.min.js | 19 + .../script/jquery.livequery.js | 226 +++ .../script/jquery.preview.text.js | 111 ++ .../JP_TC_PluginForTwitter/script/twitter.js | 668 ++++++++ .../JP_TC_PluginForTwitter/style/twitter.css | 37 + plugins/StatGraph/count/count.php | 24 +- plugins/StatGraph/index.xml | 4 +- resources/locale/blog/en.php | 83 +- resources/locale/blog/ja.php | 35 +- resources/locale/blog/ko.php | 29 +- resources/locale/blog/vi.php | 31 +- resources/locale/blog/zh-CN.php | 31 +- resources/locale/blog/zh-TW.php | 31 +- resources/locale/checkup/en.php | 1 + resources/locale/checkup/ja.php | 1 + resources/locale/checkup/ko.php | 1 + resources/locale/checkup/vi.php | 1 + resources/locale/checkup/zh-CN.php | 1 + resources/locale/checkup/zh-TW.php | 1 + resources/locale/mobile/en.php | 29 +- resources/locale/mobile/ja.php | 29 +- resources/locale/mobile/ko.php | 29 +- resources/locale/mobile/vi.php | 29 +- resources/locale/mobile/zh-CN.php | 29 +- resources/locale/mobile/zh-TW.php | 29 +- resources/locale/owner/en.php | 70 +- resources/locale/owner/ja.php | 43 +- resources/locale/owner/ko.php | 11 +- resources/locale/owner/vi.php | 36 +- resources/locale/owner/zh-CN.php | 36 +- resources/locale/owner/zh-TW.php | 38 +- resources/locale/setup/en.php | 18 +- resources/locale/setup/ja.php | 20 +- resources/locale/setup/vi.php | 14 +- resources/locale/setup/zh-CN.php | 10 +- resources/locale/setup/zh-TW.php | 10 +- setup.php | 2 +- skin/admin/canon/basic.css | 71 +- skin/admin/canon/center.css | 2 +- skin/admin/canon/editor.css | 139 +- skin/admin/modern/basic.css | 5 + skin/admin/modern/editor.css | 16 +- skin/admin/retro-celebrate/basic.css | 5 + skin/admin/retro-celebrate/editor.css | 16 +- skin/admin/swallow/basic.css | 5 + skin/admin/swallow/editor.css | 16 +- skin/admin/whitedream/basic.css | 4 + skin/admin/whitedream/editor.css | 16 +- 106 files changed, 8067 insertions(+), 432 deletions(-) delete mode 100644 framework/data/Condition.php rename library/{ => function}/trace.php (100%) create mode 100644 plugins/JP_TC_PluginForTwitter/images/ajax.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/blank.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/checkicon.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/delete.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/fav-throbber.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/favorite.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/follow.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/following.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/icon_add.png create mode 100644 plugins/JP_TC_PluginForTwitter/images/icon_plugin.png create mode 100644 plugins/JP_TC_PluginForTwitter/images/icon_plugin_off.png create mode 100644 plugins/JP_TC_PluginForTwitter/images/icon_plugin_on.png create mode 100644 plugins/JP_TC_PluginForTwitter/images/icon_remove.png create mode 100644 plugins/JP_TC_PluginForTwitter/images/message.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/more.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/non-favorite.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/reply.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/retweet.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/search_icon.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/spinner.gif create mode 100644 plugins/JP_TC_PluginForTwitter/images/toggle_down_dark.png create mode 100644 plugins/JP_TC_PluginForTwitter/images/toggle_up_dark.png create mode 100644 plugins/JP_TC_PluginForTwitter/images/unfollow.gif create mode 100644 plugins/JP_TC_PluginForTwitter/index.php create mode 100644 plugins/JP_TC_PluginForTwitter/index.xml create mode 100644 plugins/JP_TC_PluginForTwitter/lib/JSON.php create mode 100644 plugins/JP_TC_PluginForTwitter/lib/libcurlemu/LICENSE create mode 100644 plugins/JP_TC_PluginForTwitter/lib/libcurlemu/README create mode 100644 plugins/JP_TC_PluginForTwitter/lib/libcurlemu/class_HTTPRetriever.php create mode 100644 plugins/JP_TC_PluginForTwitter/lib/libcurlemu/example.php create mode 100644 plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlemu.inc.php create mode 100644 plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlexternal.inc.php create mode 100644 plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlnative.inc.php create mode 100644 plugins/JP_TC_PluginForTwitter/lib/twitter.lib.php create mode 100644 plugins/JP_TC_PluginForTwitter/plugin-main.css create mode 100644 plugins/JP_TC_PluginForTwitter/script/jquery-1.3.2.min.js create mode 100644 plugins/JP_TC_PluginForTwitter/script/jquery.livequery.js create mode 100644 plugins/JP_TC_PluginForTwitter/script/jquery.preview.text.js create mode 100644 plugins/JP_TC_PluginForTwitter/script/twitter.js create mode 100644 plugins/JP_TC_PluginForTwitter/style/twitter.css diff --git a/documents/changelog_ko.txt b/documents/changelog_ko.txt index b63538eee..a98e78cb8 100644 --- a/documents/changelog_ko.txt +++ b/documents/changelog_ko.txt @@ -17,18 +17,29 @@ * 블로그 : 서버의 보안상 쿠키 변조에 의하여 로그인에 성공해도 계속 로그인을 시도하는 서버에서도 로그인이 가능하도록 함 (#1322) * 블로그 : localhost 에 설치할 경우에도 동작하는 기능 추가 * 블로그 : 피드 출력시 전문을 공개하는 경우 피드의 끝에 댓글을 남길 수 있는 링크 추가 (#1345) - * 관리패널 : 백업시 백업 파일에 블로그 식별자가 들어가도록 함 (#1286) + * 블로그 : 글목록+글내용 보기 화면에서 댓글을 펼칠 때 AJAX로 글목록 불러오는 기능 추가 (#1201) + * 블로그 : 대량의 글이 있는 블로그에서 새 글 작성 및 수정시 생기는 지연 감소 (#1358) + * 블로그 : 아이폰에서 아이콘을 만들 때 블로그 아이콘을 사용하는 기능 추가 (#1381) + * 관리패널 : Firefox / Safari 전용 관리 패널 스킨인 canon 추가 (#1320) + * 관리패널 : 백업시 백업 파일에 블로그 식별자가 들어가도록 함 (#1286) * 관리패널 : 관리 패널의 하위 메뉴의 가독성 개선 (#1288) * 관리패널 : 관리 패널의 댓글 보기에서 바로 수정 지원 (#1188) * 관리패널 : 관리 패널 스킨 선택 화면에 미리 보기 도입 (#1288) * 관리패널 : 태그 정리 및 관리/변경 페이지 지원 (#1248) + * 관리패널 : 전체 관리 페이지를 /admin 경로로 원래 관리패널에서 따로 분리함. (#1357) + * 모바일 : iPod touch / iPhone 모드에서 하드웨어 가속 지원 (#1249) + * 모바일 : iPhone 페이지에서 최근 트랙백 목록 지원 (#1249) + * 모바일 : iPhone 페이지에서 최근 댓글 목록 보기 지원 (#1249) + * 모바일 : iPhone 페이지에서 최근 방명록 보기 지원 (#1249) + * 모바일 : 유입 경로에 상관없이 기기에 따라 iPhone 페이지로 이동됨 (#1249) * 플러그인 : 플러그인에서도 언어팩 지원 (#1154) * 플러그인 : BlogAPI 사용시 동작하는 이벤트 추가 (#1268) * 에디터 : 에디터 지원 코드 재작성 - * 에디터 : 브라우저가 지원하는 경우, geolocation API를 지원하여 글 정보에 추가함 (#1291) + * 에디터 : 브라우저가 지원하는 경우, geolocation API를 지원하여 현재 위치를 글 정보에 추가함 (#1291) * 일반 : Singleton 패턴 도입 (#1153) * 일반 : URL-based Dispatching 구조 추가 (#1156) * 일반 : NAF 1.5 도입 + * 일반 : 기존 구조를 NAF 1.5 및 PHP5에 맞추어 재작성 * 일반 : DBMS의 포트 번호를 설치시 입력받도록 함 (#1276, #1277) * 일반 : memcached 가속 지원(알파) (#1071) * 일반 : MySQLi 데이터베이스 지원 (#1066) @@ -59,6 +70,7 @@ * 플러그인 : 모블로깅 플러그인에서 글 작성 후 캐시를 갱신하지 않는 문제 수정 (#1230) * 관리패널 : 마지막 관리 패널 상위 메뉴의 하위 메뉴가 두 번 중복출력되는 문제 수정 (#1318) * 관리패널 : 글 목록에서 여러 글을 공개/비공개/발행을 지정하는 경우 페이지를 이동하려고 하는 동작 수정 (#1325) + * 관리패널 : 다량의 글의 속성을 변경하는 경우 일부에 반영이 되지 않을 수도 있는 문제 수정 (#1325) * 모바일 : 아이폰 모드에서 그림 파일 출력에 발생하는 문제 수정 (#1321) diff --git a/framework/data/Condition.php b/framework/data/Condition.php deleted file mode 100644 index 6fc4e2419..000000000 --- a/framework/data/Condition.php +++ /dev/null @@ -1,6 +0,0 @@ - diff --git a/framework/legacy/Needlworks.Cache.PageCache.php b/framework/legacy/Needlworks.Cache.PageCache.php index 1fb6654f8..31ae4e6f1 100644 --- a/framework/legacy/Needlworks.Cache.PageCache.php +++ b/framework/legacy/Needlworks.Cache.PageCache.php @@ -6,6 +6,7 @@ class pageCache extends Singleton { function __construct($name = null){ $this->pool = DBModel::getInstance(); + $this->context = Model_Context::getInstance(); $this->reset(); } @@ -51,15 +52,13 @@ private function create () { } public function update () { - global $service; - if(isset($service['pagecache']) && $service['pagecache'] == false) return false; + if($this->context->getProperty('service.pagecache') != true) return false; $this->purge(); $this->create(); } public function load () { - global $service; - if(isset($service['pagecache']) && $service['pagecache'] == false) return false; + if($this->context->getProperty('service.pagecache') != true) return false; $this->initialize(); $this->contents = $this->dbContents = null; if(!$this->getFileName()) return false; @@ -81,8 +80,7 @@ private function initialize() { } } public function purge () { - global $service; - if(isset($service['pagecache']) && $service['pagecache'] == false) return true; + if($this->context->getProperty('service.pagecache') != true) return true; $this->getFileName(); if( (file_exists($this->absoluteFilePathOwner) && @chmod($this->absoluteFilePathOwner, 0777)) @@ -191,7 +189,11 @@ public static function getInstance() { public function reset($query = null, $prefix = null) { $this->query = $this->queryHash = $this->contents = $this->error = $this->prefix = $this->namespace = null; $this->query = $query; - $this->prefix = (!is_null($prefix) ? $prefix : "")."-"; + if(!is_null($prefix)) { + $this->prefix = $prefix."-"; + $this->namespace = $this->prefix; + } + } public function create() { diff --git a/framework/model/Config.php b/framework/model/Config.php index a5c74c362..3d820547a 100644 --- a/framework/model/Config.php +++ b/framework/model/Config.php @@ -15,7 +15,7 @@ protected function __construct() { } private function __basicConfigLoader() { - global $database, $service; + global $database, $service; // For Legacy global variable support $this->settings = array(); require_once(ROOT.'/library/config.default.php'); // Loading default configuration if (file_exists(ROOT.'/config.php')) @include(ROOT.'/config.php'); // Override configuration @@ -24,8 +24,7 @@ private function __basicConfigLoader() { $service['port'] = $_SERVER['SERVER_PORT']; // Include installation configuration. - $service['session_cookie_path'] = '/'; - if(!defined('__TEXTCUBE_SETUP__')) @include_once ROOT . '/config.php'; + if(!isset($service['session_cookie_path'])) $service['session_cookie_path'] = '/'; // Set service path. if(isset($serviceURL)) $service['serviceURL'] = $serviceURL; // Set resource path. diff --git a/interface/blog/checkup.php b/interface/blog/checkup.php index c4ef09c84..724698cd5 100644 --- a/interface/blog/checkup.php +++ b/interface/blog/checkup.php @@ -404,19 +404,7 @@ function clearCache() { showCheckupMessage(false); } /* From Textcube 1.7.7 (or 1.8) */ - if (!POD::queryExistence("DESC {$database['prefix']}RemoteResponses blogid") && - !POD::queryExistence("DESC {$database['prefix']}Trackbacks type")) { - $changed = true; - echo '
  • ', _text('트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.'), ': '; - if (POD::execute("ALTER TABLE {$database['prefix']}Trackbacks ADD type enum('trackback','pingback') NOT NULL default 'trackback' AFTER entry") && - POD::execute("ALTER TABLE {$database['prefix']}TrackbackLogs ADD type enum('trackback','pingback') NOT NULL default 'trackback' AFTER entry") - ) { - showCheckupMessage(true); - } else - showCheckupMessage(false); - } - - if (!POD::queryExistence("DESC {$database['prefix']}RemoteResponses type")) { + if (!POD::queryExistence("DESC {$database['prefix']}RemoteResponses blogid")) { $changed = true; echo '
  • ', _text('원격 댓글 지원 기능을 위해 트랙백 테이블의 이름을 변경합니다.'), ': '; if ( @@ -428,6 +416,17 @@ function clearCache() { showCheckupMessage(false); } + if(!POD::queryExistence("DESC {$database['prefix']}RemoteResponses responsetype")) { + $changed = true; + echo '
  • ', _text('트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.'), ': '; + if (POD::execute("ALTER TABLE {$database['prefix']}RemoteResponses ADD responsetype enum('trackback','pingback') NOT NULL default 'trackback' AFTER entry") && + POD::execute("ALTER TABLE {$database['prefix']}RemoteResponseLogs ADD responsetype enum('trackback','pingback') NOT NULL default 'trackback' AFTER entry") + ) { + showCheckupMessage(true); + } else + showCheckupMessage(false); + } + if (!POD::queryExistence("DESC {$database['prefix']}Entries pingbacks")) { $changed = true; echo '
  • ', _text('핑백 기능을 위해 글 테이블에 핑백 필드를 추가합니다.'), ': '; diff --git a/interface/common/owner/header.php b/interface/common/owner/header.php index ff5cbf9c3..0be681460 100755 --- a/interface/common/owner/header.php +++ b/interface/common/owner/header.php @@ -430,10 +430,10 @@
      -
    • +
    @@ -611,6 +611,8 @@ $helpURL = $blogMenu['topMenu'].(isset($blogMenu['contentMenu']) ? '/'.$submenuURL : ''); ?> +
    +
    - +
    @@ -62,7 +62,7 @@
    -
    onclick="emailSaveToggleCheck(this);">ONOFF
    +
    onclick="emailSaveToggleCheck(this);">|O
    diff --git a/interface/owner/entry/edit/index.php b/interface/owner/entry/edit/index.php index fbc95b870..0e1e796e1 100644 --- a/interface/owner/entry/edit/index.php +++ b/interface/owner/entry/edit/index.php @@ -184,6 +184,7 @@ function EntryManager() { this.nowsaving = false; this.isPreview = false; this.changeEditor = false; + this.draftSaved = false; this.currentEditor = ""; this.entryId = ; @@ -396,10 +397,13 @@ function EntryManager() { document.getElementById("saveButton").style.color = "#BBB"; PM.showMessage("", "center", "bottom"); } - if(entryManager.isSaved == false) { + if(entryManager.isSaved == false) { // First save. entryManager.entryId = this.getText("/response/entryId"); entryManager.isSaved = true; + entryManager.draftSaved = false; reloadUploader(); + } else { + entryManager.draftSaved = true; } entryManager.savedData = data; @@ -640,6 +644,9 @@ function returnToList() { + +
    +

    @@ -697,6 +704,7 @@ function returnToList() { ?>
    +
    :
    array(array('0','16','32','48'), 'mandatory' => false), 'deleteLogo' => array('string', 'default' => NULL), 'deleteBlogIcon' => array('string', 'default' => NULL), - 'deleteFavicon' => array('string', 'default' => NULL) + 'deleteFavicon' => array('string', 'default' => NULL), + 'useBlogIconAsIphoneShortcut' => array('bool','default'=>false) ), 'FILES' => array( 'blogIcon' => array('file', 'mandatory' => false), @@ -85,7 +86,7 @@ } } } - +Setting::setBlogSettingGlobal('useBlogIconAsIphoneShortcut',$_POST['useBlogIconAsIphoneShortcut']); if (!empty($errorText)) { $errorText = urlencode(implode('
    ',$errorText)); } else { diff --git a/interface/owner/setting/blog/index.php b/interface/owner/setting/blog/index.php index 719217f89..fa40e3402 100644 --- a/interface/owner/setting/blog/index.php +++ b/interface/owner/setting/blog/index.php @@ -573,6 +573,7 @@ function setLocale() { ?>
    />
    +
    />

    diff --git a/library/trace.php b/library/function/trace.php similarity index 100% rename from library/trace.php rename to library/function/trace.php diff --git a/library/model/blog.response.remote.php b/library/model/blog.response.remote.php index 19c4f9872..aa18e877f 100644 --- a/library/model/blog.response.remote.php +++ b/library/model/blog.response.remote.php @@ -182,7 +182,7 @@ function trashRemoteResponse($blogid, $id) { $entry = POD::queryCell("SELECT entry FROM {$database['prefix']}RemoteResponses WHERE blogid = $blogid AND id = $id"); if ($entry === null) return false; - if (!POD::query("UPDATE {$database['prefix']}RemoteResponses SET isFiltered = UNIX_TIMESTAMP() WHERE blogid = $blogid AND id = $id")) + if (!POD::query("UPDATE {$database['prefix']}RemoteResponses SET isfiltered = UNIX_TIMESTAMP() WHERE blogid = $blogid AND id = $id")) return false; CacheControl::flushDBCache('trackback'); CacheControl::flushDBCache('remoteResponse'); @@ -198,7 +198,7 @@ function revertRemoteResponse($blogid, $id) { $entry = POD::queryCell("SELECT entry FROM {$database['prefix']}RemoteResponses WHERE blogid = $blogid AND id = $id"); if ($entry === null) return false; - if (!POD::execute("UPDATE {$database['prefix']}RemoteResponses SET isFiltered = 0 WHERE blogid = $blogid AND id = $id")) + if (!POD::execute("UPDATE {$database['prefix']}RemoteResponses SET isfiltered = 0 WHERE blogid = $blogid AND id = $id")) return false; CacheControl::flushDBCache('trackback'); CacheControl::flushDBCache('remoteResponse'); diff --git a/library/plugins.php b/library/plugins.php index abe9ce3c9..911564fc5 100644 --- a/library/plugins.php +++ b/library/plugins.php @@ -43,15 +43,22 @@ if ($manifest && $xmls->open($manifest)) { $requiredTattertoolsVersion = $xmls->getValue('/plugin/requirements/tattertools'); $requiredTextcubeVersion = $xmls->getValue('/plugin/requirements/textcube'); - - if (!is_null($requiredTattertoolsVersion) && !is_null($requiredTextcubeVersion)) { - if (version_compare($currentTextcubeVersion,$requiredTattertoolsVersion) == -1 && version_compare($currentTextcubeVersion,$requiredTextcubeVersion) == -1) + if(is_null($requiredTextcubeVersion) && !is_null($requiredTattertoolsVersion)) { + $requiredTextcubeVersion = $requiredTattertoolsVersion; + } + $requiredMinVersion = $xmls->getValue('/plugin/requirements/textcube/minVersion'); + $requiredMaxVersion = $xmls->getValue('/plugin/requirements/textcube/maxVersion'); + if (!is_null($requiredMinVersion)) { + if (version_compare($currentTextcubeVersion, $requiredMinVersion) < 0) $disablePlugin = true; - } else if (!is_null($requiredTattertoolsVersion) && is_null($requiredTextcubeVersion)) { - if (version_compare($currentTextcubeVersion,$requiredTattertoolsVersion) == -1) + } + if (!is_null($requiredMaxVersion)) { + if (version_compare($currentTextcubeVersion, $requiredMaxVersion) > 0) $disablePlugin = true; - } else if (is_null($requiredTattertoolsVersion) && !is_null($requiredTextcubeVersion)) { - if (version_compare($currentTextcubeVersion,$requiredTextcubeVersion) == -1) + } + + if (!is_null($requiredTextcubeVersion)) { + if (version_compare($currentTextcubeVersion,$requiredTextcubeVersion) < 0) $disablePlugin = true; } diff --git a/library/view/iphoneView.php b/library/view/iphoneView.php index d732c6bc4..8c88df770 100644 --- a/library/view/iphoneView.php +++ b/library/view/iphoneView.php @@ -194,29 +194,36 @@ function printIphoneLinksView($links) { } function printIphoneHtmlHeader($title = '') { - global $blogURL, $blog, $service, $blogid; - $title = htmlspecialchars($blog['title']) . ' :: ' . $title; + $context = Model_Context::getInstance(); + $title = htmlspecialchars($context->getProperty('blog.title') . ' :: ' . $title); ?> <?php echo $title;?> - - + +getProperty('blog.id')."/index.gif")) { +?> + " /> + +
    -

    +

    getProperty('blog.title'));?>

      -
    • -
    • -
    • -
    • +
    • +
    • +
    • +
    diff --git a/library/view/ownerView.php b/library/view/ownerView.php index 60b4b5935..ae5af804e 100644 --- a/library/view/ownerView.php +++ b/library/view/ownerView.php @@ -185,7 +185,7 @@ function changeEditor(key, formatter) { function reloadEditor() { var url = 'getProperty('uri.blog')."/owner/entry/edit/";?>'+entryManager.entryId+'?editor='+entryManager.currentEditor; - if ( entryManager.isSaved == true) { + if ( entryManager.draftSaved == true) { url = url+'&draft=true'; } if ( entryManager.returnURL != null ) { @@ -923,4 +923,4 @@ function getPrettyAttachmentLabel($attachment) { } return "{$attachment['label']} (".Misc::getSizeHumanReadable($attachment['size']).')'; } -?> \ No newline at end of file +?> diff --git a/plugins/BlogAPI/index.xml b/plugins/BlogAPI/index.xml index 3b1c73faa..4a1cf9acd 100644 --- a/plugins/BlogAPI/index.xml +++ b/plugins/BlogAPI/index.xml @@ -11,7 +11,9 @@ - 1.5 + + 1.8 + diff --git a/plugins/BlogIcon/index.xml b/plugins/BlogIcon/index.xml index c1cece567..ea858a09a 100644 --- a/plugins/BlogIcon/index.xml +++ b/plugins/BlogIcon/index.xml @@ -15,7 +15,9 @@ Needlworks - 1.5 + + 1.8 + BlogIcon_main diff --git a/plugins/CL_Moblog/index.xml b/plugins/CL_Moblog/index.xml index 05a31f842..694c61b6c 100644 --- a/plugins/CL_Moblog/index.xml +++ b/plugins/CL_Moblog/index.xml @@ -12,7 +12,9 @@ blog - 1.7 + + 1.8 + moblog_check diff --git a/plugins/CT_LinePost/index.xml b/plugins/CT_LinePost/index.xml index bbe2add07..b7f662e66 100644 --- a/plugins/CT_LinePost/index.xml +++ b/plugins/CT_LinePost/index.xml @@ -10,7 +10,9 @@ Jeongkyu Shin (inureyes) - 1.7 + + 1.8 +
    diff --git a/plugins/ED_xquared/index.xml b/plugins/ED_xquared/index.xml index 7b96afb34..1e4de53da 100644 --- a/plugins/ED_xquared/index.xml +++ b/plugins/ED_xquared/index.xml @@ -11,7 +11,9 @@ - 1.8 + + 1.8 + Xquared_adminheader diff --git a/plugins/FM_Modern/editor.js b/plugins/FM_Modern/editor.js index eca345c40..5dddc6c20 100644 --- a/plugins/FM_Modern/editor.js +++ b/plugins/FM_Modern/editor.js @@ -111,7 +111,8 @@ TTModernEditor.prototype.initialize = function(textarea) { var div = document.createElement('div'); div.id = 'moderneditor-textbox'; div.className = 'container'; - textarea.parentNode.insertBefore(this.getEditorPalette(), textarea); + //textarea.parentNode.insertBefore(this.getEditorPalette(), textarea); + document.getElementById('formatbox-container').innerHTML = this.getEditorPalette(true); textarea.parentNode.insertBefore(div, textarea); textarea.parentNode.removeChild(textarea); div.appendChild(textarea); @@ -142,7 +143,7 @@ TTModernEditor.prototype.initialize = function(textarea) { this.iframe.style.height = STD.isIE ? "448px" : "452px"; this.iframe.style.margin = "0px auto"; this.iframe.style.overflowY = "scroll"; - this.iframe.style.width = Math.min(skinContentWidth + (STD.isIE ? 56 : 64), 650) + "px"; + this.iframe.style.width = Math.min(skinContentWidth + (STD.isIE ? 56 : 64), 1050) + "px"; // IFRAME을 감싸는 DIV //this.iframeWrapper = document.createElement("div"); @@ -2272,7 +2273,7 @@ TTModernEditor.prototype.addObject = function(data) { // moved from library/view/ownerView.php, printEntryEditorPalette() -TTModernEditor.prototype.getEditorPalette = function() { +TTModernEditor.prototype.getEditorPalette = function(htmlonly) { var colors = ['008000', '009966', '99CC66', '999966', 'CC9900', 'D41A01', 'FF0000', 'FF7635', 'FF9900', 'FF3399', '9B18C1', '993366', '666699', '0000FF', '177FCD', '006699', '003366', '333333', @@ -2395,7 +2396,10 @@ TTModernEditor.prototype.getEditorPalette = function() { } html = html.replace(new RegExp('__EDITOR__', 'g'), 'TTModernEditor.editors.' + this.name); html = html.replace(new RegExp('__ID__', 'g'), this.id); - + + if(htmlonly == true) { + return '
    '+html+'
    '; + } var div = document.createElement('div'); div.id = 'moderneditor-palette'; div.className = 'container'; diff --git a/plugins/FM_Modern/index.php b/plugins/FM_Modern/index.php index 8fa7c0e77..fe140932e 100644 --- a/plugins/FM_Modern/index.php +++ b/plugins/FM_Modern/index.php @@ -1,7 +1,5 @@ 'BR', diff --git a/plugins/GoogleMap/index.xml b/plugins/GoogleMap/index.xml index e8ab2fc54..b6ac14fb5 100644 --- a/plugins/GoogleMap/index.xml +++ b/plugins/GoogleMap/index.xml @@ -11,7 +11,9 @@ 태터네트워크재단 - 1.7.7 + + 1.8 + GoogleMapUI_InsertMap diff --git a/plugins/JP_TC_PluginForTwitter/images/ajax.gif b/plugins/JP_TC_PluginForTwitter/images/ajax.gif new file mode 100644 index 0000000000000000000000000000000000000000..16e32a32c66765dea3de18d3b243c7916496e3a5 GIT binary patch literal 1737 zcmaKsX;2es9>!k-lLHVE=_X2MLI4MlGtx{a~1^je53aH_#V&m`@c`s zYbztQg-$7uf`0(;{{4Hm+kNNGo#V%kZ`rbC#flZHR;}8#YuD-1ryo3caQ5ukuCA^{ zixw?ix)eglvh0o>J1$?o+}_^4XV0GJ&!4||@#6aR>%G0bp-^b^=FL~HUcG($b}$%h zYim1t^yuK=;HFKR4jee}=+UE|o}Sj$R{r{l6DPKB-+t-RrPZrfdpw?t7ccVBfk2?S zx%uhSr>|bU+P81tkt0W5zkYrA@Zodk&b@v6_T9U8*REZ=dGqF*H*fCVy*o5C#OLxs zj~_pN`0(NA=;)0bH?CZ{!l&H3ckkuPm-p}A-@kwVPrqu-nlhnx|3o`VsF@a`vLruO9WjnyPyTnJCE#+l zyXL7nTiTmdPLH$8>vzt}ZSlGNAo*XBk|_RE_6LU#B?8f!Zvdo&45LV$lEX6MPbX*Q zLR_a|qM|?hJSz`s)JB{Z2q!3696>gLi0JrkU@S7i$QW54W-fxCj7R!_z61(m(LN1f zf}*&DKBQO=#X@BJ;fpOrw;vPr5mg&LD+#fC@0#N>3*)BUai<9E0!ZOeI()EDtrGa4FSb(cO0!pIdTZDDl0v1?A<-)kw z@i87RqpfRdu0m1EjQKHQI%S^2z&7VpDqy43%>ilaT$mki3fp}im|v<6Q@J@%S%8I^ zFXXnH!Frb^jO%D5$vw#Ej3cz|izI^5Xw*m^iZf64n~cpP?yNG49?neZj_dxtsdvj9vmG=%M~<()aTMfn$#NftX&mvhUP{E2V8T!(4?ip#hwMwS*!`8aph--VGfNI4hYm?OGh0< zC4=08Km^1aitaGV*;52GMj;rTmHzwaC*QF#@R}(aDHs!I!1+E5Yl=N`^88S#&F%FnS&8PbZ$vP24 zLqAVXhiXzYSUhbW#IaFsuE$Gj9x`ch4jUVpMNy4YXI9wRj!s`~&g{TM14pE`M919N zc>k9pPrn(11OWKa=XD`yRk#oxl3`8i#U2%1p6 zs7}j>D;5SiV&go2u#C7S#R+3orS*TFr5dZ-KmHGn)#ykRC2^LF)&QXt4~+l- literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/delete.gif b/plugins/JP_TC_PluginForTwitter/images/delete.gif new file mode 100644 index 0000000000000000000000000000000000000000..d8b3aee17bcf1ea030a82b41436aea7b7c96b416 GIT binary patch literal 122 zcmZ?wbhEHbRAu01n8?hK!@_dn#EJLs-~a#rU-2gkBLf37gAM}_faDpNyyrBpJUzFp zX~vdY-I`WAe@pWSu}%rjWKz-Euwqs3bDr~NmEj(&t8;d*`s!mPDG*_;m3va6|3}u+ aI_F0!DSt8?C$8PjA!vE*N&7+u25SJ6WiKTF literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/fav-throbber.gif b/plugins/JP_TC_PluginForTwitter/images/fav-throbber.gif new file mode 100644 index 0000000000000000000000000000000000000000..fa124c5fb4155572b41f922c08fa2290c17276a0 GIT binary patch literal 864 zcmZ?wbhEHb6krfw_{PBS_wV1YU%$S5`SRbtf46Vn{{8#+$B!RBefsqD>C?M+?>>9> z?8lEE7cX91wQAL^Tes%VpTBhJ(#MY2A<;s<_XV1QW|Nepn3+B$9`~3OynKNg; ze*OCA&!118Jo)qI&-d@&ckSA>VZ(;cpFh8P^=iwOEe{_)+`fJLyLaz4ZQ8Vc{rcUz zcfWb_=Fy`^n>TM>yLRn|4W1`r=FfX`BA&|3?-MD2e&K` zP;C}&p5bArw~75A>j93K2OD;XFhNaYV9;S^U}oR~LIyTNhX#QMH+kASf>uwx#N&B7 z!<*&Bh9#%@9h!UDSnj4~G{5R=Y0*pfV9@nny*MD%ij5Iu3MT^tBZ?^p8VojQ^0d#2 z)Dth}Wj&qoPL$!q67T2(t-V!ocU9LEynfU&XI@E#V zP0cN>ZS5VMU97TQP3$ZV4xEggdXr{2Ol@PZnmLKHopJsQyEdC8lcd{Z?Uz_}STAAg zw6>jOwWW)h(V%btfrG7$P)`zYp6V3O>DwA!OMTt5!#m>Pv7@|9GEnCwGbC8ZG*c<4 FtO45PI&guiL9!uu^+QJ!iL775lKu=UnA#-``w5X002ABT{$BF literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/follow.gif b/plugins/JP_TC_PluginForTwitter/images/follow.gif new file mode 100644 index 0000000000000000000000000000000000000000..2148e10631acaf4648b5cb1c3aaf031522286a44 GIT binary patch literal 136 zcmV;30C)dKNk%w1VK4v-0FeU#4TZAE$jI;S@Bjb*A^8LW00093EC2ui05AXx00076 zoP(*$?QBjEwAzca#^~%1hEy<27jOb9wF)R}weM^p*jwQ)jQ2detJrd?mP_^n22r%& q$P_z8cRnD~T7%}KvDvD~>M?Z!l2(KkkxJ*Zo3oZY=Ja`_0029m7&~zQ literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/following.gif b/plugins/JP_TC_PluginForTwitter/images/following.gif new file mode 100644 index 0000000000000000000000000000000000000000..1ec3ef60f0c2032e378dbd1ef4b316bf90e4f655 GIT binary patch literal 125 zcmZ?wbhEHbG-Kdqn8?Hswx1_7H1z-f{|pQaia%Kx85o!tbbxFIkURsE-<1B9r{D4~ zE@3#+?Y~v+$A!iw3#GXBX$wwNP5ma9vhq}!@A}1lc}@9NPcvMuZP@mx(adnNaJY-) d#7iOuhPPWM=|*mvCH&9m$)=w@e)e1p)&P0rFkS!v literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/icon_add.png b/plugins/JP_TC_PluginForTwitter/images/icon_add.png new file mode 100644 index 0000000000000000000000000000000000000000..6e261834b56d2b1162299354c0071e5fa7681e69 GIT binary patch literal 512 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 literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/icon_remove.png b/plugins/JP_TC_PluginForTwitter/images/icon_remove.png new file mode 100644 index 0000000000000000000000000000000000000000..c5d2a88b05401da940d1ea379d381f0b31bb5c7e GIT binary patch literal 595 zcmV-Z0<8UsP)oTViJwsC6`N+ zoZt8BMN(+{gO}g?y?j5v_ul+>tgi0s+0l zR0~@Ivr}YT2!mmsyMy}{OuV8v?hc&$z(D#1?X?<9&n@4AlG%*0e_9` zFD#@G|MAAQ#e@*_zvZ|t-Bhbw?kk0Rva(qrP+Bk?(o(5Jxt$&9v$4-H_F2PPW>owX z%|wERgMqyD@#>1qe4f(9B5A5hW-do}l?vS=TSnK3wY7S^$ly#2f*=Gh_x32ex=L?1 zHstyH@iAQ<9?}a%ks37`<*?15H|Y0cilRLCqK)~zexKqv8@QaS;*znV3|4*LpO434 zQdmI7$=O-DK02ab5al;F>1ClnmEB$Wzu)WecFo|a({9geze|u%vs|X~!GX+T0ZPry z(SzraiOZp7*(pCqmRp%lr-cz_ZFak|Co?=hA`55N5&PL}@^ida@R)U;h&#t22e)z$ zDF74v!NMnDU&ElVCY+x7_{c3|+n>^PJE3V5S5+DB;^VY^pYA=6M{Wzy*&nkyHsl}w hG31}dhx|!^0RYWB+p9TC-GcxC002ovPDHLkV1nNW79{`x literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/message.gif b/plugins/JP_TC_PluginForTwitter/images/message.gif new file mode 100644 index 0000000000000000000000000000000000000000..81159ecb2ed81772502210a0a497690dadcb04e0 GIT binary patch literal 134 zcmV;10D1pMNk%w1VJ!d)0FeU#aBy(Q$jI;S@Bjb*A^8LW00093EC2ui04)Fu00074 zoP(*$?P*RBwAzcauITI!g26CVfGGg#nX1(KvhBIb0%Ey(&ZFt?yWmi?nMvlF6?I8Y o=|#-gia!=r_yksAFeA{)Y~DzrvY9d>WzTF&C-R8PACUq8I~Q|2wg3PC literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/more.gif b/plugins/JP_TC_PluginForTwitter/images/more.gif new file mode 100644 index 0000000000000000000000000000000000000000..8382f19b527146bb263aff6b885eccc0b070a286 GIT binary patch literal 129 zcmZ?wbhEHbWMr7bu$h73@87>afByXX_3OuvAK$)x`|{<>r%#_geE9J0-Mcq$-ekZ4 zia%Kx*ctva=zwHEW-zem37qg;&FlE$V5k0qM42awO|9+)&1wl@I=f49ci$E7Qf*Q> S(6U~|XhF!F*_Xr^8LR;%!!^JF literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/non-favorite.gif b/plugins/JP_TC_PluginForTwitter/images/non-favorite.gif new file mode 100644 index 0000000000000000000000000000000000000000..c11aa3c0fbfac4e96c66ea0ef7fcb2b19488ff9c GIT binary patch literal 132 zcmV-~0DJ#ONk%w1VJ!d)0FeU#aBy(Q$jI;S@Bjb*A^8LW00093EC2ui04)Fu00072 zoP(*$?P*RBwAzcauITI!g26CVzzI;N$_lIdrYQVUh?SabF7LkEy4*~$84n1YA$c`h mDY%Rtr>&guiL9!uu^+QJ!iL775lKu=UnA#-``w5X00285mpR-3 literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/reply.gif b/plugins/JP_TC_PluginForTwitter/images/reply.gif new file mode 100644 index 0000000000000000000000000000000000000000..dead182d967e8f20e61647f265d31617704c2d04 GIT binary patch literal 117 zcmZ?wbhEHbRAk_0n8?gfSXg-C#EJLs-~a#rU-2gkBLf37gAM}_faDpN+~zc|Je}Lz zGG|Lv_qn@!*gO~)sr0E@GQJR5y5bd=md^Sh@4iiS*H+eXx5OQeFpQWpH^W*r_=8~C Vvg!OTUT4$fde?;~YA`TZ0{{{TEW7{! literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/retweet.gif b/plugins/JP_TC_PluginForTwitter/images/retweet.gif new file mode 100644 index 0000000000000000000000000000000000000000..3033f21e09e48ddaf6afbb4b8fbb6cd101d1788e GIT binary patch literal 132 zcmV-~0DJ#ONk%w1VJrX(0FeU#adC0T$jI;S@Bjb*A^8LW00093EC2ui04x9t00072 zoP(*$?PyLAwAzcarf|#+hFjoSz)78`Dgf!Lx^atg-`nOU?&dvS`3VrF8jFWK9(A^z m@6wCHoIwk*>Qe?~QPzw(EQ!WslIKQFV>*(D`^|_H00286cR9-d literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/search_icon.gif b/plugins/JP_TC_PluginForTwitter/images/search_icon.gif new file mode 100644 index 0000000000000000000000000000000000000000..1d22cb560c10eb03e9992e25e96b8c5b1d3200b4 GIT binary patch literal 200 zcmZ?wbhEHbU9 zxVZTL|Njgyp!kyo%+vvqAUhdYT@{YUMw)eKEYF?A5+N~5(y%>HDr@eGtqW&6bunLH v4YCV4ps?j(koKLn1i>Y8OIsHkNiI_8^*W^86(Yf5L62M$g literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/spinner.gif b/plugins/JP_TC_PluginForTwitter/images/spinner.gif new file mode 100644 index 0000000000000000000000000000000000000000..6e5bace6e654c094f212632e8692e78c55ba3119 GIT binary patch literal 457 zcmZ?wbhEHb|By@uyNTm~>u{Lk&@8WQa67~pE8XTZz| z6jc1l!phFT%Af;M0MgFDtR1n7;rE7vqD_-hd&1XVkxtjWm15_l{x`66)s*<;& zIqgd8kM9qDI}uGk4+95Kzf{C7!QW>b6+?mvNj_N;l!eUOQPRYGhrlUC+cJ5Gf0Obl#L*GNa~ zva;*3mB?mn;M`ci=eV&jJgnhV*urUtjF8kbz|~7}a9zFEz1K6FBcG>yqd@C6(eTfv zQl(*PFTk$nLI+EAaC-Uk%m7)j6>&R_;Z(v8rRyY~}d0Ir)Q-2c(?-~a#s07*qo IM6N<$g7~9wzW@LL literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/toggle_up_dark.png b/plugins/JP_TC_PluginForTwitter/images/toggle_up_dark.png new file mode 100644 index 0000000000000000000000000000000000000000..951d903d8b5639934bb90dcbfc2ea1f0d184a46d GIT binary patch literal 288 zcmeAS@N?(olHy`uVBq!ia0vp@Ak4uAB#T}@sR2@wC9V-A!TD(=<%vb942~)JNvR5+ zxryniL8*x;m4zo$ZGegndAc};RNR^~={DCP0|A%GB7ufc@_Q6G>L&jG&%95=PGZG$ zrETZhIFC%w*ioP{`&`Lo&n>^!SgvSfb-vKVW>LVYboM#J8qE@sZEtk#RsIUvG*^00 z4*PkjM&By5&^x$*VXxM8ULDtDi(9EYzn8pUxtjO;9TA?DfhE^mG^eT^*~@?2Me`}o z%8UFHLdqU+oqJWTd*DdR{NF<5GQ0VGmFhdBdnB_@Zb)ic-ql@h@YwQ16nk94k>WcS k6wDW0{(oohb_QmK&9imBz6zMz3G@wvr>mdKI;Vst04nfu=>Px# literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/images/unfollow.gif b/plugins/JP_TC_PluginForTwitter/images/unfollow.gif new file mode 100644 index 0000000000000000000000000000000000000000..9a97066cf2ae6f5d86fa37932895a48c65473078 GIT binary patch literal 144 zcmV;B0B`?CNk%w1VLAW{0FeU#YyzORRj#Q&yxtdaUS}tpQvto^1VbG@&=B8?l2}O#_J(Ib8{*gfT{60fc0027{7C`d= literal 0 HcmV?d00001 diff --git a/plugins/JP_TC_PluginForTwitter/index.php b/plugins/JP_TC_PluginForTwitter/index.php new file mode 100644 index 000000000..ace3aeb98 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/index.php @@ -0,0 +1,1440 @@ +]+?href=(?:"|')(.*?)(?:"|')(?:>|')(.*?)(?:<|')\/a(?:>|')@i", $textLink, $match)) { + $returnLink = '' . $match[2] .''; + } else if (preg_match("@]+?href=['\"](.+)['\"]>(.*)@Usi", $textLink, $match)) { + $returnLink = '' . $match[2] .''; + } else { + $returnLink = $textLink; + } + return $returnLink; +} + +// Twitter text body converting +function getTextBodyConvert($text) { + global $pluginMenuURL; + if (empty($pluginMenuURL)) { + $pluginMenuURL = getPluginMenuURL(); + } + + preg_match_all('@((http|https|ftp)://[^\s"\']+)@i', $text, $temp); + for ($i=0; $i' . UTF8::lessenAsEm($temp[1][$i], 30) . '', $text); + } + + preg_match_all('@\@{1}(\w+)@i', $text, $temp); + for ($i=0; $i' . $temp[1][$i] . '', $text); + } + + preg_match_all('@\#{1}(\w+)@i', $text, $temp); + for ($i=0; $i' . $temp[0][$i] . '', $text); + } + + return $text; +} + +// Twitter plugin menu url +function getPluginMenuURL() { + global $pluginURL, $blogURL; + $temp = explode("/" , $pluginURL); + $plugin = $temp[(count($temp)-1)]; + $pluginMenuURL = $blogURL . '/owner/plugin/adminMenu?name=' . $plugin . '/PN_Twitter_Management'; + return $pluginMenuURL; +} + +// Twitter date convert +function getTwitterDateConvert($published) { + $nowDate = time(); + $published = strtotime($published); + $dateConvert = getCovertDate(($nowDate - $published), $published); + return $dateConvert; +} + +function getCovertDate($reqTime, $published) { + $dateConvert = ''; + + if ($reqTime < 0 ) { + $dateConvert = 'less than 5 seconds ago'; + return $dateConvert; + } + + $month = floor($reqTime / 2592000); + $reqTime %= 2592000; + $day = floor($reqTime / 86400); + $reqTime %= 86400; + $hour = floor($reqTime / 3600); + $reqTime %= 3600; + $minute = floor($reqTime / 60); + $reqTime %= 60; + $second = $reqTime; + + if ($day > 1) { + $dateConvert = date('g:i A M jS', $published); + } else if($day > 0 && $day <=3) { + $dateConvert = 'about ' . $day . ' ' . ($day > 1 ? 'days' : 'day') . ' ago'; + } else if($hour > 0) { + $dateConvert = 'about ' . $hour . ' ' . ($hour > 1 ? 'hours' : 'hour') . ' ago'; + } else if($minute > 0) { + $dateConvert = $minute . ' ' . ($minute > 1 ? 'minutes' : 'minute') . ' ago'; + } else if($second >= 0) { + if($second >= 0 && $second < 5) { + $dateConvert = 'less than 5 seconds ago'; + } else if($second >= 5 && $second < 10) { + $dateConvert = 'less than 10 seconds ago'; + } else if($second >= 10 && $second < 20) { + $dateConvert = 'less than 20 seconds ago'; + } else if($second >= 20 && $second < 30) { + $dateConvert = 'half a minute ago'; + } else if($second >= 30 && $second < 60) { + $dateConvert = 'less than a minute ago'; + } + } + return $dateConvert; +} + +// Twitter Recipients List +function getTwitterRecipientsList($target) { + global $service, $pluginURL, $blogURL, $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $tw = new Twitter($data['username'], $data['password']); + $recipientsList = $tw->getRecipientsList(array('twttr'=>'true')); + + header('Content-Type: application/x-json; charset=UTF-8'); + echo $recipientsList; + flush(); +} + +// Twitter Create Favorites +function getCreateFavorites($target) { + global $service, $pluginURL, $blogURL, $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $id = (isset($_POST['id']) && !empty($_POST['id'])) ? $_POST['id'] : ''; + $tw = new Twitter($data['username'], $data['password']); + $cFav = $tw->createFavorite($id); + $cFavID = !empty($cFav->id) ? $cFav->id : ''; + $favorited = $cFav->favorited; + header('Content-Type: text/xml; charset=UTF-8'); + echo ''; + flush(); +} + +// Twitter Destroy Favorites +function getDestroyFavorites($target) { + global $service, $pluginURL, $blogURL, $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $id = (isset($_POST['id']) && !empty($_POST['id'])) ? $_POST['id'] : ''; + $tw = new Twitter($data['username'], $data['password']); + $dFav = $tw->destroyFavorite($id); + $dFavID = !empty($dFav->id) ? $dFav->id : ''; + $favorited = $dFav->favorited; + header('Content-Type: text/xml; charset=UTF-8'); + echo ''; + flush(); +} + +// Twitter Search keyword highlight +function getBindSearchHighlight($keyword, $content) { + $src = array("/", "|"); + $dst = array("\/", "\|"); + if (!trim($keyword)) return $content; + $tempContent = str_replace($src, $dst, quotemeta($keyword)); + $tempKeyword = $tempContent . "(?![^<]*>)"; + return preg_replace("/($tempKeyword)/i", "\\1", $content); +} + +// Twitter Saved Searches open or close +function getSavedSearchesOpenClose($target) { + requireComponent('Textcube.Function.misc'); + $savedSearchesView = (isset($_POST['openclose']) && !empty($_POST['openclose'])) ? $_POST['openclose'] : 'open'; + Setting::setBlogSetting("saved_searches", $savedSearchesView); + header('Content-Type: text/xml; charset=UTF-8'); + echo ''; + flush(); +} + +// Twitter Create Saved Searches +function getCreateSavedSearches($target) { + global $service, $pluginURL, $blogURL, $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + $q = (isset($_POST['qdata']) && !empty($_POST['qdata'])) ? $_POST['qdata'] : ''; + $result = ''; + if (!empty($data['username']) && !empty($data['password'])) { + if (!empty($q)) { + $tw = new Twitter($data['username'], $data['password']); + $createSave = $tw->createSavedSearches(array('q'=>$q)); + $errorMSG = empty($createSave->error) ? "0" : $createSave->error; + $saved_id = ""; + if ($errorMSG == "0") { + $saved_id = $createSave->id; + $saved_query = $createSave->query; + } + + header('Content-Type: text/xml; charset=UTF-8'); + $result = ''; + $result .= '' . $errorMSG . ''; + $result .= '' . $saved_id . ''; + $result .= '' . $saved_query . ''; + $result .= ''; + echo $result; + flush(); + } + } +} + +// Twitter Destroy Saved Searches +function getDestroySavedSearches($target) { + global $service, $pluginURL, $blogURL, $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + $id = (isset($_POST['qdata']) && !empty($_POST['qdata'])) ? $_POST['qdata'] : ''; + $result = ''; + if (!empty($data['username']) && !empty($data['password'])) { + if (!empty($id)) { + $tw = new Twitter($data['username'], $data['password']); + $destroySave = $tw->destroySavedSearches($id); + $errorMSG = empty($destroySave->error) ? "0" : $destroySave->error; + $saved_id = ""; + if ($errorMSG == "0") { + $saved_id = $destroySave->id; + $saved_query = $destroySave->query; + } + + header('Content-Type: text/xml; charset=UTF-8'); + $result = ''; + $result .= '' . $errorMSG . ''; + $result .= '' . $saved_id . ''; + $result .= '' . $saved_query . ''; + $result .= ''; + echo $result; + flush(); + } + } +} + +// Twitter management (Admin->center->Twitter management) +function PN_Twitter_Management() { + global $service, $pluginURL, $blogURL, $pluginMenuURL, $pluginName, $handler, $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + $savedSearchesView = !is_null(Setting::getBlogSetting("saved_searches")) ? Setting::getBlogSetting("saved_searches") : "open"; + $menu = (isset($_GET['menu']) && !empty($_GET['menu'])) ? $_GET['menu'] : 'friends'; + $user_id = (isset($_GET['user_id']) && !empty($_GET['user_id'])) ? $_GET['user_id'] : ''; + $seleteTab = (isset($_GET['seleteTab']) && !empty($_GET['seleteTab'])) ? $_GET['seleteTab'] : 'inbox'; + $search_q = (isset($_GET['q']) && !empty($_GET['q'])) ? $_GET['q'] : ''; + + $twFlagCHK = ""; + $twFlagMSG = ""; + if (empty($data['username']) || empty($data['password'])) { + $twFlagCHK = "disabled"; + $twFlagMSG = " * 트위터 사용자 정보를 설정해야 합니다.\n * 아이디와 비밀번호를 입력하세요.\n"; + } +?> + + + + + +verifyCredentials(); + $acount_id = $acount->id; + $acount_name = $acount->name; + $acount_screen_name = $acount->screen_name; + $acount_link = "http://twitter.com/" . $acount_screen_name; + $acount_image = $acount->profile_image_url; + $following_count = $acount->friends_count; + $followers_count = $acount->followers_count; + $updates_count = $acount->statuses_count; + $description = $acount->description; +?> +
    +

    트위터 정보

    +
    +
    + + +
    +
    +
    + + +
    +
    Saved Searches
    +savedSearches(); + $searchesList = '
      '; + if (count($searches) > 0) { + foreach ($searches as $search) { + $searchesList .= '
    • '; + $searchesList .= 'query) ? 'class="selectMenu"' : '') . ' >' . $search->name . ''; + $searchesList .= '
    • '; + if (strtolower($search_q) == strtolower($search->query)) { + $savedMatchID = $search->id; + } + } + } + $searchesList .= '
    '; + echo $searchesList; +?> +
    + +// //following friends +// $user_photo = ""; +// $limit = 0; +// $option = array('page'=>1); +// $friends = $tw->getFriends($option); +// foreach ($friends as $user) { +// $limit++; +// $user_name = $user->name; +// $user_screen_name = $user->screen_name; +// $user_image = $user->profile_image_url; +// $user_image = str_replace('_normal', '_mini', $user_image); +// $user_link = "http://twitter.com/" . $user_screen_name; +// $user_photo .= '' . $user_name . ' - profile image.'; +// if ($limit == 30) break; +// } +// echo $user_photo; +// +//
    +?> +
    +
    +
    + + +
    +

    트위터

    +
    +
    +

    + a direct message.'; + } else { + $doingTitle = "What are you doing?"; + } +?> + +

    + 140자 남음 +
    +
    + + + +
    +
    +
    + class="shortenLink" style="" /> + class="shortenURLCreate tw_button" /> +
    +
    + class="tw_button" /> +
    +
    +
    +
    +
    + +

    + '; + if (empty($savedMatchID)) { + $savedHtml .= 'Save this search'; + } else { + $savedHtml .= 'Remove this saved search'; + } + $savedHtml .= ''; + echo $savedHtml; + } + ?> +

    +
    + + +
    + +
      "> +$search_q, 'page'=>2, 'rpp'=>$data['listLength']); + $option = array('q'=>$search_q, 'page'=>1, 'rpp'=>$data['listLength']); + } else { + $optionNext = array('page'=>2, 'count'=>$data['listLength']); + $option = array('page'=>1, 'count'=>$data['listLength']); + } + + if ($menu == 'friends') { + $timelineNext = $tw->getFriendsTimeline($optionNext); + $timeline = $tw->getFriendsTimeline($option); + count($timeline); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'my') { + $timelineNext = $tw->getUserTimeline($optionNext); + $timeline = $tw->getUserTimeline($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'replies') { + $timelineNext = $tw->getReplies($optionNext); + $timeline = $tw->getReplies($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'direct') { + if ($seleteTab == "inbox") { + $timelineNext = $tw->getMessages($optionNext); + $timeline = $tw->getMessages($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else { + $timelineNext = $tw->getSentMessages($optionNext); + $timeline = $tw->getSentMessages($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } + } else if ($menu == 'favorites') { + $timelineNext = $tw->getFavorites($optionNext); + $timeline = $tw->getFavorites($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'following') { + $timelineNext = $tw->getFriends(array('page'=>2)); + $timeline = $tw->getFriends(array('page'=>1)); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'followers') { + $timelineNext = $tw->getFollowers(array('page'=>2)); + $timeline = $tw->getFollowers(array('page'=>1)); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'search') { + $timelineNext = $tw->getSearch($optionNext, 'json'); + $timeline = $tw->getSearch($option, 'json'); + $timelineResultsNext = $timelineNext->results; + $timelineResults = $timeline->results; + } + $nextPagingCount = count($timelineResultsNext); + foreach ($timelineResults as $status) { + if ($menu == 'direct') { + $status_id = $status->id; + if ($seleteTab == "inbox") { + $user_id = $status->sender->id; + $user_name = $status->sender->name; + $user_screen_name = $status->sender->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->sender->profile_image_url; + } else { + $user_id = $status->recipient->id; + $user_name = $status->recipient->name; + $user_screen_name = $status->recipient->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->recipient->profile_image_url; + } + $text = $status->text; + $text_convert = getTextBodyConvert($text); + $source = getTextLinkConvert($status->source); + $published = getTwitterDateConvert($status->created_at); + $published_link = "https://twitter.com/{$user_screen_name}/status/{$status_id}"; + $in_reply_to_status_id = ""; + $in_reply_to_screen_name = ""; + $in_reply_to_link = ""; + } else if ($menu == 'following' || $menu == 'followers') { + $user_id = $status->id; + $user_name = $status->name; + $user_screen_name = $status->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->profile_image_url; + $profile_image = str_replace('_normal.', '_mini.', $profile_image); + $location = !empty($status->location) ? ":: " . $status->location : ""; + $following = !empty($status->following) ? $status->following : 'false'; + $description = $status->description; + } else if ($menu == 'search') { + $status_id = $status->id; + $user_id = $status->from_user_id; + $user_name = $status->from_user; + $user_screen_name = $status->from_user; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->profile_image_url; + $text = $status->text; + $text_convert = getTextBodyConvert($text); + $text_convert = getBindSearchHighlight($search_q, $text_convert); + $source = getTextLinkConvert($status->source); + $published = getTwitterDateConvert($status->created_at); + $published_link = "https://twitter.com/{$user_screen_name}/status/{$status_id}"; + } else { + $status_id = $status->id; + $user_id = $status->user->id; + $user_name = $status->user->name; + $user_screen_name = $status->user->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->user->profile_image_url; + $text = $status->text; + $text_convert = getTextBodyConvert($text); + $source = getTextLinkConvert($status->source); + $published = getTwitterDateConvert($status->created_at); + $published_link = "https://twitter.com/{$user_screen_name}/status/{$status_id}"; + $favorited = $status->favorited; + $in_reply_to_status_id = !empty($status->in_reply_to_status_id) ? $status->in_reply_to_status_id : ""; + $in_reply_to_screen_name = !empty($status->in_reply_to_screen_name) ? $status->in_reply_to_screen_name : ""; + $in_reply_to_link = !empty($in_reply_to_status_id) ? ' in reply to ' . $in_reply_to_screen_name . '' : ""; + } + + $metaActionHtml = ""; + if (!in_array($menu, array("direct", 'following','followers'))) { + $metaActionHtml .= ''; + } + if (($data['username'] != $user_screen_name) && !in_array($menu, array("direct", 'following','followers'))) { + $metaActionHtml .= ''; + } + if ($data['username'] != $user_screen_name && $menu != "direct") { + $metaActionHtml .= ''; + } + if ($menu == "direct" || $menu == "followers") { + $metaActionHtml .= ''; + } + if (($data['username'] == $user_screen_name) || $menu == "direct") { + $metaActionHtml .= ''; + } + if (($menu == 'following' || $menu == 'followers') && $following == 'true') { + $metaActionHtml .= ''; + if ($menu == 'followers') { + $metaActionHtml .= ''; + } + } else if ($menu == 'followers' && $following == 'false') { + $metaActionHtml .= ''; + $metaActionHtml .= ''; + } + + if ($menu == 'following' || $menu == 'followers') { +?> +
    • +
      + + + <?php echo $user_name;?> + + +
      + + + + + +
      + + + + + + + +
      +
      +
      +
    • + +
    • +
      + + + <?php echo $user_name;?> + + +
      + + + + + +
      + + + + from + + + + + +
      +
      +
      +
    • + +
    + +
    +
    + +
    +

    트위터 환경설정 오류

    +
    +

    트위터 사용자 정보를 설정해야 합니다. 아이디와 비밀번호를 다시 확인해보세요.

    +
    +
    + +
    +$search_q, 'page'=>($page+1), 'rpp'=>$data['listLength']); + $option = array('q'=>$search_q, 'page'=>$page, 'rpp'=>$data['listLength']); + } else { + $optionNext = array('page'=>($page+1), 'count'=>$data['listLength']); + $option = array('page'=>$page, 'count'=>$data['listLength']); + } + if ($menu == 'friends') { + $timelineNext = $tw->getFriendsTimeline($optionNext); + $timeline = $tw->getFriendsTimeline($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'my') { + $timelineNext = $tw->getUserTimeline($optionNext); + $timeline = $tw->getUserTimeline($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'replies') { + $timelineNext = $tw->getReplies($optionNext); + $timeline = $tw->getReplies($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'direct') { + if ($seleteTab == "inbox") { + $timelineNext = $tw->getMessages($optionNext); + $timeline = $tw->getMessages($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else { + $timelineNext = $tw->getSentMessages($optionNext); + $timeline = $tw->getSentMessages($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } + } else if ($menu == 'favorites') { + $timelineNext = $tw->getFavorites($optionNext); + $timeline = $tw->getFavorites($option); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'following') { + $timelineNext = $tw->getFriends(array('page'=>($page+1))); + $timeline = $tw->getFriends(array('page'=>$page)); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'followers') { + $timelineNext = $tw->getFollowers(array('page'=>($page+1))); + $timeline = $tw->getFollowers(array('page'=>$page)); + $timelineResultsNext = $timelineNext; + $timelineResults = $timeline; + } else if ($menu == 'search') { + $timelineNext = $tw->getSearch($optionNext, 'json'); + $timeline = $tw->getSearch($option, 'json'); + $timelineResultsNext = $timelineNext->results; + $timelineResults = $timeline->results; + } + + $morePagingHtml = ""; + $nextPagingCount = count($timelineResultsNext); + + foreach ($timelineResults as $status) { + if ($menu == 'direct') { + if ($seleteTab == "inbox") { + $user_id = $status->sender->id; + $user_name = $status->sender->name; + $user_screen_name = $status->sender->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->sender->profile_image_url; + } else { + $user_id = $status->recipient->id; + $user_name = $status->recipient->name; + $user_screen_name = $status->recipient->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->recipient->profile_image_url; + } + $text = $status->text; + $text_convert = getTextBodyConvert($text); + $source = getTextLinkConvert($status->source); + $published = getTwitterDateConvert($status->created_at); + $published_link = "https://twitter.com/{$user_screen_name}/status/{$status_id}"; + $in_reply_to_status_id = ""; + $in_reply_to_screen_name = ""; + $in_reply_to_link = ""; + } else if ($menu == 'following' || $menu == 'followers') { + $user_id = $status->id; + $user_name = $status->name; + $user_screen_name = $status->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->profile_image_url; + $profile_image = str_replace('_normal.', '_mini.', $profile_image); + $location = $status->location; + $following = !empty($status->following) ? $status->following : 'false'; + $description = $status->description; + } else if ($menu == 'search') { + $status_id = $status->id; + $user_id = $status->from_user_id; + $user_name = $status->from_user; + $user_screen_name = $status->from_user; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->profile_image_url; + $text = getTextLinkConvert($status->text); + $text_convert = getTextBodyConvert($text); + $text_convert = getBindSearchHighlight($search_q, $text_convert); + $source = getTextLinkConvert($status->source); + $published = getTwitterDateConvert($status->created_at); + $published_link = "https://twitter.com/{$user_screen_name}/status/{$status_id}"; + } else { + $status_id = $status->id; + $user_id = $status->user->id; + $user_name = $status->user->name; + $user_screen_name = $status->user->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $status->user->profile_image_url; + $text = $status->text; + $text_convert = getTextBodyConvert($text); + $source = getTextLinkConvert($status->source); + $published = getTwitterDateConvert($status->created_at); + $published_link = "https://twitter.com/{$user_screen_name}/status/{$status_id}"; + $favorited = $status->favorited; + $in_reply_to_status_id = !empty($status->in_reply_to_status_id) ? $status->in_reply_to_status_id : ""; + $in_reply_to_screen_name = !empty($status->in_reply_to_screen_name) ? $status->in_reply_to_screen_name : ""; + $in_reply_to_link = !empty($in_reply_to_status_id) ? ' in reply to ' . $in_reply_to_screen_name . '' : ""; + } + + $metaActionHtml = ""; + if (!in_array($menu, array("direct", 'following','followers'))) { + $metaActionHtml .= ''; + } + if (($data['username'] != $user_screen_name) && !in_array($menu, array("direct", 'following','followers'))) { + $metaActionHtml .= ''; + } + if ($data['username'] != $user_screen_name && $menu != "direct") { + $metaActionHtml .= ''; + } + if ($menu == "direct" || $menu == "followers") { + $metaActionHtml .= ''; + } + if (($data['username'] == $user_screen_name) || $menu == "direct") { + $metaActionHtml .= ''; + } + if (($menu == 'following' || $menu == 'followers') && $following == 'true') { + $metaActionHtml .= ''; + if ($menu == 'followers') { + $metaActionHtml .= ''; + } + } else if ($menu == 'followers' && $following == 'false') { + $metaActionHtml .= ''; + $metaActionHtml .= ''; + } + + if ($menu == 'following' || $menu == 'followers') { + $morePagingHtml .= '
  • '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . $user_name . ''.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . $user_screen_name . ''.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . UTF8::lessenAsEm(UTF8::convert($description,'utf-8'), 100, '...') . ''.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . $user_name . ''.CRLF; + $morePagingHtml .= ' | ' . $location . ''.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . $metaActionHtml .CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= '
  • '.CRLF; + } else { + $morePagingHtml .= '
  • '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . $user_name . ''.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . $user_screen_name . ''.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . $text_convert . ''.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= ' '.CRLF; + if ($menu != 'direct') { + $morePagingHtml .= ' '.CRLF; + } + if ($menu != 'direct') { + $morePagingHtml .= ' from ' . $source . ' ' . $in_reply_to_link . ''.CRLF; + } + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= ' ' . $metaActionHtml .CRLF; + $morePagingHtml .= ' '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= '
    '.CRLF; + $morePagingHtml .= '
  • '.CRLF; + } + } + $morePagination = ""; + if ($nextPagingCount > 0) { + if ($menu == "direct") { + $paramTab = "&seleteTab=" . ($seleteTab == "inbox" ? "inbox" : "sent"); + } else if ($menu == "search") { + $paramTab = "&q=" . urlencode($search_q); + } else { + $paramTab = ""; + } + $morePagination = 'MORE'; + } + header('Content-Type: text/xml; charset=UTF-8'); + echo ''; + flush(); +} + +function getTwitterPostUpdate($target) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $menu = (isset($_POST['menu']) && !empty($_POST['menu'])) ? $_POST['menu'] : ""; + $update_body = (isset($_POST['body']) && !empty($_POST['body'])) ? $_POST['body'] : ""; + $reply_to = (isset($_POST['reply_to']) && !empty($_POST['reply_to'])) ? $_POST['reply_to'] : null; +// $update_body .= $data['hashTag'] == "1" ? " " . $data['hashTags'] : ""; + $result = ''; + if (!empty($data['username']) && !empty($data['password'])) { + if (!empty($update_body)) { + $updatedHtml = ""; + $tw = new Twitter($data['username'], $data['password']); + $updated = $tw->updateStatus($update_body, $reply_to); + + $status_id = $updated->id; + $user_id = $updated->user->id; + $user_name = $updated->user->name; + $user_screen_name = $updated->user->screen_name; + $user_link = "https://twitter.com/{$user_screen_name}"; + $profile_image = $updated->user->profile_image_url; + $text = $updated->text; + $text_convert = getTextBodyConvert($text); + $source = getTextLinkConvert($updated->source); + $published = getTwitterDateConvert($updated->created_at); + $published_link = "https://twitter.com/{$user_screen_name}/status/{$status_id}"; + $favorited = $updated->favorited; + $in_reply_to_status_id = !empty($updated->in_reply_to_status_id) ? $updated->in_reply_to_status_id : ""; + $in_reply_to_screen_name = !empty($updated->in_reply_to_screen_name) ? $updated->in_reply_to_screen_name : ""; + $in_reply_to_link = !empty($in_reply_to_status_id) ? ' in reply to ' . $in_reply_to_screen_name . '' : ""; + + $metaActionHtml = ""; + if ($menu != "direct") { + $metaActionHtml .= ''; + } + if (($data['username'] != $user_screen_name) && $menu != "direct") { + $metaActionHtml .= ''; + } + if ($data['username'] != $user_screen_name && $menu != "direct") { + $metaActionHtml .= ''; + } + if ($menu == "direct" || $menu == "followers") { + $metaActionHtml .= ''; + } + if (($data['username'] == $user_screen_name) || $menu == "direct") { + $metaActionHtml .= ''; + } + + $updatedHtml .= '
  • '.CRLF; + $updatedHtml .= '
    '.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' ' . $user_name . ''.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= '
    '.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' ' . $user_screen_name . ''.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' ' . $text_convert . ''.CRLF; + $updatedHtml .= '
    '.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' from ' . $source . ' ' . $in_reply_to_link . ''.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= ' ' . $metaActionHtml .CRLF;; + $updatedHtml .= ' '.CRLF; + $updatedHtml .= '
    '.CRLF; + $updatedHtml .= '
    '.CRLF; + $updatedHtml .= '
    '.CRLF; + $updatedHtml .= '
  • '.CRLF; + + header('Content-Type: text/xml; charset=UTF-8'); + $result = ''; + $result .= '0'; + $result .= '' . $status_id . ''; + $result .= ''; + $result .= ''; + echo $result; + flush(); + } + } +} + +function getTwitterDestroyStatus($target) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $id = (isset($_POST['id']) && !empty($_POST['id'])) ? $_POST['id'] : ""; + + $result = ''; + if (!empty($data['username']) && !empty($data['password'])) { + if (!empty($id)) { + $tw = new Twitter($data['username'], $data['password']); + $status = $tw->destroyStatus($id); + $errorMSG = empty($status->error) ? "0" : $status->error; + $status_id = ""; + if ($errorMSG == "0") { + $status_id = $status->id; + } + + header('Content-Type: text/xml; charset=UTF-8'); + $result = ''; + $result .= '' . $errorMSG . ''; + $result .= '' . $status_id . ''; + $result .= ''; + echo $result; + flush(); + } + } +} + +function getTwitterNewMessage($target) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $menu = (isset($_POST['menu']) && !empty($_POST['menu'])) ? $_POST['menu'] : ""; + $text = (isset($_POST['text']) && !empty($_POST['text'])) ? $_POST['text'] : ""; + $user = (isset($_POST['user']) && !empty($_POST['user'])) ? $_POST['user'] : ""; + + $result = ''; + if (!empty($data['username']) && !empty($data['password'])) { + if (!empty($text)) { + $updatedHtml = ""; + $tw = new Twitter($data['username'], $data['password']); + $message = $tw->newMessage($user, $text); + $errorMSG = empty($message->error) ? "0" : $message->error; + $message_id = ""; + $messageHtml = ""; + if ($errorMSG == "0") { + $message_id = $message->id; + $message_text = $message->text; + $message_convert = getTextBodyConvert($message_text); + $published = getTwitterDateConvert($message->created_at); + + $sender_id = $message->sender->id; + $sender_name = $message->sender->name; + $sender_screen_name = $message->sender->screen_name; + $sender_link = "https://twitter.com/{$sender_screen_name}"; + $sender_profile_image = $message->sender->profile_image_url; + + $recipient_id = $message->recipient->id; + $recipient_name = $message->recipient->name; + $recipient_screen_name = $message->recipient->screen_name; + $recipient_link = "https://twitter.com/{$recipient_screen_name}"; + $recipient_profile_image = $message->recipient->profile_image_url; + + if ($menu == "direct" || $menu == "followers") { + $metaActionHtml .= ''; + } + if (($data['username'] == $sender_screen_name) || $menu == "direct") { + $metaActionHtml .= ''; + } + + $messageHtml .= '
  • '.CRLF; + $messageHtml .= '
    '.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' ' . $recipient_name . ''.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= '
    '.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' ' . $recipient_screen_name . ''.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' ' . $message_convert . ''.CRLF; + $messageHtml .= '
    '.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' ' . $published . ''.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' '.CRLF; + $messageHtml .= ' ' . $metaActionHtml .CRLF;; + $messageHtml .= ' '.CRLF; + $messageHtml .= '
    '.CRLF; + $messageHtml .= '
    '.CRLF; + $messageHtml .= '
    '.CRLF; + $messageHtml .= '
  • '.CRLF; + } + + header('Content-Type: text/xml; charset=UTF-8'); + $result = ''; + $result .= '' . $errorMSG . ''; + $result .= '' . $message_id . ''; + $result .= ''; + $result .= ''; + echo $result; + flush(); + } + } +} + +function getTwitterDestroyMessage($target) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $id = (isset($_POST['id']) && !empty($_POST['id'])) ? $_POST['id'] : ""; + + $result = ''; + if (!empty($data['username']) && !empty($data['password'])) { + if (!empty($id)) { + $updatedHtml = ""; + $tw = new Twitter($data['username'], $data['password']); + $message = $tw->destroyMessage($id); + $errorMSG = empty($message->error) ? "0" : $message->error; + $message_id = ""; + $messageHtml = ""; + if ($errorMSG == "0") { + $message_id = $message->id; + } + + header('Content-Type: text/xml; charset=UTF-8'); + $result = ''; + $result .= '' . $errorMSG . ''; + $result .= '' . $message_id . ''; + $result .= ''; + echo $result; + flush(); + } + } +} + +function getTwitterCreateFriendship($target) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $menu = (isset($_POST['menu']) && !empty($_POST['menu'])) ? $_POST['menu'] : ""; + $user_id = (isset($_POST['user_id']) && !empty($_POST['user_id'])) ? $_POST['user_id'] : ""; + + $result = ''; + if (!empty($data['username']) && !empty($data['password'])) { + if (!empty($user_id)) { + $tw = new Twitter($data['username'], $data['password']); + $friendship = $tw->createFriendship($user_id); + $errorMSG = empty($friendship->error) ? "0" : $friendship->error; + $friendshipID = ""; + if ($errorMSG == "0") { + $friendshipID = $friendship->id; + $following = $friendship->following; + $user_screen_name = $friendship->screen_name; + } + + header('Content-Type: text/xml; charset=UTF-8'); + $result = ''; + $result .= '' . $errorMSG . ''; + $result .= '' . $friendshipID . ''; + $result .= '' . $following . ''; + $result .= ''; + $result .= ''; + echo $result; + flush(); + } + } +} + +function getTwitterDestroyFriendship($target) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + $menu = (isset($_POST['menu']) && !empty($_POST['menu'])) ? $_POST['menu'] : ""; + $user_id = (isset($_POST['user_id']) && !empty($_POST['user_id'])) ? $_POST['user_id'] : ""; + + $result = ''; + if (!empty($data['username']) && !empty($data['password'])) { + if (!empty($user_id)) { + $updatedHtml = ""; + $tw = new Twitter($data['username'], $data['password']); + $friendship = $tw->destroyFriendship($user_id); + $errorMSG = empty($friendship->error) ? "0" : $friendship->error; + $friendshipID = ""; + if ($errorMSG == "0") { + $friendshipID = $friendship->id; + $following = $friendship->following; + $user_screen_name = $friendship->screen_name; + } + + header('Content-Type: text/xml; charset=UTF-8'); + $result = ''; + $result .= '' . $errorMSG . ''; + $result .= '' . $friendshipID . ''; + $result .= '' . $following . ''; + $result .= ''; + $result .= ''; + echo $result; + flush(); + } + } +} + + +// Twitter update (Admin->center->dashboard->Twitter update widget) +function CT_Twitter_updating($target){ + global $service, $pluginURL, $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + $twFlagCHK = ""; + $twFlagMSG = ""; + if(empty($data['username']) || empty($data['password'])){ + $twFlagCHK = "disabled"; + $twFlagMSG = " * 트위터 사용자 정보를 설정해야 합니다.\n * 아이디와 비밀번호를 입력하세요.\n"; + } + ob_start(); +?> + + + + +
    +
    + + +
    +
    + class="shortenLink" style="" /> + class="shortenURLCreate tw_button" /> +
    +
    + 140자 남음  + class="update_button_mini tw_button" /> +
    +
    +
    +' . $resultShortenURL['error'] . ''; + flush(); +} + +function getUpdatingNewPostToTwitter($target, $mother) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + $blogid = getBlogId(); + if (!empty($data['username']) && !empty($data['password']) && $data['twitterUpdate'] == "public_synd") { + if ($data['updateText'] == 'title') { + $content = getTwitterContent($blogid, $target, 'title'); + } else { + $content = getTwitterContent($blogid, $target, 'content'); + } + if (in_array($content['visibility'], array("2", "3"))) { + $tw = new Twitter($data['username'], $data['password']); + $updated = $tw->updateStatus($content['body']); + } + } + return $target; +} + +function getUpdatingNewLineToTwitter($target, $mother) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + if (!empty($data['username']) && !empty($data['password'])) { + $content = UTF8::lessenAsEncoding($mother->content,140); + $tw = new Twitter($data['username'], $data['password']); + $updated = $tw->updateStatus($content); + } + return $target; +} + +function getUpdatingNewPostToTwitterSynd($target, $mother) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + $blogid = getBlogId(); + if (!empty($data['username']) && !empty($data['password']) && $data['twitterUpdate'] == "syndicate") { + if ($data['updateText'] == 'title') { + $content = getTwitterContent($blogid, $target, 'title'); + } else { + $content = getTwitterContent($blogid, $target, 'content'); + } + if (in_array($content['visibility'], array("2", "3"))) { + $tw = new Twitter($data['username'], $data['password']); + $updated = $tw->updateStatus($content['body']); + } + } + return $target; +} + +function getTwitterContent($blogid, $entryId, $updateText='title') { + global $blog, $service, $defaultURL, $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + $content = array(); + $tempContentTags = ""; + $entry = getEntry($blogid, $entryId); + $tempPermalink = $defaultURL . ($blog['useSloganOnPost'] ? "/entry/" . URL::encode($entry['slogan'], $service['useEncodedURL']) : "/" . $entry['id']); + $resultShortenURL = getTwitterBitlyShortenURL($tempPermalink); + $tempContentTags = $data['hashTag'] == "1" ? $data['hashTags'] : ""; + $tempContentTags .= " - " . ($resultShortenURL['error'] == "0" ? $resultShortenURL['shortUrl'] : $tempPermalink); + + $tempContentLimit = 140 - (strlen($tempContentTags) + 5); + if ($updateText == 'title') { + $tempContent = UTF8::lessenAsEncoding($entry['title'], $tempContentLimit, '...'); + } else { + $tempContent = UTF8::lessenAsEncoding(stripHTML(getEntryContentView($blogid, $entry['id'], $entry['content'], $entry['contentFormatter'])), $tempContentLimit, '...'); + } + + $content['body'] = $tempContent . " " . $tempContentTags; + $content['visibility'] = $entry['visibility']; + return $content; +} + +function getTwitterBitlyShortenURL($longURL) { + global $configVal; + requireComponent('Textcube.Function.misc'); + $data = Misc::fetchConfigVal($configVal); + getTwitterInitConfigVal($data); + + $result = array(); + if (!empty($longURL)) { + $tw = new Twitter($data['username'], $data['password']); + $params = array(); + $params['login'] = "textcube"; //It's key for plugin. It does not change.(by jparker2.0@gmail.com) + $params['apiKey'] = "R_fcfc2c0c70d30aca174fa771c415d2cb"; //It's key for plugin. It does not change.(by jparker2.0@gmail.com) + $params['longUrl'] = $longURL; + $shorten = $tw->bitShortenURL($params, 'xml'); + $resultError = $shorten->results->nodeKeyVal->errorCode; + $result['error'] = empty($resultError) ? $shorten->errorCode : $resultError; + if ($result['error'] == "0") { + $result['shortUrl'] = $shorten->results->nodeKeyVal->shortUrl; + } + } + return $result; +} + +function getCurrentBlogVersion() { + $currentVersion = file_get_contents(ROOT . '/cache/CHECKUP'); + $currentVersion = substr($currentVersion, 0, 3); + return $currentVersion; +} + +function getJQueryCheckLoad($target) { + global $pluginURL; + if (getCurrentBlogVersion() < 1.8) { + $target .= ''.CRLF; + $target .= ''.CRLF; + } + return $target; +} + +function getTwitterInitConfigVal(&$data) { + $data['username'] = isset($data['username']) && !empty($data['username']) ? $data['username'] : ""; + $data['password'] = isset($data['password']) && !empty($data['password']) ? $data['password'] : ""; + $data['hashTag'] = isset($data['hashTag']) && !empty($data['hashTag']) ? $data['hashTag'] : ""; + $data['hashTags'] = isset($data['hashTags']) && !empty($data['hashTags']) ? $data['hashTags'] : ""; + $data['twitterUpdate'] = isset($data['twitterUpdate']) && !empty($data['twitterUpdate']) ? $data['twitterUpdate'] : "none"; + $data['updateText'] = isset($data['updateText']) && !empty($data['updateText']) ? $data['updateText'] : "title"; + $data['listLength'] = isset($data['listLength']) && !empty($data['listLength']) ? $data['listLength'] : "10"; +} + +function getTwitterDataSet($DATA) { + requireComponent('Textcube.Function.misc'); + $cfg = Misc::fetchConfigVal($DATA); + $tw = new Twitter($cfg['username'], $cfg['password']); + $res = $tw->getUserTimeline(); + if (!empty($res->error)) { + return "::Authentication error::\n\n Username && Password requires authentication. \n (" . $res->error . ")"; + } + + return true; +} +?> diff --git a/plugins/JP_TC_PluginForTwitter/index.xml b/plugins/JP_TC_PluginForTwitter/index.xml new file mode 100644 index 000000000..5f74818d1 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/index.xml @@ -0,0 +1,101 @@ + + + JP Twitter plugin + JP 트위터 플러그인 + + + http://create74.com/ + 1.9.0716 + GPL + + + + + + 1.8 + + + +
    + getBitlyShortenURLCreate + getTwitterPostUpdate + getTwitterDestroyStatus + getTwitterUpateMorePaging + getCreateFavorites + getDestroyFavorites + getTwitterRecipientsList + getTwitterNewMessage + getTwitterDestroyMessage + getTwitterCreateFriendship + getTwitterDestroyFriendship + getSavedSearchesOpenClose + getCreateSavedSearches + getDestroySavedSearches + + getUpdatingNewPostToTwitter + getUpdatingNewLineToTwitter + getUpdatingNewPostToTwitter + getUpdatingNewPostToTwitterSynd + getJQueryCheckLoad + + + + center + 5 + Twitter Management + 트위터 관리 + PN_Twitter_Management + + + menu + string + + + + seleteTab + string + + + + user_id + string + + + + q + string + + + + + + + + +
    + + +
    +
    + + 공개 또는 발행 글  ]]> + 발행시  ]]> + 사용 안함]]> + + + + + + + + + +
    +
    + + * 단, 'following', 'followers' 목록 제외]]> + +
    +
    + + diff --git a/plugins/JP_TC_PluginForTwitter/lib/JSON.php b/plugins/JP_TC_PluginForTwitter/lib/JSON.php new file mode 100644 index 000000000..1938047ff --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/JSON.php @@ -0,0 +1,615 @@ + + * @author Matt Knapp + * @author Brett Stimmerman + * @copyright 2005 Michal Migurski + * @license http://www.freebsd.org/copyright/freebsd-license.html + * @link http://pear.php.net/pepr/pepr-proposal-show.php?id=198 + */ + +/** + * Marker constant for JSON::decode(), used to flag stack state + */ +define('JSON_SLICE', 1); + +/** + * Marker constant for JSON::decode(), used to flag stack state + */ +define('JSON_IN_STR', 2); + +/** + * Marker constant for JSON::decode(), used to flag stack state + */ +define('JSON_IN_ARR', 4); + +/** + * Marker constant for JSON::decode(), used to flag stack state + */ +define('JSON_IN_OBJ', 8); + +/** + * Marker constant for JSON::decode(), used to flag stack state + */ +define('JSON_IN_CMT', 16); + +/** + * Behavior switch for JSON::decode() + */ +define('JSON_LOOSE_TYPE', 10); + +/** + * Behavior switch for JSON::decode() + */ +define('JSON_STRICT_TYPE', 11); + +/** + * Converts to and from JSON format. + * + * @category + * @package + * @author Michal Migurski + * @author Matt Knapp + * @author Brett Stimmerman + * @copyright 2005 Michal Migurski + * @license http://www.php.net/license/3_0.txt PHP License 3.0 + * @version + * @link + * @see + * @since + * @deprecated + */ +class JSON +{ + /** + * constructs a new JSON instance + * + * @param int $use object behavior: when encoding or decoding, + * be loose or strict about object/array usage + * + * possible values: + * JSON_STRICT_TYPE - strict typing, default + * "{...}" syntax creates objects in decode. + * JSON_LOOSE_TYPE - loose typing + * "{...}" syntax creates associative arrays in decode. + */ + function JSON($use=JSON_STRICT_TYPE) + { + $this->use = $use; + } + + /** + * encodes an arbitrary variable into JSON format + * + * @param mixed $var any number, boolean, string, array, or object to be encoded. + * see argument 1 to JSON() above for array-parsing behavior. + * if var is a strng, note that encode() always expects it + * to be in ASCII or UTF-8 format! + * + * @return string JSON string representation of input var + * @access public + */ + function encode($var) + { + switch (gettype($var)) { + case 'boolean': + return $var ? 'true' : 'false'; + + case 'NULL': + return 'null'; + + case 'integer': + return sprintf('%d', $var); + + case 'double': + case 'float': + return sprintf('%f', $var); + + case 'string': + // STRINGS ARE EXPECTED TO BE IN ASCII OR UTF-8 FORMAT + $ascii = ''; + $strlen_var = strlen($var); + + /* + * Iterate over every character in the string, + * escaping with a slash or encoding to UTF-8 where necessary + */ + for ($c = 0; $c < $strlen_var; ++$c) { + + $ord_var_c = ord($var{$c}); + + switch ($ord_var_c) { + case 0x08: $ascii .= '\b'; break; + case 0x09: $ascii .= '\t'; break; + case 0x0A: $ascii .= '\n'; break; + case 0x0C: $ascii .= '\f'; break; + case 0x0D: $ascii .= '\r'; break; + + case 0x22: + case 0x2F: + case 0x5C: + // double quote, slash, slosh + $ascii .= '\\'.$var{$c}; + break; + + case (($ord_var_c >= 0x20) && ($ord_var_c <= 0x7F)): + // characters U-00000000 - U-0000007F (same as ASCII) + $ascii .= $var{$c}; + break; + + case (($ord_var_c & 0xE0) == 0xC0): + // characters U-00000080 - U-000007FF, mask 110XXXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, ord($var{$c+1})); + $c+=1; + $utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8'); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF0) == 0xE0): + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c+1}), + ord($var{$c+2})); + $c+=2; + $utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8'); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xF8) == 0xF0): + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c+1}), + ord($var{$c+2}), + ord($var{$c+3})); + $c+=3; + $utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8'); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFC) == 0xF8): + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c+1}), + ord($var{$c+2}), + ord($var{$c+3}), + ord($var{$c+4})); + $c+=4; + $utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8'); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + + case (($ord_var_c & 0xFE) == 0xFC): + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $char = pack('C*', $ord_var_c, + ord($var{$c+1}), + ord($var{$c+2}), + ord($var{$c+3}), + ord($var{$c+4}), + ord($var{$c+5})); + $c+=5; + $utf16 = mb_convert_encoding($char, 'UTF-16', 'UTF-8'); + $ascii .= sprintf('\u%04s', bin2hex($utf16)); + break; + } + } + + return '"'.$ascii.'"'; + + case 'array': + /* + * As per JSON spec if any array key is not an integer + * we must treat the the whole array as an object. We + * also try to catch a sparsely populated associative + * array with numeric keys here because some JS engines + * will create an array with empty indexes up to + * max_index which can cause memory issues and because + * the keys, which may be relevant, will be remapped + * otherwise. + * + * As per the ECMA and JSON specification an object may + * have any string as a property. Unfortunately due to + * a hole in the ECMA specification if the key is a + * ECMA reserved word or starts with a digit the + * parameter is only accessible using ECMAScript's + * bracket notation. + */ + + // treat as a JSON object + if (is_array($var) && count($var) && (array_keys($var) !== range(0, sizeof($var) - 1))) { + return sprintf('{%s}', join(',', array_map(array($this, 'name_value'), + array_keys($var), + array_values($var)))); + } + + // treat it like a regular array + return sprintf('[%s]', join(',', array_map(array($this, 'encode'), $var))); + + case 'object': + $vars = get_object_vars($var); + return sprintf('{%s}', join(',', array_map(array($this, 'name_value'), + array_keys($vars), + array_values($vars)))); + + default: + return ''; + } + } + + /** + * encodes an arbitrary variable into JSON format, alias for encode() + */ + function enc($var) + { + return $this->encode($var); + } + + /** function name_value + * array-walking function for use in generating JSON-formatted name-value pairs + * + * @param string $name name of key to use + * @param mixed $value reference to an array element to be encoded + * + * @return string JSON-formatted name-value pair, like '"name":value' + * @access private + */ + function name_value($name, $value) + { + return (sprintf("%s:%s", $this->encode(strval($name)), $this->encode($value))); + } + + /** + * reduce a string by removing leading and trailing comments and whitespace + * + * @param $str string string value to strip of comments and whitespace + * + * @return string string value stripped of comments and whitespace + * @access private + */ + function reduce_string($str) + { + $str = preg_replace(array( + + // eliminate single line comments in '// ...' form + '#^\s*//(.+)$#m', + + // eliminate multi-line comments in '/* ... */' form, at start of string + '#^\s*/\*(.+)\*/#Us', + + // eliminate multi-line comments in '/* ... */' form, at end of string + '#/\*(.+)\*/\s*$#Us' + + ), '', $str); + + // eliminate extraneous space + return trim($str); + } + + /** + * decodes a JSON string into appropriate variable + * + * @param string $str JSON-formatted string + * + * @return mixed number, boolean, string, array, or object + * corresponding to given JSON input string. + * See argument 1 to JSON() above for object-output behavior. + * Note that decode() always returns strings + * in ASCII or UTF-8 format! + * @access public + */ + function decode($str) + { + $str = $this->reduce_string($str); + + switch (strtolower($str)) { + case 'true': + return true; + + case 'false': + return false; + + case 'null': + return null; + + default: + if (is_numeric($str)) { + // Lookie-loo, it's a number + + // This would work on its own, but I'm trying to be + // good about returning integers where appropriate: + // return (float)$str; + + // Return float or int, as appropriate + return ((float)$str == (integer)$str) + ? (integer)$str + : (float)$str; + + } elseif (preg_match('/^("|\').+("|\')$/s', $str, $m) && $m[1] == $m[2]) { + // STRINGS RETURNED IN UTF-8 FORMAT + $delim = substr($str, 0, 1); + $chrs = substr($str, 1, -1); + $utf8 = ''; + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c < $strlen_chrs; ++$c) { + + $substr_chrs_c_2 = substr($chrs, $c, 2); + $ord_chrs_c = ord($chrs{$c}); + + switch ($substr_chrs_c_2) { + case '\b': $utf8 .= chr(0x08); $c+=1; break; + case '\t': $utf8 .= chr(0x09); $c+=1; break; + case '\n': $utf8 .= chr(0x0A); $c+=1; break; + case '\f': $utf8 .= chr(0x0C); $c+=1; break; + case '\r': $utf8 .= chr(0x0D); $c+=1; break; + + case '\\"': + case '\\\'': + case '\\\\': + case '\\/': + if (($delim == '"' && $substr_chrs_c_2 != '\\\'') || + ($delim == "'" && $substr_chrs_c_2 != '\\"')) { + $utf8 .= $chrs{++$c}; + } + break; + + default: + if (preg_match('/\\\u[0-9A-F]{4}/i', substr($chrs, $c, 6))) { + // single, escaped unicode character + $utf16 = chr(hexdec(substr($chrs, ($c+2), 2))) + . chr(hexdec(substr($chrs, ($c+4), 2))); + $utf8 .= mb_convert_encoding($utf16, 'UTF-8', 'UTF-16'); + $c+=5; + + } elseif(($ord_chrs_c >= 0x20) && ($ord_chrs_c <= 0x7F)) { + $utf8 .= $chrs{$c}; + + } elseif(($ord_chrs_c & 0xE0) == 0xC0) { + // characters U-00000080 - U-000007FF, mask 110XXXXX + //see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 2); $c += 1; + + } elseif(($ord_chrs_c & 0xF0) == 0xE0) { + // characters U-00000800 - U-0000FFFF, mask 1110XXXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 3); $c += 2; + + } elseif(($ord_chrs_c & 0xF8) == 0xF0) { + // characters U-00010000 - U-001FFFFF, mask 11110XXX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 4); $c += 3; + + } elseif(($ord_chrs_c & 0xFC) == 0xF8) { + // characters U-00200000 - U-03FFFFFF, mask 111110XX + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 5); $c += 4; + + } elseif(($ord_chrs_c & 0xFE) == 0xFC) { + // characters U-04000000 - U-7FFFFFFF, mask 1111110X + // see http://www.cl.cam.ac.uk/~mgk25/unicode.html#utf-8 + $utf8 .= substr($chrs, $c, 6); $c += 5; + + } + break; + + } + + } + + return $utf8; + + } elseif (preg_match('/^\[.*\]$/s', $str) || preg_match('/^\{.*\}$/s', $str)) { + // array, or object notation + + if ($str{0} == '[') { + $stk = array(JSON_IN_ARR); + $arr = array(); + } else { + if ($this->use == JSON_LOOSE_TYPE) { + $stk = array(JSON_IN_OBJ); + $obj = array(); + } else { + $stk = array(JSON_IN_OBJ); + $obj = new stdClass(); + } + } + + array_push($stk, array('what' => JSON_SLICE, + 'where' => 0, + 'delim' => false)); + + $chrs = substr($str, 1, -1); + $chrs = $this->reduce_string($chrs); + + if ($chrs == '') { + if (reset($stk) == JSON_IN_ARR) { + return $arr; + + } else { + return $obj; + + } + } + + //print("\nparsing {$chrs}\n"); + + $strlen_chrs = strlen($chrs); + + for ($c = 0; $c <= $strlen_chrs; ++$c) { + + $top = end($stk); + $substr_chrs_c_2 = substr($chrs, $c, 2); + + if (($c == $strlen_chrs) || (($chrs{$c} == ',') && ($top['what'] == JSON_SLICE))) { + // found a comma that is not inside a string, array, etc., + // OR we've reached the end of the character list + $slice = substr($chrs, $top['where'], ($c - $top['where'])); + array_push($stk, array('what' => JSON_SLICE, 'where' => ($c + 1), 'delim' => false)); + //print("Found split at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + if (reset($stk) == JSON_IN_ARR) { + // we are in an array, so just push an element onto the stack + array_push($arr, $this->decode($slice)); + + } elseif (reset($stk) == JSON_IN_OBJ) { + // we are in an object, so figure + // out the property name and set an + // element in an associative array, + // for now + if (preg_match('/^\s*(["\'].*[^\\\]["\'])\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // "name":value pair + $key = $this->decode($parts[1]); + $val = $this->decode($parts[2]); + + if ($this->use == JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } elseif (preg_match('/^\s*(\w+)\s*:\s*(\S.*),?$/Uis', $slice, $parts)) { + // name:value pair, where name is unquoted + $key = $parts[1]; + $val = $this->decode($parts[2]); + + if ($this->use == JSON_LOOSE_TYPE) { + $obj[$key] = $val; + } else { + $obj->$key = $val; + } + } + + } + + } elseif ((($chrs{$c} == '"') || ($chrs{$c} == "'")) && + in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) { + // found a quote, and we are not inside a string + array_push($stk, array('what' => JSON_IN_STR, 'where' => $c, 'delim' => $chrs{$c})); + //print("Found start of string at {$c}\n"); + + } elseif (($chrs{$c} == $top['delim']) && + ($top['what'] == JSON_IN_STR) && + (($chrs{$c - 1} != "\\") || + ($chrs{$c - 1} == "\\" && $chrs{$c - 2} == "\\"))) { + // found a quote, we're in a string, and it's not escaped + array_pop($stk); + //print("Found end of string at {$c}: ".substr($chrs, $top['where'], (1 + 1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '[') && + in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) { + // found a left-bracket, and we are in an array, object, or slice + array_push($stk, array('what' => JSON_IN_ARR, 'where' => $c, 'delim' => false)); + //print("Found start of array at {$c}\n"); + + } elseif (($chrs{$c} == ']') && ($top['what'] == JSON_IN_ARR)) { + // found a right-bracket, and we're in an array + array_pop($stk); + //print("Found end of array at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($chrs{$c} == '{') && + in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) { + // found a left-brace, and we are in an array, object, or slice + array_push($stk, array('what' => JSON_IN_OBJ, 'where' => $c, 'delim' => false)); + //print("Found start of object at {$c}\n"); + + } elseif (($chrs{$c} == '}') && ($top['what'] == JSON_IN_OBJ)) { + // found a right-brace, and we're in an object + array_pop($stk); + //print("Found end of object at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } elseif (($substr_chrs_c_2 == '/*') && + in_array($top['what'], array(JSON_SLICE, JSON_IN_ARR, JSON_IN_OBJ))) { + // found a comment start, and we are in an array, object, or slice + array_push($stk, array('what' => JSON_IN_CMT, 'where' => $c, 'delim' => false)); + $c++; + //print("Found start of comment at {$c}\n"); + + } elseif (($substr_chrs_c_2 == '*/') && ($top['what'] == JSON_IN_CMT)) { + // found a comment end, and we're in one now + array_pop($stk); + $c++; + + for ($i = $top['where']; $i <= $c; ++$i) + $chrs = substr_replace($chrs, ' ', $i, 1); + + //print("Found end of comment at {$c}: ".substr($chrs, $top['where'], (1 + $c - $top['where']))."\n"); + + } + + } + + if (reset($stk) == JSON_IN_ARR) { + return $arr; + + } elseif (reset($stk) == JSON_IN_OBJ) { + return $obj; + + } + + } + } + } + + /** + * decodes a JSON string into appropriate variable; alias for decode() + */ + function dec($var) + { + return $this->decode($var); + } + +} + +?> \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/LICENSE b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/LICENSE new file mode 100644 index 000000000..b8602677e --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/LICENSE @@ -0,0 +1,340 @@ + GNU GENERAL PUBLIC LICENSE + Version 2, June 1991 + + Copyright (C) 1989, 1991 Free Software Foundation, Inc. + 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The licenses for most software are designed to take away your +freedom to share and change it. By contrast, the GNU General Public +License is intended to guarantee your freedom to share and change free +software--to make sure the software is free for all its users. This +General Public License applies to most of the Free Software +Foundation's software and to any other program whose authors commit to +using it. (Some other Free Software Foundation software is covered by +the GNU Library General Public License instead.) You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +this service if you wish), that you receive source code or can get it +if you want it, that you can change the software or use pieces of it +in new free programs; and that you know you can do these things. + + To protect your rights, we need to make restrictions that forbid +anyone to deny you these rights or to ask you to surrender the rights. +These restrictions translate to certain responsibilities for you if you +distribute copies of the software, or if you modify it. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must give the recipients all the rights that +you have. You must make sure that they, too, receive or can get the +source code. And you must show them these terms so they know their +rights. + + We protect your rights with two steps: (1) copyright the software, and +(2) offer you this license which gives you legal permission to copy, +distribute and/or modify the software. + + Also, for each author's protection and ours, we want to make certain +that everyone understands that there is no warranty for this free +software. If the software is modified by someone else and passed on, we +want its recipients to know that what they have is not the original, so +that any problems introduced by others will not reflect on the original +authors' reputations. + + Finally, any free program is threatened constantly by software +patents. We wish to avoid the danger that redistributors of a free +program will individually obtain patent licenses, in effect making the +program proprietary. To prevent this, we have made it clear that any +patent must be licensed for everyone's free use or not licensed at all. + + The precise terms and conditions for copying, distribution and +modification follow. + + GNU GENERAL PUBLIC LICENSE + TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION + + 0. This License applies to any program or other work which contains +a notice placed by the copyright holder saying it may be distributed +under the terms of this General Public License. The "Program", below, +refers to any such program or work, and a "work based on the Program" +means either the Program or any derivative work under copyright law: +that is to say, a work containing the Program or a portion of it, +either verbatim or with modifications and/or translated into another +language. (Hereinafter, translation is included without limitation in +the term "modification".) Each licensee is addressed as "you". + +Activities other than copying, distribution and modification are not +covered by this License; they are outside its scope. The act of +running the Program is not restricted, and the output from the Program +is covered only if its contents constitute a work based on the +Program (independent of having been made by running the Program). +Whether that is true depends on what the Program does. + + 1. You may copy and distribute verbatim copies of the Program's +source code as you receive it, in any medium, provided that you +conspicuously and appropriately publish on each copy an appropriate +copyright notice and disclaimer of warranty; keep intact all the +notices that refer to this License and to the absence of any warranty; +and give any other recipients of the Program a copy of this License +along with the Program. + +You may charge a fee for the physical act of transferring a copy, and +you may at your option offer warranty protection in exchange for a fee. + + 2. You may modify your copy or copies of the Program or any portion +of it, thus forming a work based on the Program, and copy and +distribute such modifications or work under the terms of Section 1 +above, provided that you also meet all of these conditions: + + a) You must cause the modified files to carry prominent notices + stating that you changed the files and the date of any change. + + b) You must cause any work that you distribute or publish, that in + whole or in part contains or is derived from the Program or any + part thereof, to be licensed as a whole at no charge to all third + parties under the terms of this License. + + c) If the modified program normally reads commands interactively + when run, you must cause it, when started running for such + interactive use in the most ordinary way, to print or display an + announcement including an appropriate copyright notice and a + notice that there is no warranty (or else, saying that you provide + a warranty) and that users may redistribute the program under + these conditions, and telling the user how to view a copy of this + License. (Exception: if the Program itself is interactive but + does not normally print such an announcement, your work based on + the Program is not required to print an announcement.) + +These requirements apply to the modified work as a whole. If +identifiable sections of that work are not derived from the Program, +and can be reasonably considered independent and separate works in +themselves, then this License, and its terms, do not apply to those +sections when you distribute them as separate works. But when you +distribute the same sections as part of a whole which is a work based +on the Program, the distribution of the whole must be on the terms of +this License, whose permissions for other licensees extend to the +entire whole, and thus to each and every part regardless of who wrote it. + +Thus, it is not the intent of this section to claim rights or contest +your rights to work written entirely by you; rather, the intent is to +exercise the right to control the distribution of derivative or +collective works based on the Program. + +In addition, mere aggregation of another work not based on the Program +with the Program (or with a work based on the Program) on a volume of +a storage or distribution medium does not bring the other work under +the scope of this License. + + 3. You may copy and distribute the Program (or a work based on it, +under Section 2) in object code or executable form under the terms of +Sections 1 and 2 above provided that you also do one of the following: + + a) Accompany it with the complete corresponding machine-readable + source code, which must be distributed under the terms of Sections + 1 and 2 above on a medium customarily used for software interchange; or, + + b) Accompany it with a written offer, valid for at least three + years, to give any third party, for a charge no more than your + cost of physically performing source distribution, a complete + machine-readable copy of the corresponding source code, to be + distributed under the terms of Sections 1 and 2 above on a medium + customarily used for software interchange; or, + + c) Accompany it with the information you received as to the offer + to distribute corresponding source code. (This alternative is + allowed only for noncommercial distribution and only if you + received the program in object code or executable form with such + an offer, in accord with Subsection b above.) + +The source code for a work means the preferred form of the work for +making modifications to it. For an executable work, complete source +code means all the source code for all modules it contains, plus any +associated interface definition files, plus the scripts used to +control compilation and installation of the executable. However, as a +special exception, the source code distributed need not include +anything that is normally distributed (in either source or binary +form) with the major components (compiler, kernel, and so on) of the +operating system on which the executable runs, unless that component +itself accompanies the executable. + +If distribution of executable or object code is made by offering +access to copy from a designated place, then offering equivalent +access to copy the source code from the same place counts as +distribution of the source code, even though third parties are not +compelled to copy the source along with the object code. + + 4. You may not copy, modify, sublicense, or distribute the Program +except as expressly provided under this License. Any attempt +otherwise to copy, modify, sublicense or distribute the Program is +void, and will automatically terminate your rights under this License. +However, parties who have received copies, or rights, from you under +this License will not have their licenses terminated so long as such +parties remain in full compliance. + + 5. You are not required to accept this License, since you have not +signed it. However, nothing else grants you permission to modify or +distribute the Program or its derivative works. These actions are +prohibited by law if you do not accept this License. Therefore, by +modifying or distributing the Program (or any work based on the +Program), you indicate your acceptance of this License to do so, and +all its terms and conditions for copying, distributing or modifying +the Program or works based on it. + + 6. Each time you redistribute the Program (or any work based on the +Program), the recipient automatically receives a license from the +original licensor to copy, distribute or modify the Program subject to +these terms and conditions. You may not impose any further +restrictions on the recipients' exercise of the rights granted herein. +You are not responsible for enforcing compliance by third parties to +this License. + + 7. If, as a consequence of a court judgment or allegation of patent +infringement or for any other reason (not limited to patent issues), +conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot +distribute so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you +may not distribute the Program at all. For example, if a patent +license would not permit royalty-free redistribution of the Program by +all those who receive copies directly or indirectly through you, then +the only way you could satisfy both it and this License would be to +refrain entirely from distribution of the Program. + +If any portion of this section is held invalid or unenforceable under +any particular circumstance, the balance of the section is intended to +apply and the section as a whole is intended to apply in other +circumstances. + +It is not the purpose of this section to induce you to infringe any +patents or other property right claims or to contest validity of any +such claims; this section has the sole purpose of protecting the +integrity of the free software distribution system, which is +implemented by public license practices. Many people have made +generous contributions to the wide range of software distributed +through that system in reliance on consistent application of that +system; it is up to the author/donor to decide if he or she is willing +to distribute software through any other system and a licensee cannot +impose that choice. + +This section is intended to make thoroughly clear what is believed to +be a consequence of the rest of this License. + + 8. If the distribution and/or use of the Program is restricted in +certain countries either by patents or by copyrighted interfaces, the +original copyright holder who places the Program under this License +may add an explicit geographical distribution limitation excluding +those countries, so that distribution is permitted only in or among +countries not thus excluded. In such case, this License incorporates +the limitation as if written in the body of this License. + + 9. The Free Software Foundation may publish revised and/or new versions +of the General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + +Each version is given a distinguishing version number. If the Program +specifies a version number of this License which applies to it and "any +later version", you have the option of following the terms and conditions +either of that version or of any later version published by the Free +Software Foundation. If the Program does not specify a version number of +this License, you may choose any version ever published by the Free Software +Foundation. + + 10. If you wish to incorporate parts of the Program into other free +programs whose distribution conditions are different, write to the author +to ask for permission. For software which is copyrighted by the Free +Software Foundation, write to the Free Software Foundation; we sometimes +make exceptions for this. Our decision will be guided by the two goals +of preserving the free status of all derivatives of our free software and +of promoting the sharing and reuse of software generally. + + NO WARRANTY + + 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY +FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN +OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES +PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED +OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF +MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS +TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE +PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, +REPAIR OR CORRECTION. + + 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR +REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, +INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING +OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED +TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY +YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER +PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE +POSSIBILITY OF SUCH DAMAGES. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +convey the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software; you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + + +Also add information on how to contact you by electronic and paper mail. + +If the program is interactive, make it output a short notice like this +when it starts in an interactive mode: + + Gnomovision version 69, Copyright (C) year name of author + Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, the commands you use may +be called something other than `show w' and `show c'; they could even be +mouse-clicks or menu items--whatever suits your program. + +You should also get your employer (if you work as a programmer) or your +school, if any, to sign a "copyright disclaimer" for the program, if +necessary. Here is a sample; alter the names: + + Yoyodyne, Inc., hereby disclaims all copyright interest in the program + `Gnomovision' (which makes passes at compilers) written by James Hacker. + + , 1 April 1989 + Ty Coon, President of Vice + +This General Public License does not permit incorporating your program into +proprietary programs. If your program is a subroutine library, you may +consider it more useful to permit linking proprietary applications with the +library. If this is what you want to do, use the GNU Library General +Public License instead of this License. diff --git a/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/README b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/README new file mode 100644 index 000000000..82888074c --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/README @@ -0,0 +1,99 @@ +CURL Extension Emulation Library +Version 1.0.4 +Copyright 2004-2007, Steve Blinch +http://code.blitzaffe.com +============================================================================ + +DESCRIPTION + +Provides a pure-PHP implementation of the PHP CURL extension, for use on +systems which do not already have the CURL extension installed. It emulates +all of the curl_* functions normally provided by the CURL extension itself. + +This will automatically detect and use the best CURL implementation available +on your server. It will attempt the following, in order: + +1) Check for the existence of the "real" CURL PHP Extension. If it is +loaded, the library will do nothing (and it will not interfere with the +"real" extension). +2) Check for the existence of the CURL console binary (usually located in +/usr/bin/curl). If found, the library will emulate the CURL PHP +extension (including all curl_* functions) and use the console binary +to execute all requests. +3) If neither the "real" CURL PHP Extension nor the CURL console binary +are available, the library will emulate the CURL PHP extension (including +all curl_* functions) using a native, pure-PHP HTTP client implementation. +This implementation is somewhat limited, but it provides support for most +of the common CURL options. HTTPS (SSL) support is available in this +mode under PHP 4.3.0 if the OpenSSL Extension is loaded. + +Thus, by including this library in your project, you can rely on having some +level of CURL support regardless of the configuration of the server on which +it is being used. + + +HISTORY + +1.0.4 (not released) +- Fixed HTTPRetriever double-inclusion bug. + + +USAGE + +Simply copy all of the libcurlemu files into your project directory, then: + +require_once("libcurlemu.inc.php"); + +After this, you can use all of the curl_* functions documented in the PHP +Manual. + + +EXAMPLE + +// CURL Extension Emulation Library Example +// +// Usage should be straightforward; you simply use this script exactly as you +// would normally use the PHP CURL extension functions. + +// first, include libcurlemu.inc.php +require_once('libcurlemu.inc.php'); + +// at this point, libcurlemu has detected the best available CURL solution +// (either the CURL extension, if available, or the CURL commandline binary, +// if available, or as a last resort, HTTPRetriever, our native-PHP HTTP +// client implementation) and has implemented the curl_* functions if +// necessary, so you can use CURL normally and safely assume that all CURL +// functions are available. + +// the rest of this example code is copied straight from the PHP manual's +// reference for the curl_init() function, and will work fine with libcurlemu + +// create a new CURL resource +$ch = curl_init(); + +// set URL and other appropriate options +curl_setopt($ch, CURLOPT_URL, "http://www.example.com/"); +curl_setopt($ch, CURLOPT_HEADER, false); + +// grab URL and pass it to the browser +curl_exec($ch); + +// close CURL resource, and free up system resources +curl_close($ch); + + +LICENSE + +This script is free software; you can redistribute it and/or modify it under the +terms of the GNU General Public License as published by the Free Software +Foundation; either version 2 of the License, or (at your option) any later +version. + +This script 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 script; if not, write to the Free Software Foundation, Inc., +59 Temple Place, Suite 330, Boston, MA 02111-1307 USA diff --git a/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/class_HTTPRetriever.php b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/class_HTTPRetriever.php new file mode 100644 index 000000000..281d8c138 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/class_HTTPRetriever.php @@ -0,0 +1,1162 @@ +curl_proxy (only useable when + * $http->force_curl is TRUE; internal support not yet implemented) + * + * + * 1.1.9 (11-Oct-2006) + * - Added set_transfer_display() and default_transfer_callback() + * methods for transfer progress tracking + * - Suppressed possible "fatal protocol error" when remote SSL server + * closes the connection early + * - Added get_content_type() method + * - make_query_string() now handles arrays + * + * 1.1.8 (19-Jun-2006) + * - Added set_progress_display() and default_progress_callback() + * methods for debug output + * - Added support for relative URLs in HTTP redirects + * - Added cookie support (sending and receiving) + * - Numerous bug fixes + * + * 1.1.7 (18-Apr-2006) + * - Added support for automatically following HTTP redirects + * - Added ::get_error() method to get any available error message (be + * it an HTTP result error or an internal/connection error) + * - Added ::cache_hit variable to determine whether the page was cached + * + * 1.1.6 (04-Mar-2006) + * - Added stream_timeout class variable. + * - Added progress_callback class variable. + * - Added support for braindead servers that ignore Connection: close + * + * + * EXAMPLE + * + * // HTTPRetriever usage example + * require_once("class_HTTPRetriever.php"); + * $http = &new HTTPRetriever(); + * + * + * // Example GET request: + * // ---------------------------------------------------------------------------- + * $keyword = "blitzaffe code"; // search Google for this keyword + * if (!$http->get("http://www.google.com/search?hl=en&q=%22".urlencode($keyword)."%22&btnG=Search&meta=")) { + * echo "HTTP request error: #{$http->result_code}: {$http->result_text}"; + * return false; + * } + * echo "HTTP response headers:
    ";
    + * var_dump($http->response_headers);
    + * echo "

    "; + * + * echo "Page content:
    ";
    + * echo $http->response;
    + * echo "
    "; + * // ---------------------------------------------------------------------------- + * + * + * // Example POST request: + * // ---------------------------------------------------------------------------- + * $keyword = "blitzaffe code"; // search Google for this keyword + * $values = array( + * "hl"=>"en", + * "q"=>"%22".urlencode($keyword)."%22", + * "btnG"=>"Search", + * "meta"=>"" + * ); + * // Note: This example is just to demonstrate the POST equivalent of the GET + * // example above; running this script will return a 501 Not Implemented, as + * // Google does not support POST requests. + * if (!$http->post("http://www.google.com/search",$http->make_query_string($values))) { + * echo "HTTP request error: #{$http->result_code}: {$http->result_text}"; + * return false; + * } + * echo "HTTP response headers:
    ";
    + * var_dump($http->response_headers);
    + * echo "

    "; + * + * echo "Page content:
    ";
    + * echo $http->response;
    + * echo "
    "; + * // ---------------------------------------------------------------------------- + * + * + * LICENSE + * + * This script is free software; you can redistribute it and/or modify it under the + * terms of the GNU General Public License as published by the Free Software + * Foundation; either version 2 of the License, or (at your option) any later + * version. + * + * This script 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 script; if not, write to the Free Software Foundation, Inc., + * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA + */ + +// define user agent ID's +define("UA_EXPLORER",0); +define("UA_MOZILLA",1); +define("UA_FIREFOX",2); +define("UA_OPERA",3); + +// define progress message severity levels +define('HRP_DEBUG',0); +define('HRP_INFO',1); +define('HRP_ERROR',2); + +if (!defined("CURL_PATH")) define("CURL_PATH","/usr/bin/curl"); + +// if the CURL extension is not loaded, but the CURL Emulation Library is found, try +// to load it +if (!extension_loaded("curl") && !defined('HTTPR_NO_REDECLARE_CURL') ) { + foreach (array(dirname(__FILE__)."/",dirname(__FILE__)."/libcurlemu/") as $k=>$libcurlemupath) { + $libcurlemuinc = $libcurlemupath.'libcurlemu.inc.php'; + if (is_readable($libcurlemuinc)) require_once($libcurlemuinc); + } +} + +class HTTPRetriever { + + // Constructor + function HTTPRetriever() { + // default HTTP headers to send with all requests + $this->headers = array( + "Referer"=>"", + "User-Agent"=>"HTTPRetriever/1.0", + "Connection"=>"close" + ); + + // HTTP version (has no effect if using CURL) + $this->version = "1.1"; + + // Normally, CURL is only used for HTTPS requests; setting this to + // TRUE will force CURL for HTTP requests as well. Not recommended. + $this->force_curl = false; + + // If you don't want to use CURL at all, set this to TRUE. + $this->disable_curl = false; + + // If HTTPS request return an error message about SSL certificates in + // $this->error and you don't care about security, set this to TRUE + $this->insecure_ssl = false; + + // Set the maximum time to wait for a connection + $this->connect_timeout = 15; + + // Set the maximum time to allow a transfer to run, or 0 to disable. + $this->max_time = 0; + + // Set the maximum time for a socket read/write operation, or 0 to disable. + $this->stream_timeout = 0; + + // If you're making an HTTPS request to a host whose SSL certificate + // doesn't match its domain name, AND YOU FULLY UNDERSTAND THE + // SECURITY IMPLICATIONS OF IGNORING THIS PROBLEM, set this to TRUE. + $this->ignore_ssl_hostname = false; + + // If TRUE, the get() and post() methods will close the connection + // and return immediately after receiving the HTTP result code + $this->result_close = false; + + // If set to a positive integer value, retrieved pages will be cached + // for this number of seconds. Any subsequent calls within the cache + // period will return the cached page, without contacting the remote + // server. + $this->caching = false; + + // If TRUE and $this->caching is not false, retrieved pages/files will be + // cached only if they appear to be static. + $this->caching_intelligent = false; + + // If TRUE, cached files will be stored in subdirectories corresponding + // to the first 2 letters of the hash filename + $this->caching_highvolume = false; + + // If $this->caching is enabled, this specifies the folder under which + // cached pages are saved. + $this->cache_path = '/tmp/'; + + // Set these to perform basic HTTP authentication + $this->auth_username = ''; + $this->auth_password = ''; + + // Optionally set this to a valid callback method to have HTTPRetriever + // provide page preprocessing capabilities to your script. If set, this + // method should accept two arguments: an object representing an instance + // of HTTPRetriever, and a string containing the page contents + $this->page_preprocessor = null; + + // Optionally set this to a valid callback method to have HTTPRetriever + // provide progress messages. Your callback must accept 2 parameters: + // an integer representing the severity (0=debug, 1=information, 2=error), + // and a string representing the progress message + $this->progress_callback = null; + + // Optionally set this to a valid callback method to have HTTPRetriever + // provide bytes-transferred messages. Your callbcak must accept 2 + // parameters: an integer representing the number of bytes transferred, + // and an integer representing the total number of bytes expected (or + // -1 if unknown). + $this->transfer_callback = null; + + // Set this to TRUE if you HTTPRetriever to transparently follow HTTP + // redirects (code 301, 302, 303, and 307). Optionally set this to a + // numeric value to limit the maximum number of redirects to the specified + // value. (Redirection loops are detected automatically.) + // Note that non-GET/HEAD requests will NOT be redirected except on code + // 303, as per HTTP standards. + $this->follow_redirects = false; + } + + // Send an HTTP GET request to $url; if $ipaddress is specified, the + // connection will be made to the selected IP instead of resolving the + // hostname in $url. + // + // If $cookies is set, it should be an array in one of two formats. + // + // Either: $cookies[ 'cookiename' ] = array ( + // '/path/'=>array( + // 'expires'=>time(), + // 'domain'=>'yourdomain.com', + // 'value'=>'cookievalue' + // ) + // ); + // + // Or, a more simplified format: + // $cookies[ 'cookiename' ] = 'value'; + // + // The former format will automatically check to make sure that the path, domain, + // and expiration values match the HTTP request, and will only send the cookie if + // they do match. The latter will force the cookie to be set for the HTTP request + // unconditionally. + // + function get($url,$ipaddress = false,$cookies = false) { + $this->method = "GET"; + $this->post_data = ""; + $this->connect_ip = $ipaddress; + return $this->_execute_request($url,$cookies); + } + + // Send an HTTP POST request to $url containing the POST data $data. See ::get() + // for a description of the remaining arguments. + function post($url,$data="",$ipaddress = false,$cookies = false) { + $this->method = "POST"; + $this->post_data = $data; + $this->connect_ip = $ipaddress; + return $this->_execute_request($url,$cookies); + } + + // Send an HTTP HEAD request to $url. See ::get() for a description of the arguments. + function head($url,$ipaddress = false,$cookies = false) { + $this->method = "HEAD"; + $this->post_data = ""; + $this->connect_ip = $ipaddress; + return $this->_execute_request($url,$cookies); + } + + // send an alternate (non-GET/POST) HTTP request to $url + function custom($method,$url,$data="",$ipaddress = false,$cookies = false) { + $this->method = $method; + $this->post_data = $data; + $this->connect_ip = $ipaddress; + return $this->_execute_request($url,$cookies); + } + + function array_to_query($arrayname,$arraycontents) { + $output = ""; + foreach ($arraycontents as $key=>$value) { + if (is_array($value)) { + $output .= $this->array_to_query(sprintf('%s[%s]',$arrayname,urlencode($key)),$value); + } else { + $output .= sprintf('%s[%s]=%s&',$arrayname,urlencode($key),urlencode($value)); + } + } + return $output; + } + + // builds a query string from the associative array array $data; + // returns a string that can be passed to $this->post() + function make_query_string($data) { + $output = ""; + if (is_array($data)) { + foreach ($data as $name=>$value) { + if (is_array($value)) { + $output .= $this->array_to_query(urlencode($name),$value); + } elseif (is_scalar($value)) { + $output .= urlencode($name)."=".urlencode($value)."&"; + } else { + $output .= urlencode($name)."=".urlencode(serialize($value)).'&'; + } + } + } + return substr($output,0,strlen($output)-1); + } + + + // this is pretty limited... but really, if you're going to spoof you UA, you'll probably + // want to use a Windows OS for the spoof anyway + // + // if you want to set the user agent to a custom string, just assign your string to + // $this->headers["User-Agent"] directly + function set_user_agent($agenttype,$agentversion,$windowsversion) { + $useragents = array( + "Mozilla/4.0 (compatible; MSIE %agent%; Windows NT %os%)", // IE + "Mozilla/5.0 (Windows; U; Windows NT %os%; en-US; rv:%agent%) Gecko/20040514", // Moz + "Mozilla/5.0 (Windows; U; Windows NT %os%; en-US; rv:1.7) Gecko/20040803 Firefox/%agent%", // FFox + "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT %os%) Opera %agent% [en]", // Opera + ); + $agent = $useragents[$agenttype]; + $this->headers["User-Agent"] = str_replace(array("%agent%","%os%"),array($agentversion,$windowsversion),$agent); + } + + // this isn't presently used as it's now handled inline by the request parser + function remove_chunkiness() { + $remaining = $this->response; + $this->response = ""; + + while ($remaining) { + $hexlen = strpos($remaining,"\r"); + $chunksize = substr($remaining,0,$hexlen); + $argstart = strpos($chunksize,';'); + if ($argstart!==false) $chunksize = substr($chunksize,0,$argstart); + $chunksize = (int) @hexdec($chunksize); + + $this->response .= substr($remaining,$hexlen+2,$chunksize); + $remaining = substr($remaining,$hexlen+2+$chunksize+2); + + if (!$chunksize) { + // either we're done, or something's borked... exit + $this->response .= $remaining; + return; + } + } + } + + // (internal) store a page in the cache + function _cache_store($token,$url) { + + if ($this->caching_intelligent) { + $urlinfo = parse_url($url); + if ($this->method=='POST') { + $this->progress(HRP_DEBUG,"POST request; not caching"); + return; + } else if (strlen($urlinfo['query'])) { + $this->progress(HRP_DEBUG,"Request used query string; not caching"); + return; + } else { + $this->progress(HRP_DEBUG,"Request appears to be static and cacheable"); + } + } + + $values = array( + "stats"=>$this->stats, + "result_code"=>$this->result_code, + "result_text"=>$this->result_text, + "version"=>$this->version, + "response"=>$this->response, + "response_headers"=>$this->response_headers, + "response_cookies"=>$this->response_cookies, + "raw_response"=>$this->raw_response, + ); + $values = serialize($values); + + $cache_dir = $this->cache_path; + if (substr($cache_dir,-1)!='/') $cache_dir .= '/'; + + if ($this->caching_highvolume) { + $cache_dir .= substr($token,0,2) . '/'; + if (!is_dir($cache_dir)) @mkdir($cache_dir); + } + + $filename = $cache_dir.$token.'.tmp'; + + $fp = @fopen($filename,"w"); + if (!$fp) { + $this->progress(HRP_DEBUG,"Unable to create cache file"); + return false; + } + fwrite($fp,$values); + fclose($fp); + + $this->progress(HRP_DEBUG,"HTTP response stored to cache"); + } + + // (internal) fetch a page from the cache + function _cache_fetch($token) { + $this->cache_hit = false; + $this->progress(HRP_DEBUG,"Checking for cached page value"); + + $cache_dir = $this->cache_path; + if (substr($cache_dir,-1)!='/') $cache_dir .= '/'; + + if ($this->caching_highvolume) $cache_dir .= substr($token,0,2) . '/'; + + $filename = $cache_dir.$token.'.tmp'; + if (!file_exists($filename)) { + $this->progress(HRP_DEBUG,"Page not available in cache"); + return false; + } + + if (time()-filemtime($filename)>$this->caching) { + $this->progress(HRP_DEBUG,"Page in cache is expired"); + @unlink($filename); + return false; + } + + if ($values = file_get_contents($filename)) { + $values = unserialize($values); + if (!$values) { + $this->progress(HRP_DEBUG,"Invalid cache contents"); + return false; + } + + $this->stats = $values["stats"]; + $this->result_code = $values["result_code"]; + $this->result_text = $values["result_text"]; + $this->version = $values["version"]; + $this->response = $values["response"]; + $this->response_headers = $values["response_headers"]; + $this->response_cookies = $values["response_cookies"]; + $this->raw_response = $values["raw_response"]; + + $this->progress(HRP_DEBUG,"Page loaded from cache"); + $this->cache_hit = true; + return true; + } else { + $this->progress(HRP_DEBUG,"Error reading cache file"); + return false; + } + } + + function parent_path($path) { + if (substr($path,0,1)=='/') $path = substr($path,1); + if (substr($path,-1)=='/') $path = substr($path,0,strlen($path)-1); + $path = explode('/',$path); + array_pop($path); + return count($path) ? ('/' . implode('/',$path)) : ''; + } + + // $cookies should be an array in one of two formats. + // + // Either: $cookies[ 'cookiename' ] = array ( + // '/path/'=>array( + // 'expires'=>time(), + // 'domain'=>'yourdomain.com', + // 'value'=>'cookievalue' + // ) + // ); + // + // Or, a more simplified format: + // $cookies[ 'cookiename' ] = 'value'; + // + // The former format will automatically check to make sure that the path, domain, + // and expiration values match the HTTP request, and will only send the cookie if + // they do match. The latter will force the cookie to be set for the HTTP request + // unconditionally. + // + function response_to_request_cookies($cookies,$urlinfo) { + + // check for simplified cookie format (name=value) + $cookiekeys = array_keys($cookies); + if (!count($cookiekeys)) return; + + $testkey = array_pop($cookiekeys); + if (!is_array($cookies[ $testkey ])) { + foreach ($cookies as $k=>$v) $this->request_cookies[$k] = $v; + return; + } + + // must not be simplified format, so parse as complex format: + foreach ($cookies as $name=>$paths) { + foreach ($paths as $path=>$values) { + // make sure the cookie isn't expired + if ( isset($values['expires']) && ($values['expires']request_cookies[$name] = $values['value']; + } + } + } + + // Execute the request for a particular URL, and transparently follow + // HTTP redirects if enabled. If $cookies is specified, it is assumed + // to be an array received from $this->response_cookies and will be + // processed to determine which cookies are valid for this host/URL. + function _execute_request($url,$cookies = false) { + // valid codes for which we transparently follow a redirect + $redirect_codes = array(301,302,303,307); + // valid methods for which we transparently follow a redirect + $redirect_methods = array('GET','HEAD'); + + $request_result = false; + + $this->followed_redirect = false; + $this->response_cookies = array(); + $this->cookie_headers = ''; + + $previous_redirects = array(); + do { + // send the request + $request_result = $this->_send_request($url,$cookies); + $lasturl = $url; + $url = false; + + // see if a redirect code was received + if ($this->follow_redirects && in_array($this->result_code,$redirect_codes)) { + + // only redirect on a code 303 or if the method was GET/HEAD + if ( ($this->result_code==303) || in_array($this->method,$redirect_methods) ) { + + // parse the information from the OLD URL so that we can handle + // relative links + $oldurlinfo = parse_url($lasturl); + + $url = $this->response_headers['Location']; + + // parse the information in the new URL, and fill in any blanks + // using values from the old URL + $urlinfo = parse_url($url); + foreach ($oldurlinfo as $k=>$v) { + if (!$urlinfo[$k]) $urlinfo[$k] = $v; + } + + // create an absolute path + if (substr($urlinfo['path'],0,1)!='/') { + $baseurl = $oldurlinfo['path']; + if (substr($baseurl,-1)!='/') $baseurl = $this->parent_path($url) . '/'; + $urlinfo['path'] = $baseurl . $urlinfo['path']; + } + + // rebuild the URL + $url = $this->rebuild_url($urlinfo); + + $this->method = "GET"; + $this->post_data = ""; + + $this->progress(HRP_INFO,'Redirected to '.$url); + } + } + + if ( $url && strlen($url) ) { + + if (isset($previous_redirects[$url])) { + $this->error = "Infinite redirection loop"; + $request_result = false; + break; + } + if ( is_numeric($this->follow_redirects) && (count($previous_redirects)>$this->follow_redirects) ) { + $this->error = "Exceeded redirection limit"; + $request_result = false; + break; + } + + $previous_redirects[$url] = true; + } + + } while ($url && strlen($url)); + + // clear headers that shouldn't persist across multiple requests + $per_request_headers = array('Host','Content-Length'); + foreach ($per_request_headers as $k=>$v) unset($this->headers[$v]); + + if (count($previous_redirects)>1) $this->followed_redirect = array_keys($previous_redirects); + + return $request_result; + } + + // private - sends an HTTP request to $url + function _send_request($url,$cookies = false) { + $this->progress(HRP_INFO,"Initiating {$this->method} request for $url"); + if ($this->caching) { + $cachetoken = md5($url.'|'.$this->post_data); + if ($this->_cache_fetch($cachetoken)) return true; + } + + $time_request_start = $this->getmicrotime(); + + $urldata = parse_url($url); + $this->urldata = &$urldata; + $http_host = $urldata['host'] . (isset($urldata['port']) ? ':'.$urldata['port'] : ''); + + if (!isset($urldata["port"]) || !$urldata["port"]) $urldata["port"] = ($urldata["scheme"]=="https") ? 443 : 80; + if (!isset($urldata["path"]) || !$urldata["path"]) $urldata["path"] = '/'; + + if (!empty($urldata['user'])) $this->auth_username = $urldata['user']; + if (!empty($urldata['pass'])) $this->auth_password = $urldata['pass']; + + //echo "Sending HTTP/{$this->version} {$this->method} request for ".$urldata["host"].":".$urldata["port"]." page ".$urldata["path"]."
    "; + + if ($this->version>"1.0") $this->headers["Host"] = $http_host; + if ($this->method=="POST") { + $this->headers["Content-Length"] = strlen($this->post_data); + if (!isset($this->headers["Content-Type"])) $this->headers["Content-Type"] = "application/x-www-form-urlencoded"; + } + + if ( !empty($this->auth_username) || !empty($this->auth_password) ) { + $this->headers['Authorization'] = 'Basic '.base64_encode($this->auth_username.':'.$this->auth_password); + } else { + unset($this->headers['Authorization']); + } + + if (is_array($cookies)) { + $this->response_to_request_cookies($cookies,$urldata); + } + + if (!empty($urldata["query"])) $urldata["path"] .= "?".$urldata["query"]; + $request = $this->method." ".$urldata["path"]." HTTP/".$this->version."\r\n"; + $request .= $this->build_headers(); + $request .= $this->post_data; + + $this->response = ""; + + // clear headers that shouldn't persist across multiple requests + // (we can do this here as we've already built the request, including headers, above) + $per_request_headers = array('Host','Content-Length'); + foreach ($per_request_headers as $k=>$v) unset($this->headers[$v]); + + // Native SSL support requires the OpenSSL extension, and was introduced in PHP 4.3.0 + $php_ssl_support = extension_loaded("openssl") && version_compare(phpversion(),"4.3.0")>=0; + + // if this is a plain HTTP request, or if it's an HTTPS request and OpenSSL support is available, + // natively perform the HTTP request + if ( ( ($urldata["scheme"]=="http") || ($php_ssl_support && ($urldata["scheme"]=="https")) ) && (!$this->force_curl) ) { + $curl_mode = false; + + $hostname = $this->connect_ip ? $this->connect_ip : $urldata['host']; + if ($urldata["scheme"]=="https") $hostname = 'ssl://'.$hostname; + + $time_connect_start = $this->getmicrotime(); + + $this->progress(HRP_INFO,'Opening socket connection to '.$hostname.' port '.$urldata['port']); + + $this->expected_bytes = -1; + $this->received_bytes = 0; + + $fp = @fsockopen ($hostname,$urldata["port"],$errno,$errstr,$this->connect_timeout); + $time_connected = $this->getmicrotime(); + $connect_time = $time_connected - $time_connect_start; + if ($fp) { + if ($this->stream_timeout) stream_set_timeout($fp,$this->stream_timeout); + $this->progress(HRP_INFO,"Connected; sending request"); + + $this->progress(HRP_DEBUG,$request); + fputs ($fp, $request); + $this->raw_request = $request; + + if ($this->stream_timeout) { + $meta = socket_get_status($fp); + if ($meta['timed_out']) { + $this->error = "Exceeded socket write timeout of ".$this->stream_timeout." seconds"; + $this->progress(HRP_ERROR,$this->error); + return false; + } + } + + $this->progress(HRP_INFO,"Request sent; awaiting reply"); + + $headers_received = false; + $data_length = false; + $chunked = false; + $iterations = 0; + while (!feof($fp)) { + if ($data_length>0) { + $line = fread($fp,$data_length); + $this->progress(HRP_DEBUG,"[DL] Got a line: [{$line}] " . gettype($line)); + + if ($line!==false) $data_length -= strlen($line); + } else { + $line = @fgets($fp,10240); + $this->progress(HRP_DEBUG,"[NDL] Got a line: [{$line}] " . gettype($line)); + + if ( ($chunked) && ($line!==false) ) { + $line = trim($line); + if (!strlen($line)) continue; + + list($data_length,) = explode(';',$line,2); + $data_length = (int) hexdec(trim($data_length)); + + if ($data_length==0) { + $this->progress(HRP_DEBUG,"Done"); + // end of chunked data + break; + } + $this->progress(HRP_DEBUG,"Chunk length $data_length (0x$line)"); + continue; + } + } + + if ($line===false) { + $meta = socket_get_status($fp); + if ($meta['timed_out']) { + if ($this->stream_timeout) { + $this->error = "Exceeded socket read timeout of ".$this->stream_timeout." seconds"; + } else { + $this->error = "Exceeded default socket read timeout"; + } + $this->progress(HRP_ERROR,$this->error); + return false; + } else { + $this->progress(HRP_ERROR,'No data but not timed out'); + } + continue; + } + + // check time limits if requested + if ($this->max_time>0) { + if ($this->getmicrotime() - $time_request_start > $this->max_time) { + $this->error = "Exceeded maximum transfer time of ".$this->max_time." seconds"; + $this->progress(HRP_ERROR,$this->error); + return false; + break; + } + } + + $this->response .= $line; + + $iterations++; + if ($headers_received) { + if ($time_connected>0) { + $time_firstdata = $this->getmicrotime(); + $process_time = $time_firstdata - $time_connected; + $time_connected = 0; + } + $this->received_bytes += strlen($line); + if ($iterations % 20 == 0) { + $this->update_transfer_counters(); + } + } + + + // some dumbass webservers don't respect Connection: close and just + // leave the connection open, so we have to be diligent about + // calculating the content length so we can disconnect at the end of + // the response + if ( (!$headers_received) && (trim($line)=="") ) { + $headers_received = true; + $this->progress(HRP_DEBUG,"Got headers: {$this->response}"); + + if (preg_match('/^Content-Length: ([0-9]+)/im',$this->response,$matches)) { + $data_length = (int) $matches[1]; + $this->progress(HRP_DEBUG,"Content length is $data_length"); + $this->expected_bytes = $data_length; + $this->update_transfer_counters(); + } else { + $this->progress(HRP_DEBUG,"No data length specified"); + } + if (preg_match("/^Transfer-Encoding: chunked/im",$this->response,$matches)) { + $chunked = true; + $this->progress(HRP_DEBUG,"Chunked transfer encoding requested"); + } else { + $this->progress(HRP_DEBUG,"CTE not requested"); + } + + if (preg_match_all("/^Set-Cookie: ((.*?)\=(.*?)(?:;\s*(.*))?)$/im",$this->response,$cookielist,PREG_SET_ORDER)) { + foreach ($cookielist as $k=>$cookie) $this->cookie_headers .= $cookie[0]."\n"; + + // get the path for which cookies will be valid if no path is specified + $cookiepath = preg_replace('/\/{2,}/','',$urldata['path']); + if (substr($cookiepath,-1)!='/') { + $cookiepath = explode('/',$cookiepath); + array_pop($cookiepath); + $cookiepath = implode('/',$cookiepath) . '/'; + } + // process each cookie + foreach ($cookielist as $k=>$cookiedata) { + list(,$rawcookie,$name,$value,$attributedata) = $cookiedata; + $attributedata = explode(';',trim($attributedata)); + $attributes = array(); + + $cookie = array( + 'value'=>$value, + 'raw'=>trim($rawcookie), + ); + foreach ($attributedata as $k=>$attribute) { + list($attrname,$attrvalue) = explode('=',trim($attribute)); + $cookie[$attrname] = $attrvalue; + } + + if (!isset($cookie['domain']) || !$cookie['domain']) $cookie['domain'] = $urldata['host']; + if (!isset($cookie['path']) || !$cookie['path']) $cookie['path'] = $cookiepath; + if (isset($cookie['expires']) && $cookie['expires']) $cookie['expires'] = strtotime($cookie['expires']); + + if (!$this->validate_response_cookie($cookie,$urldata['host'])) continue; + + // do not store expired cookies; if one exists, unset it + if ( isset($cookie['expires']) && ($cookie['expires']response_cookies[ $name ][ $cookie['path'] ]); + continue; + } + + $this->response_cookies[ $name ][ $cookie['path'] ] = $cookie; + } + } + } + + if ($this->result_close) { + if (preg_match_all("/HTTP\/([0-9\.]+) ([0-9]+) (.*?)[\r\n]/",$this->response,$matches)) { + $resultcodes = $matches[2]; + foreach ($resultcodes as $k=>$code) { + if ($code!=100) { + $this->progress(HRP_INFO,'HTTP result code received; closing connection'); + + $this->result_code = $code; + $this->result_text = $matches[3][$k]; + fclose($fp); + + return ($this->result_code==200); + } + } + } + } + } + if (feof($fp)) $this->progress(HRP_DEBUG,'EOF on socket'); + @fclose ($fp); + + $this->update_transfer_counters(); + + if (is_array($this->response_cookies)) { + // make sure paths are sorted in the order in which they should be applied + // when setting response cookies + foreach ($this->response_cookies as $name=>$paths) { + ksort($this->response_cookies[$name]); + } + } + $this->progress(HRP_INFO,'Request complete'); + } else { + $this->error = strtoupper($urldata["scheme"])." connection to ".$hostname." port ".$urldata["port"]." failed"; + $this->progress(HRP_ERROR,$this->error); + return false; + } + + // perform an HTTP/HTTPS request using CURL + } elseif ( !$this->disable_curl && ( ($urldata["scheme"]=="https") || ($this->force_curl) ) ) { + $this->progress(HRP_INFO,'Passing HTTP request for $url to CURL'); + $curl_mode = true; + if (!$this->_curl_request($url)) return false; + + // unknown protocol + } else { + $this->error = "Unsupported protocol: ".$urldata["scheme"]; + $this->progress(HRP_ERROR,$this->error); + return false; + } + + $this->raw_response = $this->response; + + $totallength = strlen($this->response); + + do { + $headerlength = strpos($this->response,"\r\n\r\n"); + + $response_headers = explode("\r\n",substr($this->response,0,$headerlength)); + $http_status = trim(array_shift($response_headers)); + foreach ($response_headers as $line) { + list($k,$v) = explode(":",$line,2); + $this->response_headers[trim($k)] = trim($v); + } + $this->response = substr($this->response,$headerlength+4); + + /* // Handled in-transfer now + if (($this->response_headers['Transfer-Encoding']=="chunked") && (!$curl_mode)) { + $this->remove_chunkiness(); + } + */ + + if (!preg_match("/^HTTP\/([0-9\.]+) ([0-9]+) (.*?)$/",$http_status,$matches)) { + $matches = array("",$this->version,0,"HTTP request error"); + } + list (,$response_version,$this->result_code,$this->result_text) = $matches; + + // skip HTTP result code 100 (Continue) responses + } while (($this->result_code==100) && ($headerlength)); + + // record some statistics, roughly compatible with CURL's curl_getinfo() + if (!$curl_mode) { + $total_time = $this->getmicrotime() - $time_request_start; + $transfer_time = $total_time - $connect_time; + $this->stats = array( + "total_time"=>$total_time, + "connect_time"=>$connect_time, // time between connection request and connection established + "process_time"=>$process_time, // time between HTTP request and first data (non-headers) received + "url"=>$url, + "content_type"=>$this->response_headers["Content-Type"], + "http_code"=>$this->result_code, + "header_size"=>$headerlength, + "request_size"=>$totallength, + "filetime"=>strtotime($this->response_headers["Date"]), + "pretransfer_time"=>$connect_time, + "size_download"=>$totallength, + "speed_download"=>$transfer_time > 0 ? round($totallength / $transfer_time) : 0, + "download_content_length"=>$totallength, + "upload_content_length"=>0, + "starttransfer_time"=>$connect_time, + ); + } + + + $ok = ($this->result_code==200); + if ($ok) { + // if a page preprocessor is defined, call it to process the page contents + if (is_callable($this->page_preprocessor)) $this->response = call_user_func($this->page_preprocessor,$this,$this->response); + + // if caching is enabled, save the page + if ($this->caching) $this->_cache_store($cachetoken,$url); + } + + return $ok; + } + + function validate_response_cookie($cookie,$actual_hostname) { + // make sure the cookie can't be set for a TLD, eg: '.com' + $cookiehost = $cookie['domain']; + $p = strrpos($cookiehost,'.'); + if ($p===false) return false; + + $tld = strtolower(substr($cookiehost,$p+1)); + $special_domains = array("com", "edu", "net", "org", "gov", "mil", "int"); + $periods_required = in_array($tld,$special_domains) ? 1 : 2; + + $periods = substr_count($cookiehost,'.'); + if ($periods<$periods_required) return false; + + if (substr($actual_hostname,0,1)!='.') $actual_hostname = '.'.$actual_hostname; + if (substr($cookiehost,0,1)!='.') $cookiehost = '.'.$cookiehost; + $domain_match = ( + ($actual_hostname==$cookiehost) || + (substr($actual_hostname,-strlen($cookiehost))==$cookiehost) + ); + + return $domain_match; + + } + + function build_headers() { + $headers = ""; + foreach ($this->headers as $name=>$value) { + $value = trim($value); + if (empty($value)) continue; + $headers .= "{$name}: {$value}\r\n"; + } + + if (isset($this->request_cookies) && is_array($this->request_cookies)) { + $cookielist = array(); + foreach ($this->request_cookies as $name=>$value) { + $cookielist[] = "{$name}={$value}"; + } + if (count($cookielist)) $headers .= "Cookie: ".implode('; ',$cookielist)."\r\n"; + } + + + $headers .= "\r\n"; + + return $headers; + } + + // opposite of parse_url() + function rebuild_url($urlinfo) { + $url = $urlinfo['scheme'].'://'; + + if ($urlinfo['user'] || $urlinfo['pass']) { + $url .= $urlinfo['user']; + if ($urlinfo['pass']) { + if ($urlinfo['user']) $url .= ':'; + $url .= $urlinfo['pass']; + } + $url .= '@'; + } + + $url .= $urlinfo['host']; + if ($urlinfo['port']) $url .= ':'.$urlinfo['port']; + + $url .= $urlinfo['path']; + + if ($urlinfo['query']) $url .= '?'.$urlinfo['query']; + if ($urlinfo['fragment']) $url .= '#'.$urlinfo['fragment']; + + return $url; + } + + function _replace_hostname(&$url,$new_hostname) { + $parts = parse_url($url); + $old_hostname = $parts['host']; + + $parts['host'] = $new_hostname; + + $url = $this->rebuild_url($parts); + + return $old_hostname; + } + + function _curl_request($url) { + $this->error = false; + + // if a direct connection IP address was specified, replace the hostname + // in the URL with the IP address, and set the Host: header to the + // original hostname + if ($this->connect_ip) { + $old_hostname = $this->_replace_hostname($url,$this->connect_ip); + $this->headers["Host"] = $old_hostname; + } + + + unset($this->headers["Content-Length"]); + $headers = explode("\n",$this->build_headers()); + + $ch = curl_init(); + curl_setopt($ch,CURLOPT_URL, $url); + curl_setopt($ch,CURLOPT_USERAGENT, $this->headers["User-Agent"]); + curl_setopt($ch,CURLOPT_HEADER, 1); + curl_setopt($ch,CURLOPT_RETURNTRANSFER, 1); +// curl_setopt($ch,CURLOPT_FOLLOWLOCATION, 1); // native method doesn't support this yet, so it's disabled for consistency + curl_setopt($ch,CURLOPT_TIMEOUT, 10); + if ($this->curl_proxy) { + curl_setopt($ch,CURLOPT_PROXY,$this->curl_proxy); + } + curl_setopt($ch,CURLOPT_HTTPHEADER, $headers); + + if ($this->method=="POST") { + curl_setopt($ch,CURLOPT_POST,1); + curl_setopt($ch,CURLOPT_POSTFIELDS,$this->post_data); + } + if ($this->insecure_ssl) { + curl_setopt($ch,CURLOPT_SSL_VERIFYPEER,0); + } + if ($this->ignore_ssl_hostname) { + curl_setopt($ch,CURLOPT_SSL_VERIFYHOST,1); + } + + $this->response = curl_exec ($ch); + if (curl_errno($ch)!=0) { + $this->error = "CURL error #".curl_errno($ch).": ".curl_error($ch); + } + + $this->stats = curl_getinfo($ch); + curl_close($ch); + + return ($this->error === false); + } + + function progress($level,$msg) { + if (is_callable($this->progress_callback)) call_user_func($this->progress_callback,$level,$msg); + } + + // Gets any available HTTPRetriever error message (including both internal + // errors and HTTP errors) + function get_error() { + return $this->error ? $this->error : 'HTTP ' . $this->result_code.': '.$this->result_text; + } + + function get_content_type() { + if (!$ctype = $this->response_headers['Content-Type']) { + $ctype = $this->response_headers['Content-type']; + } + list($ctype,) = explode(';',$ctype); + + return strtolower($ctype); + } + + function update_transfer_counters() { + if (is_callable($this->transfer_callback)) call_user_func($this->transfer_callback,$this->received_bytes,$this->expected_bytes); + } + + function set_transfer_display($enabled = true) { + if ($enabled) { + $this->transfer_callback = array(&$this,'default_transfer_callback'); + } else { + unset($this->transfer_callback); + } + } + + function set_progress_display($enabled = true) { + if ($enabled) { + $this->progress_callback = array(&$this,'default_progress_callback'); + } else { + unset($this->progress_callback); + } + } + + function default_progress_callback($severity,$message) { + $severities = array( + HRP_DEBUG=>'debug', + HRP_INFO=>'info', + HRP_ERROR=>'error', + ); + + echo date('Y-m-d H:i:sa').' ['.$severities[$severity].'] '.$message."\n"; + flush(); + } + + function default_transfer_callback($transferred,$expected) { + $msg = "Transferred " . round($transferred/1024,1); + if ($expected>=0) $msg .= "/" . round($expected/1024,1); + $msg .= "KB"; + if ($expected>0) $msg .= " (".round($transferred*100/$expected,1)."%)"; + echo date('Y-m-d H:i:sa')." $msg\n"; + flush(); + } + + function getmicrotime() { + list($usec, $sec) = explode(" ",microtime()); + return ((float)$usec + (float)$sec); + } +} +?> \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/example.php b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/example.php new file mode 100644 index 000000000..5ed074eea --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/example.php @@ -0,0 +1,35 @@ + diff --git a/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlemu.inc.php b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlemu.inc.php new file mode 100644 index 000000000..26336b4c4 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlemu.inc.php @@ -0,0 +1,111 @@ + \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlexternal.inc.php b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlexternal.inc.php new file mode 100644 index 000000000..51bd6a139 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlexternal.inc.php @@ -0,0 +1,637 @@ +$v) { + if ( (substr($k,0,8)=="CURLOPT_") && ($v==$curlopt)) return $k; + } + return false; +} + +// Initialize a CURL emulation session +function curl_init($url=false) { + $i = $GLOBALS["_CURLEXT_OPT"]["index"]++; + $GLOBALS["_CURLEXT_OPT"][$i] = array("url"=>$url); + + return $i; +} + +// Set an option for a CURL emulation transfer +function curl_setopt($ch,$option,$value) { + + $opt = &$GLOBALS["_CURLEXT_OPT"][$ch]; + if (!$opt["args"]) $opt["args"] = array(); + $args = &$opt["args"]; + if (!$opt["settings"]) $opt["settings"] = array(); + $settings = &$opt["settings"]; + + switch($option) { + case CURLOPT_URL: + $opt["url"] = $value; + break; + case CURLOPT_VERBOSE: + $opt["verbose"] = $value>0; + break; + case CURLOPT_USERPWD: + if ($value==="") $value = false; + $settings["user"] = $value; + break; + case CURLOPT_PROXYUSERPWD: + if ($value==="") $value = false; + $settings["proxy-user"] = $value; + break; + case CURLOPT_COOKIE: + if ($value==="") $value = false; + if ( is_bool($value) || (strpos($value,"=")!==false) ) $settings["cookie"] = $value; + break; + case CURLOPT_COOKIEFILE: + if ($value==="") $value = false; + $settings["cookie"] = $value; + break; + case CURLOPT_COOKIEJAR: + if ($value==="") $value = false; + $settings["cookie-jar"] = $value; + break; + case CURLOPT_CUSTOMREQUEST: + if ($value==="") $value = false; + $settings["request"] = $value; + break; + case CURLOPT_PROXY: + if ($value==="") $value = false; + $settings["proxy"] = $value; + break; + case CURLOPT_INTERFACE: + if ($value==="") $value = false; + $settings["interface"] = $value; + break; + case CURLOPT_KRB4LEVEL: + if ($value==="") $value = false; + $settings["krb4"] = $value; + break; + case CURLOPT_SSLCERT: + $pass = ""; + if (is_string($settings["cert"])) { + list(,$pass) = explode(":",$settings["cert"]); + if (strlen($pass)) $pass = ":$pass"; + } + $settings["cert"] = $value.$pass; + break; + case CURLOPT_SSLCERTPASSWD: + $filename = ""; + if (is_string($settings["cert"])) { + list($filename,) = explode(":",$settings["cert"]); + } + $settings["cert"] = $filename.":".$value; + break; + case CURLOPT_RANGE: + if ($value==="") $value = false; + $settings["range"] = $value; + break; + case CURLOPT_REFERER: + if ($value==="") $value = false; + $settings["referer"] = $value; + break; + case CURLOPT_NOBODY: + $settings["head"] = $value>0; + break; + case CURLOPT_FAILONERROR: + $opt["fail_on_error"] = $value>0; + break; + case CURLOPT_USERAGENT: + $settings["user-agent"] = $value; + break; + case CURLOPT_HEADER: + $settings["include"] = $value>0; + break; + case CURLOPT_RETURNTRANSFER: + $opt["return_transfer"] = $value>0; + break; + case CURLOPT_TIMEOUT: + $settings["max-time"] = (int) $value; + break; + case CURLOPT_HTTPHEADER: + reset($value); + foreach ($value as $k=>$header) $args[] = "header=".$header; + break; + case CURLOPT_POST: + $settings["data"]["enabled"] = $value>0; + break; + case CURLOPT_POSTFIELDS: + if ($value==="") $value = false; + $settings["data"]["value"] = $value; + break; + case CURLOPT_SSL_VERIFYPEER: + $settings["insecure"] = ($value==0); + break; + case CURLOPT_SSL_VERIFYHOST: + // not supported by the commandline client + break; + case CURLOPT_FOLLOWLOCATION: + $settings["location"] = $value>0; + break; + case CURLOPT_PUT: + $settings["upload-file"]["enabled"] = $value>0; + break; + case CURLOPT_INFILE: + if ($value==="") $value = false; + + if (is_resource($value)) { + + // Ugh, this is a terrible hack. The CURL extension accepts a file handle, but + // the CURL binary obviously wants a filename. Since you can't derive a filename + // from a file handle, we have to make a copy of the file from the file handle, + // then pass the temporary filename to the CURL binary. + + $tmpfilename = tempnam("/tmp","cif"); + $fp = @fopen($tmpfilename,"w"); + if (!$fp) { + trigger_error("CURL emulation library could not create a temporary file for CURLOPT_INFILE; upload aborted",E_USER_WARNING); + } else { + while (!feof($value)) { + $contents = fread($value,8192); + fwrite($fp,$contents); + } + fclose($fp); + // if a temporary file was previously created, unlink it + if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"])) unlink($settings["upload-file"]["value"]); + + // set the new upload-file filename + $settings["upload-file"]["value"] = $tmpfilename; + } + } else { + trigger_error("CURLOPT_INFILE must specify a valid file resource",E_USER_WARNING); + } + + break; + case CURLOPT_MUTE: + // we're already mute, no? + break; + case CURLOPT_LOW_SPEED_LIMIT: + $settings["speed-limit"] = (int) $value; + break; + case CURLOPT_LOW_SPEED_TIME: + $settings["speed-time"] = (int) $value; + break; + case CURLOPT_RESUME_FROM: + $settings["continue-at"] = (int) $value; + break; + case CURLOPT_CAINFO: + if ($value==="") $value = false; + $settings["cacert"] = $value; + break; + case CURLOPT_SSLVERSION: + $value = (int) $value; + switch($value) { + case 2: + case 3: + unset($settings["sslv2"]); + unset($settings["sslv3"]); + $settings["sslv".$value] = true; + break; + } + break; + case CURLOPT_TIMECONDITION: + // untested - I'm lazy :) + if (!isset($settings["time-cond"]["enabled"])) $settings["time-cond"]["enabled"] = false; + if (!$settings["time-cond"]["value"]) $settings["time-cond"]["value"] = 1; + + $settings["time-cond"]["value"] = abs($settings["time-cond"]["value"]); + if ($value==TIMECOND_ISUNMODSINCE) { + $settings["time-cond"]["value"] *= -1; + } + + break; + case CURLOPT_TIMEVALUE: + // untested - I'm lazy :) + if ($settings["time-cond"]["value"]) { + $sign = $settings["time-cond"]["value"] / abs($settings["time-cond"]["value"]); + } else { + $sign = 1; + } + $settings["time-cond"]["value"] = (int) $value * $sign; + break; + case CURLOPT_FILE: + if (is_resource($value)) { + $opt["output_handle"] = $value; + } else { + trigger_error("CURLOPT_FILE must specify a valid file resource",E_USER_WARNING); + } + break; + case CURLOPT_WRITEHEADER: + if (is_resource($value)) { + $opt["header_handle"] = $value; + } else { + trigger_error("CURLOPT_WRITEHEADER must specify a valid file resource",E_USER_WARNING); + } + break; + case CURLOPT_STDERR: + // not implemented for now - not really relevant + break; + // FTP stuff not implemented + case CURLOPT_QUOTE: + case CURLOPT_POSTQUOTE: + case CURLOPT_UPLOAD: + case CURLOPT_FTPLISTONLY: + case CURLOPT_FTPAPPEND: + case CURLOPT_FTPPORT: + // Other stuff not implemented + case CURLOPT_NETRC: + default: + trigger_error("CURL emulation does not implement CURL option "._curlopt_name($option),E_USER_WARNING); + break; + } +} + +// Perform a CURL emulation session +function curl_exec($ch) { + $opt = &$GLOBALS["_CURLEXT_OPT"][$ch]; + $url = $opt["url"]; + $verbose = $opt["verbose"]; + + // ask commandline CURL to return its statistics at the end of its output + $opt["settings"]["write-out"] = "%{http_code}|%{time_total}|%{time_namelookup}|%{time_connect}|%{time_pretransfer}|%{time_starttransfer}|%{size_download}|%{size_upload}|%{size_header}|%{size_request}|%{speed_download}|%{speed_upload}|||||||%{content_type}|%{url_effective}"; + $writeout_order = array( + CURLINFO_HTTP_CODE, + CURLINFO_TOTAL_TIME, + CURLINFO_NAMELOOKUP_TIME, + CURLINFO_CONNECT_TIME, + CURLINFO_PRETRANSFER_TIME, + CURLINFO_STARTTRANSFER_TIME, + CURLINFO_SIZE_DOWNLOAD, + CURLINFO_SIZE_UPLOAD, + CURLINFO_HEADER_SIZE, + CURLINFO_REQUEST_SIZE, + CURLINFO_SPEED_DOWNLOAD, + CURLINFO_SPEED_UPLOAD, + + // the following 5 items are not provided by commandline CURL, and thus are left empty + CURLINFO_FILETIME, + CURLINFO_REDIRECT_TIME, + CURLINFO_SSL_VERIFYRESULT, + CURLINFO_CONTENT_LENGTH_DOWNLOAD, + CURLINFO_CONTENT_LENGTH_UPLOAD, + CURLINFO_REDIRECT_COUNT, + + CURLINFO_CONTENT_TYPE, + CURLINFO_EFFECTIVE_URL, + ); + + // if the CURLOPT_NOBODY option was specified (to remove the body from the output), + // but an output file handle was set, we need to tell CURL to return the body so + // that we can write it to the output handle and strip it from the output + if ($opt["settings"]["head"] && $opt["output_handle"]) { + unset($opt["settings"]["head"]); + $strip_body = true; + } + // if the CURLOPT_HEADER option was NOT specified, but a header file handle was + // specified, we again need to tell CURL to return the headers so we can write + // them, then strip them from the output + if (!isset($opt["settings"]["include"]) && isset($opt["header_handle"])) { + $opt["settings"]["include"] = true; + $strip_headers = true; + } + + // build the CURL argument list + $arguments = ""; + foreach ($opt["args"] as $k=>$arg) { + list($argname,$argval) = explode('=',$arg,2); + $arguments .= "--$argname ".escapeshellarg($argval)." "; + } + foreach ($opt["settings"] as $argname=>$argval) { + if (is_array($argval)) { + if (isset($argval["enabled"]) && !$argval["enabled"]) continue; + $argval = $argval["value"]; + } + if ($argval===false) continue; + if (is_bool($argval)) $argval = ""; + $arguments .= "--$argname ".escapeshellarg($argval)." "; + } + + // build the CURL commandline and execute it + $cmd = CURL_PATH." ".$arguments." ".escapeshellarg($url); + + if ($verbose) echo "libcurlemu: Executing: $cmd\n"; + exec($cmd,$output,$ret); + + if ($verbose) { + echo "libcurlemu: Result: "; + var_dump($output); + echo "libcurlemu: Exit code: $ret\n"; + } + + // check for errors + $opt["errno"] = $ret; + if ($ret) $opt["error"] = "CURL error #$ret"; + + // die if CURLOPT_FAILONERROR is set and the HTTP result code is greater than 300 + if ($opt["fail_on_error"]) { + if (preg_match("/^HTTP\/1.[0-9]+ ([0-9]{3}) /",$output[0],$matches)) { + $resultcode = (int) $matches[1]; + if ($resultcode>300) die; + } else { + die; // couldn't get result code! + } + } + + // pull the statistics out from the output + $stats = explode('|',array_pop($output)); + foreach ($writeout_order as $k=>$item) { + $opt["stats"][$item] = $stats[$k]; + } + + // build the response string + $output = implode("\r\n",$output); + + + // find the header end position if needed + if ($strip_headers || $strip_body || isset($opt["header_handle"])) { + $headerpos = strpos($output,"\r\n\r\n"); + } + + // if a file handle was provided for header output, extract the headers + // and write them to the handle + if (isset($opt["header_handle"])) { + $headers = substr($output,0,$headerpos); + fwrite($opt["header_handle"],$headers); + } + + // if the caller did not request headers in the output, strip them + if ($strip_headers) { + $output = substr($output,$headerpos+4); + } + + // if the caller did not request the response body in the output, strip it + if ($strip_body) { + if ($strip_headers) { + $body = $output; + $output = ""; + } else { + $body = substr($output,$headerpos+4); + $output = substr($output,0,$headerpos); + } + } + + // if a file handle was provided for output, write the output to it + if (isset($opt["output_handle"])) { + fwrite($opt["output_handle"],$output); + + // if the caller requested that the response be returned, return it + } elseif ($opt["return_transfer"]) { + return $output; + + // otherwise, just echo the output to stdout + } else { + echo $output; + } + return true; +} + +function curl_close($ch) { + $opt = &$GLOBALS["_CURLEXT_OPT"][$ch]; + + if ($opt["settings"]) { + $settings = &$opt["settings"]; + // if the user used CURLOPT_INFILE to specify a file to upload, remove the + // temporary file created for the CURL binary + if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"])) unlink($settings["upload-file"]["value"]); + } + + unset($GLOBALS["_CURLEXT_OPT"][$ch]); +} + +function curl_errno($ch) { + return (int) $GLOBALS["_CURLEXT_OPT"][$ch]["errno"]; +} + +function curl_error($ch) { + return $GLOBALS["_CURLEXT_OPT"][$ch]["error"]; +} + +function curl_getinfo($ch,$opt=NULL) { + if ($opt) { + return $GLOBALS["_CURLEXT_OPT"][$ch]["stats"][$opt]; + } else { + $curlinfo_tags = array( + "url"=>CURLINFO_EFFECTIVE_URL, + "content_type"=>CURLINFO_CONTENT_TYPE, + "http_code"=>CURLINFO_HTTP_CODE, + "header_size"=>CURLINFO_HEADER_SIZE, + "request_size"=>CURLINFO_REQUEST_SIZE, + "filetime"=>CURLINFO_FILETIME, + "ssl_verify_result"=>CURLINFO_SSL_VERIFYRESULT, + "redirect_count"=>CURLINFO_REDIRECT_COUNT, + "total_time"=>CURLINFO_TOTAL_TIME, + "namelookup_time"=>CURLINFO_NAMELOOKUP_TIME, + "connect_time"=>CURLINFO_CONNECT_TIME, + "pretransfer_time"=>CURLINFO_PRETRANSFER_TIME, + "size_upload"=>CURLINFO_SIZE_UPLOAD, + "size_download"=>CURLINFO_SIZE_DOWNLOAD, + "speed_download"=>CURLINFO_SPEED_DOWNLOAD, + "speed_upload"=>CURLINFO_SPEED_UPLOAD, + "download_content_length"=>CURLINFO_CONTENT_LENGTH_DOWNLOAD, + "upload_content_length"=>CURLINFO_CONTENT_LENGTH_UPLOAD, + "starttransfer_time"=>CURLINFO_STARTTRANSFER_TIME, + "redirect_time"=>CURLINFO_REDIRECT_TIME + ); + $res = array(); + foreach ($curlinfo_tags as $tag=>$opt) { + $res[$tag] = $GLOBALS["_CURLEXT_OPT"][$ch]["stats"][$opt]; + } + return $res; + } +} + +function curl_version() { + return "libcurlemu/".CURLEXT_VERSION."-ext"; +} + +} +?> \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlnative.inc.php b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlnative.inc.php new file mode 100644 index 000000000..b982d9493 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/libcurlemu/libcurlnative.inc.php @@ -0,0 +1,453 @@ +$v) { + if ( (substr($k,0,8)=="CURLOPT_") && ($v==$curlopt)) return $k; + } + return false; +} + +// Initialize a CURL emulation session +function curl_init() { + $i = $GLOBALS["_CURLNAT_OPT"]["index"]++; + $GLOBALS["_CURLNAT_OPT"][$i] = array(); + $GLOBALS["_CURLNAT_OPT"][$i]["http"] = &new HTTPRetriever(); + $GLOBALS["_CURLNAT_OPT"][$i]["include_body"] = true; + return $i; +} + +// Set an option for a CURL emulation transfer +function curl_setopt($ch,$option,$value) { + + $opt = &$GLOBALS["_CURLNAT_OPT"][$ch]; + if (!$opt["args"]) $opt["args"] = array(); + $args = &$opt["args"]; + if (!$opt["settings"]) $opt["settings"] = array(); + $settings = &$opt["settings"]; + $http = &$opt["http"]; + + switch($option) { + case CURLOPT_URL: + $opt["url"] = $value; + break; + case CURLOPT_CUSTOMREQUEST: + $opt["method"] = $value; + break; + case CURLOPT_REFERER: + $http->headers["Referer"] = $value; + break; + case CURLOPT_NOBODY: + $opt["include_body"] = $value==0; + break; + case CURLOPT_FAILONERROR: + $opt["fail_on_error"] = $value>0; + break; + case CURLOPT_USERAGENT: + $http->headers["User-Agent"] = $value; + break; + case CURLOPT_HEADER: + $opt["include_headers"] = $value>0; + break; + case CURLOPT_RETURNTRANSFER: + $opt["return_transfer"] = $value>0; + break; + case CURLOPT_TIMEOUT: + $opt["max-time"] = (int) $value; + break; + case CURLOPT_HTTPHEADER: + reset($value); + foreach ($value as $k=>$header) { + list($headername,$headervalue) = explode(":",$header); + $http->headers[$headername] = ltrim($headervalue); + } + break; + case CURLOPT_POST: + $opt["post"] = $value>0; + break; + case CURLOPT_POSTFIELDS: + $opt["postdata"] = $value; + break; + case CURLOPT_MUTE: + // we're already mute, no? + break; + case CURLOPT_FILE: + if (is_resource($value)) { + $opt["output_handle"] = $value; + } else { + trigger_error("CURLOPT_FILE must specify a valid file resource",E_USER_WARNING); + } + break; + case CURLOPT_WRITEHEADER: + if (is_resource($value)) { + $opt["header_handle"] = $value; + } else { + trigger_error("CURLOPT_WRITEHEADER must specify a valid file resource",E_USER_WARNING); + } + break; + case CURLOPT_STDERR: + // not implemented for now - not really relevant + break; + + case CURLOPT_SSL_VERIFYPEER: + case CURLOPT_SSL_VERIFYHOST: + // these are automatically disabled using ssl:// anyway + break; + + case CURLOPT_USERPWD: + list($curl_user,$curl_pass) = explode(':',$value,2); + $http->auth_username = $curl_user; + $http->auth_password = $curl_pass; + break; + + // Important stuff not implemented (as it's not yet supported by HTTPRetriever) + case CURLOPT_PUT: + case CURLOPT_INFILE: + case CURLOPT_FOLLOWLOCATION: + case CURLOPT_PROXYUSERPWD: + case CURLOPT_COOKIE: + case CURLOPT_COOKIEFILE: + case CURLOPT_PROXY: + case CURLOPT_RANGE: + case CURLOPT_RESUME_FROM: + + // Things that cannot (reasonably) be implemented here + case CURLOPT_LOW_SPEED_LIMIT: + case CURLOPT_LOW_SPEED_TIME: + case CURLOPT_KRB4LEVEL: + case CURLOPT_SSLCERT: + case CURLOPT_SSLCERTPASSWD: + case CURLOPT_SSLVERSION: + case CURLOPT_INTERFACE: + case CURLOPT_CAINFO: + case CURLOPT_TIMECONDITION: + case CURLOPT_TIMEVALUE: + + // FTP stuff not implemented + case CURLOPT_QUOTE: + case CURLOPT_POSTQUOTE: + case CURLOPT_UPLOAD: + case CURLOPT_FTPLISTONLY: + case CURLOPT_FTPAPPEND: + case CURLOPT_FTPPORT: + + // Other stuff not implemented + case CURLOPT_VERBOSE: + case CURLOPT_NETRC: + default: + trigger_error("CURL emulation does not implement CURL option "._curlopt_name($option),E_USER_WARNING); + break; + } +} + +// Perform a CURL emulation session +function curl_exec($ch) { + $opt = &$GLOBALS["_CURLNAT_OPT"][$ch]; + $url = $opt["url"]; + + $http = &$opt["http"]; + $http->disable_curl = true; // avoid problems with recursion, since we *ARE* CURL + + // set time limits if requested + if ($opt["max-time"]) { + $http->connect_timeout = $opt["max-time"]; + $http->max_time = $opt["max-time"]; + } + + if ($opt["post"]) { + $res = $http->post($url,$opt["postdata"]); + } elseif ($opt["method"]) { + $res = $http->custom($opt["method"],$url,$opt["postdata"]); + } else { + $res = $http->get($url); + } + + // check for errors + $opt["errno"] = (!$res && $http->error) ? 1 : 0; + if ($opt["errno"]) $opt["error"] = $http->error; + + // die if CURLOPT_FAILONERROR is set and the HTTP result code is greater than 300 + if ($opt["fail_on_error"]) { + if ($http->result_code>300) die; + } + + $opt["stats"] = $http->stats; + + + $headers = ""; + foreach ($http->response_headers as $k=>$v) { + $headers .= "$k: $v\r\n"; + } + + // if a file handle was provided for header output, extract the headers + // and write them to the handle + if (isset($opt["header_handle"])) { + fwrite($opt["header_handle"],$headers); + } + + $output = ($opt["include_headers"] ? $headers."\r\n" : "") . ($opt["include_body"] ? $http->response : ""); + + // if a file handle was provided for output, write the output to it + if (isset($opt["output_handle"])) { + fwrite($opt["output_handle"],$output); + + // if the caller requested that the response be returned, return it + } elseif ($opt["return_transfer"]) { + return $output; + + // otherwise, just echo the output to stdout + } else { + echo $output; + } + return true; +} + +function curl_close($ch) { + $opt = &$GLOBALS["_CURLNAT_OPT"][$ch]; + + if ($opt["settings"]) { + $settings = &$opt["settings"]; + // if the user used CURLOPT_INFILE to specify a file to upload, remove the + // temporary file created for the CURL binary + if ($settings["upload-file"]["value"] && file_exists($settings["upload-file"]["value"])) unlink($settings["upload-file"]["value"]); + } + + unset($GLOBALS["_CURLNAT_OPT"][$ch]); +} + +function curl_errno($ch) { + return (int) $GLOBALS["_CURLNAT_OPT"][$ch]["errno"]; +} + +function curl_error($ch) { + return $GLOBALS["_CURLNAT_OPT"][$ch]["error"]; +} + +function curl_getinfo($ch,$opt=NULL) { + if ($opt) { + $curlinfo_tags = array( + CURLINFO_EFFECTIVE_URL=>"url", + CURLINFO_CONTENT_TYPE=>"content_type", + CURLINFO_HTTP_CODE=>"http_code", + CURLINFO_HEADER_SIZE=>"header_size", + CURLINFO_REQUEST_SIZE=>"request_size", + CURLINFO_FILETIME=>"filetime", + CURLINFO_SSL_VERIFYRESULT=>"ssl_verify_result", + CURLINFO_REDIRECT_COUNT=>"redirect_count", + CURLINFO_TOTAL_TIME=>"total_time", + CURLINFO_NAMELOOKUP_TIME=>"namelookup_time", + CURLINFO_CONNECT_TIME=>"connect_time", + CURLINFO_PRETRANSFER_TIME=>"pretransfer_time", + CURLINFO_SIZE_UPLOAD=>"size_upload", + CURLINFO_SIZE_DOWNLOAD=>"size_download", + CURLINFO_SPEED_DOWNLOAD=>"speed_download", + CURLINFO_SPEED_UPLOAD=>"speed_upload", + CURLINFO_CONTENT_LENGTH_DOWNLOAD=>"download_content_length", + CURLINFO_CONTENT_LENGTH_UPLOAD=>"upload_content_length", + CURLINFO_STARTTRANSFER_TIME=>"starttransfer_time", + CURLINFO_REDIRECT_TIME=>"redirect_time" + ); + + $key = $curlinfo_tags[$opt]; + return $GLOBALS["_CURLNAT_OPT"][$ch]["stats"][$key]; + } else { + return $GLOBALS["_CURLNAT_OPT"][$ch]["stats"]; + } +} + +function curl_version() { + return "libcurlemu/".CURLNAT_VERSION."-nat"; +} + +} +?> \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/lib/twitter.lib.php b/plugins/JP_TC_PluginForTwitter/lib/twitter.lib.php new file mode 100644 index 000000000..5371b61a8 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/lib/twitter.lib.php @@ -0,0 +1,632 @@ + Justin Poliey + * + * Permission is hereby granted, free of charge, to any person + * obtaining a copy of this software and associated documentation + * files (the "Software"), to deal in the Software without + * restriction, including without limitation the rights to use, + * copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the + * Software is furnished to do so, subject to the following + * conditions: + * + * The above copyright notice and this permission notice shall be + * included in all copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, + * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES + * OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND + * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT + * HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, + * WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR + * OTHER DEALINGS IN THE SOFTWARE. + */ + +/** + * Twitterlibphp is a PHP implementation of the Twitter API, allowing you + * to take advantage of it from within your PHP applications. + * + * @author Justin Poliey + * @package twitterlibphp + */ + +/** + * Twitter API abstract class + * @package twitterlibphp + */ + +/* + Additional fix jparker(jparker2.0(at)gmail.com). +*/ + + +abstract class TwitterBase { + + /** + * the last HTTP status code returned + * @access private + * @var integer + */ + private $http_status; + + /** + * the whole URL of the last API call + * @access private + * @var string + */ + private $last_api_call; + + /** + * the application calling the API + * @access private + * @var string + */ + private $application_source; + + /** + * Returns the 20 most recent statuses from non-protected users who have set a custom user icon. + * @param string $format Return format + * @return string + */ + function getPublicTimeline($format = 'xml') { + return $this->apiCall('statuses/public_timeline', 'get', $format, array(), false); + } + + /** + * Returns the 20 most recent statuses posted by the authenticating user and that user's friends. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getFriendsTimeline($options = array(), $format = 'json') { + return $this->apiCall('statuses/friends_timeline', 'get', $format, $options); + } + + /** + * Returns the 20 most recent statuses posted from the authenticating user. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getUserTimeline($options = array(), $format = 'json') { + return $this->apiCall('statuses/user_timeline', 'get', $format, $options, true); + } + + /** + * Returns the 20 most recent mentions (status containing @username) for the authenticating user. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getMentions($options = array(), $format = 'xml') { + return $this->apiCall("statuses/mentions", 'get', $format, $options); + } + + /** + * Returns the 20 most recent @replies (status updates prefixed with @username) for the authenticating user. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + * @deprecated + */ + function getReplies($options = array(), $format = 'json') { + return $this->apiCall('statuses/replies', 'get', $format, $options); + } + + /** + * Returns a single status, specified by the $id parameter. + * @param string|integer $id The numerical ID of the status to retrieve + * @param string $format Return format + * @return string + */ + function getStatus($id, $format = 'xml') { + return $this->apiCall("statuses/show/{$id}", 'get', $format, array(), false); + } + + /** + * Updates the authenticated user's status. + * @param string $status Text of the status, no URL encoding necessary + * @param string|integer $reply_to ID of the status to reply to. Optional + * @param string $format Return format + * @return string + */ + function updateStatus($status, $reply_to = null, $format = 'json') { + $options = array('status' => $status); +// $options['source'] = "TextcubeTweet"; + if ($reply_to) { + $options['in_reply_to_status_id'] = $reply_to; + } + return $this->apiCall('statuses/update', 'post', $format, $options); + } + + /** + * Destroys the status specified by the required ID parameter. The authenticating user must be the author of the specified status. + * @param integer|string $id ID of the status to destroy + * @param string $format Return format + * @return string + */ + function destroyStatus($id, $format = 'json') { + return $this->apiCall("statuses/destroy/{$id}", 'post', $format, $options); + } + + /** + * Returns the authenticating user's friends, each with current status inline. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getFriends($options = array(), $format = 'json') { + return $this->apiCall('statuses/friends', 'get', $format, $options, true); + } + + /** + * Returns the authenticating user's followers, each with current status inline. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getFollowers($options = array(), $format = 'json') { + return $this->apiCall('statuses/followers', 'get', $format, $options); + } + + /** + * Returns extended information of a given user. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function showUser($options = array(), $format = 'xml') { + if (!array_key_exists('id', $options) && !array_key_exists('user_id', $options) && !array_key_exists('screen_name', $options)) { + $options['id'] = substr($this->credentials, 0, strpos($this->credentials, ':')); + } + return $this->apiCall('users/show', 'get', $format, $options, false); + } + + function getSearch($options = array(), $format = 'json') { + return $this->apiCall('', 'get', $format, $options, true, 'http://search.twitter.com/search.' . $format); + } + + /** + * Returns a list of the 20 most recent direct messages sent to the authenticating user. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getMessages($options = array(), $format = 'json') { + return $this->apiCall('direct_messages', 'get', $format, $options); + } + + function getRecipientsList($options = array(), $format = 'json') { + return $this->apiCall('direct_messages/recipients_list', 'get', $format, $options, true, '', false); + } + + /** + * Returns a list of the 20 most recent direct messages sent by the authenticating user. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getSentMessages($options = array(), $format = 'json') { + return $this->apiCall('direct_messages/sent', 'get', $format, $options); + } + + /** + * Sends a new direct message to the specified user from the authenticating user. + * @param string $user The ID or screen name of a recipient + * @param string $text The message to send + * @param string $format Return format + * @return string + */ + function newMessage($user, $text, $format = 'json') { + $options = array( + 'user' => $user, + 'text' => $text + ); + return $this->apiCall('direct_messages/new', 'post', $format, $options); + } + + /** + * Destroys the direct message specified in the required $id parameter. + * @param integer|string $id The ID of the direct message to destroy + * @param string $format Return format + * @return string + */ + function destroyMessage($id, $format = 'json') { + return $this->apiCall("direct_messages/destroy/{$id}", 'post', $format, $options); + } + + /** + * Befriends the user specified in the ID parameter as the authenticating user. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function createFriendship($id, $options = array(), $format = 'json') { + if (!array_key_exists('follow', $options)) { + $options['follow'] = 'true'; + } + return $this->apiCall("friendships/create/{$id}", 'post', $format, $options); + } + + /** + * Discontinues friendship with the user specified in the ID parameter as the authenticating user. + * @param integer|string $id The ID or screen name of the user to unfriend + * @param string $format Return format + * @return string + */ + function destroyFriendship($id, $format = 'json') { + $options = array('id' => $id); + return $this->apiCall('friendships/destroy', 'post', $format, $options); + } + + /** + * Tests if a friendship exists between two users. + * @param integer|string $user_a The ID or screen name of the first user + * @param integer|string $user_b The ID or screen name of the second user + * @param string $format Return format + * @return string + */ + function friendshipExists($user_a, $user_b, $format = 'json') { + $options = array( + 'user_a' => $user_a, + 'user_b' => $user_b + ); + return $this->apiCall('friendships/exists', 'get', $format, $options); + } + + /** + * Returns an array of numeric IDs for every user the specified user is followed by. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getFriendIDs($options = array(), $format = 'json') { + return $this->apiCall('friends/ids', 'get', $format, $options); + } + + /** + * Returns an array of numeric IDs for every user the specified user is following. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getFollowerIDs($options = array(), $format = 'json') { + return $this->apiCall('followers/ids', 'get', $format, $options); + } + + /** + * Returns an HTTP 200 OK response code and a representation of the requesting user if authentication was successful; returns a 401 status code and an error message if not. + * @param string $format Return format + * @return string + */ + function verifyCredentials($format = 'json') { + return $this->apiCall('account/verify_credentials', 'get', $format, array()); + } + + /** + * Returns the remaining number of API requests available to the requesting user before the API limit is reached for the current hour. + * @param boolean $authenticate Authenticate before calling method + * @param string $format Return format + * @return string + */ + function rateLimitStatus($authenticate = false, $format = 'json') { + return $this->apiCall('account/rate_limit_status', 'get', $format, array(), $authenticate); + } + + /** + * Ends the session of the authenticating user, returning a null cookie. + * @param string $format Return format + * @return string + */ + function endSession($format = 'xml') { + return $this->apiCall('account/end_session', 'post', $format, array()); + } + + /** + * Sets which device Twitter delivers updates to for the authenticating user. + * @param string $device The delivery device used. Must be sms, im, or none + * @return string + */ + function updateDeliveryDevice($device, $format = 'json') { + $options = array('device' => $device); + return $this->apiCall('account/update_delivery_device', 'post', $format, $options); + } + + /** + * Sets one or more hex values that control the color scheme of the authenticating user's profile page on twitter.com. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function updateProfileColors($options, $format = 'json') { + return $this->apiCall('account/update_profile_colors', 'post', $format, $options); + } + + /** + * Sets values that users are able to set under the "Account" tab of their settings page. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function updateProfile($options, $format = 'json') { + return $this->apiCall('account/update_profile', 'post', $format, array()); + } + + + /** + * Returns the 20 most recent favorite statuses for the authenticating user or user specified by the ID parameter in the requested format. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getFavorites($options = array(), $format = 'json') { + return $this->apiCall('favorites', 'get', $format, $options); + } + + /** + * Favorites the status specified in the ID parameter as the authenticating user. + * @param integer|string $id The ID of the status to favorite + * @param string $format Return format + * @return string + */ + function createFavorite($id, $format = 'json') { + return $this->apiCall("favorites/create/{$id}", 'post', $format, array()); + } + + /** + * Un-favorites the status specified in the ID parameter as the authenticating user. + * @param integer|string $id The ID of the status to un-favorite + * @param string $format Return format + * @return string + */ + function destroyFavorite($id, $format = 'json') { + return $this->apiCall("favorites/destroy/{$id}", 'post', $format, array()); + } + + /** + * Enables notifications for updates from the specified user to the authenticating user. + * @param integer|string $id The ID or screen name of the user to follow + * @param string $format Return format + * @return string + */ + function follow($id, $format = 'json') { + $options = array('id' => $id); + return $this->apiCall('notifications/follow', 'post', $format, $options); + } + + /** + * Disables notifications for updates from the specified user to the authenticating user. + * @param integer|string $id The ID or screen name of the user to leave + * @param string $format Return format + * @return string + */ + function leave($id, $format = 'json') { + $options = array('id' => $id); + return $this->apiCall('notifications/leave', 'post', $format, $options); + } + + /** + * Blocks the user specified in the ID parameter as the authenticating user. + * @param integer|string $id The ID or screen name of the user to block + * @param string $format Return format + * @return string + */ + function createBlock($id, $format = 'json') { + $options = array('id' => $id); + return $this->apiCall('blocks/create', 'post', $format, $options); + } + + /** + * Unblocks the user specified in the ID parameter as the authenticating user. + * @param integer|string $id The ID or screen name of the user to unblock + * @param string $format Return format + * @return string + */ + function destroyBlock($id, $format = 'json') { + $options = array('id' => $id); + return $this->apiCall('blocks/destroy', 'post', $format, $options); + } + + /** + * Returns if the authenticating user is blocking a target user. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function blockExists($options, $format = 'json') { + return $this->apiCall('blocks/exists', 'get', $format, $options); + } + + /** + * Returns an array of user objects that the authenticating user is blocking. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getBlocking($options, $format = 'json') { + return $this->apiCall('blocks/blocking', 'get', $format, $options); + } + + /** + * Returns an array of numeric user ids the authenticating user is blocking. + * @param array $options Options to pass to the method + * @param string $format Return format + * @return string + */ + function getBlockingIDs($format = 'json') { + return $this->apiCall('blocks/blocking/ids', 'get', $format, array()); + } + + + function savedSearches($format = 'json') { + return $this->apiCall('saved_searches', 'get', $format, array(), true); + } + + function createSavedSearches($options, $format = 'json') { + return $this->apiCall('saved_searches/create', 'post', $format, $options, true); + } + + function destroySavedSearches($id, $format = 'json') { + return $this->apiCall("saved_searches/destroy/{$id}", 'post', $format, array(), true); + } + + /** + * Returns the string "ok" in the requested format with a 200 OK HTTP status code. + * @param string $format Return format + * @return string + */ + function test($format = 'json') { + return $this->apiCall('help/test', 'get', $format, array(), false); + } + + /** + * Returns the last HTTP status code + * @return integer + */ + function lastStatusCode() { + return $this->http_status; + } + + /** + * Returns the URL of the last API call + * @return string + */ + function lastApiCall() { + return $this->last_api_call; + } + + function bitShortenURL($options = array(), $format = 'json') { + if (!empty($options['longUrl'])) { + $options['version'] = "2.0.1"; + $options['format'] = $format; + $shortenURL = "http://api.bit.ly/shorten"; + return $this->apiCall('', 'get', $format, $options, false, $shortenURL); + } + } +} + +/** + * Access to the Twitter API through HTTP auth + * @package twitterlibphp + */ +class Twitter extends TwitterBase { + + /** + * the Twitter credentials in HTTP format, username:password + * @access private + * @var string + */ + var $credentials; + + /** + * Fills in the credentials {@link $credentials} and the application source {@link $application_source}. + * @param string $username Twitter username + * @param string $password Twitter password + * @param $source string Optional. Name of the application using the API + */ + function __construct($username, $password, $source = null) { + $this->credentials = sprintf("%s:%s", $username, $password); + $this->application_source = $source; + } + + + protected function curlCheck() { + if( !function_exists("curl_init") && + !function_exists("curl_setopt") && + !function_exists("curl_exec") && + !function_exists("curl_close") ) return false; + else return true; + } + + protected $options = array( + 'timeout' => 30, + 'userAgent' => 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.9 Twitter/TextcubeTweet/1.0' + ); + + /** + * Executes an API call + * @param string $twitter_method The Twitter method to call + * @param string $http_method The HTTP method to use + * @param string $format Return format + * @param array $options Options to pass to the Twitter method + * @param boolean $require_credentials Whether or not credentials are required + * @return string + */ + + protected function apiCall($twitter_method, $http_method, $format, $options, $require_credentials = true, $uri = '', $jsonFlag = true) { + + if (function_exists('json_decode')) { + if ($format == 'json' && $jsonFlag) { + require_once ('JSON.php'); + $json = new JSON(); + } + } + + $api_url = sprintf('http://twitter.com/%s.%s', $twitter_method, $format); + $api_url = empty($uri) ? $api_url : $uri; + + $queryString = ""; + if (count($options) > 0) { + $queryString = http_build_query($options); + } + + if (($http_method == 'get') && (count($options) > 0)) { + $api_url .= '?' . $queryString; + } + + $headers = array( + 'User-Agent: ' . $this->options['userAgent'], + 'X-Twitter-Client: TextcubeTweet', + 'X-Twitter-Client-Version: 1.8', + 'X-Twitter-Client-URL: http://create74.com/_textcube/twitter_textcube.xml', + 'Content-Type: application/x-www-form-urlencoded' + ); + + require_once('libcurlemu/libcurlemu.inc.php'); + + $ch = curl_init(); + curl_setopt($ch, CURLOPT_URL, $api_url); + if ($require_credentials) { + curl_setopt($ch, CURLOPT_USERPWD, $this->credentials); + } + + curl_setopt($ch, CURLOPT_USERAGENT, $this->options['userAgent']); + curl_setopt($ch, CURLOPT_HTTPHEADER, $headers); + curl_setopt($ch, CURLOPT_VERBOSE, true); + curl_setopt($ch, CURLOPT_NOBODY, false); + curl_setopt($ch, CURLOPT_HEADER, false); + curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); + curl_setopt($ch, CURLOPT_RETURNTRANSFER, true); + curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, $this->options['timeout']); + + if ($http_method == 'post') { + curl_setopt($ch, CURLOPT_POST, true); + curl_setopt($ch, CURLOPT_POSTFIELDS, $queryString); + } + + $twitter_data = trim(curl_exec($ch)); + $this->http_status = curl_getinfo($ch, CURLINFO_HTTP_CODE); + $this->last_api_call = $api_url; + + if ($format == 'xml') { + $response_data = @simplexml_load_string($twitter_data); + } else { + if ($jsonFlag) { + $response_data = function_exists('json_decode') ? json_decode($twitter_data) : $json->decode($twitter_data); + } else { + $response_data = $twitter_data; + } + } + + curl_close($ch); + + return $response_data; + } +} + +/** + * TODO: Add TwitterOAuth class + */ +?> diff --git a/plugins/JP_TC_PluginForTwitter/plugin-main.css b/plugins/JP_TC_PluginForTwitter/plugin-main.css new file mode 100644 index 000000000..bad1bdf7b --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/plugin-main.css @@ -0,0 +1,576 @@ +@charset "utf-8"; + +/* twitter info ********************************************************************************/ + +#part-twitter-info { + float : left; + width : 20%; +} + +#part-twitter-info .caption { + display : none; +} + +#part-twitter-info div.data-inbox { + width : auto; +} + +#part-twitter-info div.data-inbox .tw_sidebar { + -moz-border-radius-bottomleft:5px; + -moz-border-radius-bottomright:5px; + -moz-border-radius-topleft:5px; + -moz-border-radius-topright:5px; + -webkit-border-radius:5px; + background-color : #F3F3F1; + border : 1px solid #D2D2CC; + color : #333333; + + padding : 10px; + position : static; + text-align : center; +} + +.tw_sidebar a { + text-decoration: none; +} +.tw_sidebar a:hover { + color:#05AABB; + text-decoration: none; +} +.tw_sidebar a img { + border:none; +} +.tw_sidebar .acount_info { + padding-bottom:5px; +} +.tw_sidebar .acount_info a { + display:block; +} +.tw_sidebar .acount_info a .acount_img { + float:left; + margin-right:8px; + padding:1px; + border:1px solid #ccc; + width:31px; + height:31px; +} +.tw_sidebar .acount_info a span.acount_name { + float:left; + padding-top:10px; + font-size:14px; +} + +.tw_sidebar .follow_info { + padding:5px 0; + border-top:1px dotted #ccc; + +} +.tw_sidebar .follow_info a { + display:block; + float:left; + margin-right:5px; +} +.tw_sidebar .follow_info a .stats_count { + display:block; + font-size:11px; +} +.tw_sidebar .follow_info a .label { + display:block; + font-size:11px; +} + +.tw_sidebar .desc_info { + padding:5px 0; + border-top:1px dotted #ccc; +} +.tw_sidebar .desc_info .description { + -moz-border-radius-bottomleft:5px; + -moz-border-radius-bottomright:5px; + -moz-border-radius-topleft:5px; + -moz-border-radius-topright:5px; + -webkit-border-radius:5px; + padding:4px; + background-color : #fff; + border : 1px solid #D2D2CC; + font-size:11px; +} + +.tw_sidebar .side_menu { + padding:5px 0; + border-top:1px dotted #ccc; +} +.tw_sidebar .side_menu a { + display:block; + font-size:12px; + text-align:right; + padding:3px 2px; + border-bottom:1px solid #F3F3F1; +} +.tw_sidebar .side_menu a:hover { + background-color:#fff; +} +.tw_sidebar .selectMenu { + background-color:#fff; +} +.tw_sidebar .custom_search { + padding:5px 0px; + border-top:1px dotted #ccc; + text-align:left; +} +.tw_sidebar .custom_search form { + margin:0; + padding:0; +} +.tw_sidebar .custom_search .search_q { + border:1px solid #999; + padding:3px 2px 0; + margin:0; + width:120px; + height:19px; + font-size:9pt; + display:block; + float:left; +} +.tw_sidebar .custom_search .search_submit { + border-top:1px solid #999; + border-right:1px solid #999; + border-bottom:1px solid #999; + background-color:#fff; + background:url('images/search_icon.gif') no-repeat center 5px #fff; + padding-top:3px; + width:22px; + height:19px; + display:block; + float:left; + cursor:pointer; +} +.tw_sidebar .saved_searches { + padding:5px 0px; + border-top:1px dotted #ccc; + text-align:right; +} +.tw_sidebar .saved_searches .saved_searches_list { + display:block; + margin-bottom:3px; + cursor:pointer; + background:url('images/toggle_up_dark.png') no-repeat left center transparent; +} +.tw_sidebar .saved_searches.collapsed .saved_searches_list { + background:url('images/toggle_down_dark.png') no-repeat left center transparent; +} +.tw_sidebar .saved_searches .search_list a { + display:block; + font-size:12px; + text-align:right; + padding:3px 2px; + color:#05AABB; + border-bottom:1px solid #F3F3F1; +} +.tw_sidebar .saved_searches .search_list a:hover { + background-color:#fff; +} +.tw_sidebar .saved_searches .searches_hide { + display:none; +} + +.round-left { + -moz-border-radius-topleft:5px; + -moz-border-radius-bottomleft:5px; + -webkit-border-top-left-radius:5px; + -webkit-border-bottom-left-radius:5px; +} +.round-right { + -moz-border-radius-topright:5px; + -moz-border-radius-bottomright:5px; + -webkit-border-top-right-radius:5px; + -webkit-border-bottom-right-radius:5px; +} +.tw_sidebar .friends_photo { + padding:5px 0; + border-top:1px dotted #ccc; + text-align:right; +} +.tw_sidebar .friends_photo .following { + margin-top:2px; + +} +.tw_sidebar .friends_photo .friend_photo { + margin-left:2px; +} +.tw_sidebar .friends_photo .friend_photo img { + width:24px; + height:24px; + padding:1px; + border:1px solid #ccc; +} + +/* twitter contents *******************************************************************************************/ +#part-twitter-contents { + float : right; + overflow : hidden; + width : 79%; +} + +#content-box .top_bar { + position:relative; +} +#content-box .top_bar h3 { + font-size:1.4em; + padding:0;margin:0; +} +#content-box .top_bar .char-counter { + color:#aaa; + display:block; + font-size:13px; + font-weight:bold; + position:absolute; + right:0px; + top:0; +} +#content-box .top_bar .doingTemp { + display:inline-block; + overflow:hidden; + width:10px; + height:10px; + visibility:hidden; +} +#content-box .textarea_full { + width:752px; + height:60px; + font-size:9pt; +} + +#content-box .submit_bar .shorten_line { + float:left; + width:420px; +} +#content-box .submit_bar .shorten_line.loadingLink { + background:transparent url('images/spinner.gif') no-repeat right center; +} +#content-box .submit_bar .submit_line { + float:right; + width:75px; + text-align:right; +} +#content-box .submit_bar .submit_line.loadingPost { + background:transparent url('images/spinner.gif') no-repeat left center; +} +#content-box .submit_bar .shortenLink { + width:310px; +} + +#timeline_heading { + margin:15px 0 5px; +} +#timeline_heading h3 { + color:#666666; + font-size:1.4em; +} +#timeline_heading h3 a, +#timeline_heading h3 span.loading { + float:right; + font-size:0.7em; + margin-top:4px; + padding-left:18px; +} +#timeline_heading h3 .saveSearchLink { + background:transparent url('images/icon_add.png') no-repeat scroll left bottom; +} +#timeline_heading h3 .deleteSearchLink { + background:transparent url('images/icon_remove.png') no-repeat scroll left bottom; +} +#timeline_heading h3 span.loading { + background:transparent url('images/spinner.gif') no-repeat scroll left bottom; +} +.statuses { + list-style-image:none; + list-style-position:outside; + list-style-type:none; +} +.statuses > li:first-child { + border-top:1px dotted #D2DADA; +} +.li_first-child { + border-top:1px dotted #D2DADA; +} + +.statuses > li { + border-bottom:1px dotted #D2DADA; + line-height:1.1em; + padding:0.7em 0.5em 0.6em 0; + position:relative; +} +.directMessage > li:first-child { + border-top:0px dotted #D2DADA; +} + +#timeline .listable { + cursor:pointer; + position:relative; + float:left; +} + +.statuses .thumb { + display:block; + height:54px; + width:54px; + left:0; + margin:0 10px 0 5px; + overflow:hidden; + position:absolute; +} +.statuses .thumbmini { + height:30px; + width:30px; +} +.statuses .thumb .photo { + height:48px; + width:48px; + padding:1px; + border:1px solid #ccc; +} +.statuses .thumb .mini { + height:24px; + width:24px; +} +.statuses span.status-body { + display:block; + margin-left:65px; + min-height:54px; + overflow:hidden; + line-height:1.4em; +} +.statuses span.status-body a { + color:#05AABB; + text-decoration: none; +} +.statuses .bodymini { + margin-left:45px !important; + min-height:30px !important; + line-height:1.1em !important; +} +.statuses span.status-body a:hover { + text-decoration: underline; +} +.statuses span.status-body .highlight { + font-weight:bold; +} + +.statuses .screen-name { + margin-right:5px; +} +.statuses .desc { + color:#999; +} +.statuses .meta_info span.meta { + display:block; + float:left; + width:60%; + color:#999; + font-family:arial; + font-size:0.9em; + margin:3px 0 0; +} +.statuses .meta_info span.meta a { + color:#777; +} +.statuses .meta_info span.meta_action { + display:block; + float:right; + width:35%; + color:#666; + font-family:arial; + font-size:0.9em; + margin:3px 0 0; + padding-top:4px; + text-align:right; +} + +ul.statuses li:hover, +ul.statuses li.hover { + background-color:#f7f7f7; +} +ul.statuses li:hover span.meta_action a, +ul.statuses li.hover span.meta_action a { + visibility:visible; +} +.statuses .meta_info span.meta_action a, +.statuses .meta_info span.meta_action .fhide{ + visibility:hidden; +} + +.statuses .meta_info span.meta_action .follow { + float:right; + background:url('images/follow.gif') no-repeat 0 0; + display:block; + width:48px; + height:11px; + margin-left:5px; +} +.statuses .meta_info span.meta_action .unfollow { + float:right; + background:url('images/unfollow.gif') no-repeat 0 0; + display:block; + width:58px; + height:11px; + margin-left:5px; +} +.statuses .meta_info span.meta_action .following { +/* float:right; + display:block;*/ + background:url('images/following.gif') no-repeat 0 0; + display:inline-block; + position:absolute; + right:8px; + top:5px; + width:54px; + height:11px; +} +.statuses .meta_info span.meta_action .delete { + float:right; + background:url('images/delete.gif') no-repeat 0 0; + display:block; + width:37px; + height:11px; +} +.statuses .meta_info span.meta_action .reply { + float:right; + background:url('images/reply.gif') no-repeat 0 0; + display:block; + width:33px; + height:11px; + margin-left:5px; +} +.statuses .meta_info span.meta_action .message { + float:right; + background:url('images/message.gif') no-repeat 0 0; + display:block; + width:45px; + height:11px; + margin-left:5px; +} +.statuses .meta_info span.meta_action .retweet { + float:right; + background:url('images/retweet.gif') no-repeat 0 0; + display:block; + width:44px; + height:11px; + margin-left:5px; +} +.statuses .meta_info span.meta_action .fav-action { + float:right; + background-position:0 0; + background-repeat:no-repeat; + display:block; + width:45px; + height:11px; + margin-left:5px; +} +.statuses .meta_info span.meta_action .fav-throb { + background:url('images/fav-throbber.gif') no-repeat 50% 50%; + height:11px; +} +.statuses .meta_info span.meta_action .non-fav { + background:url('images/non-favorite.gif') no-repeat 0 0; +} +.statuses .meta_info span.meta_action .fav { + background:url('images/favorite.gif') no-repeat 0 0; + visibility:visible; +} + + +#content-box .more:hover { + background-position:left -78px; + border:1px solid #bbbbbb; + text-decoration:none; +} +#content-box .more.loading { + cursor:default !important; + background-color:#fff; + background-repeat:no-repeat; + background-position:50% 50%; + border:1px solid #eee; + background-image:url('images/ajax.gif') !important; +} + +#content-box .round { + -moz-border-radius-bottomleft:5px; + -moz-border-radius-bottomright:5px; + -moz-border-radius-topleft:5px; + -moz-border-radius-topright:5px; + -webkit-border-radius:5px; +} +#content-box .more { + background-color:#ffffff; + background-image:url('images/more.gif'); + background-position:left top; + background-repeat:repeat-x; + border-color:#dddddd #aaaaaa #aaaaaa #dddddd; + border-style:solid; + border-width:1px; + display:block; + font-size:14px; + font-weight:bold; + height:22px; + line-height:1.5em; + margin:6px auto; + outline-color:-moz-use-text-color; + outline-style:none; + outline-width:medium; + padding:6px 0; + text-align:center; + text-shadow:1px 1px 1px #ffffff; + width:98%; +} + +#content-box .updatePost { + +} +#direct_message_user_id { + min-width:120px; + border:1px solid #aaa; + padding:1px 1px; + margin-bottom:2px; + font-size:9pt; +} + +#dm_tabs { + display:block; + padding:1px; +} +.tabMenu { + margin:0; + text-align:right; + border-bottom:1px solid #CECECE; +} +.tabMenu li { + display:inline; +} +#inbox_tab { + margin:0; +} +#sent_tab { + margin:0 15px 0 3px; +} +ul#dm_tabs li a { + padding:3px 40px 1px; +} +.tabMenu li a { + background-color:#E6E6E6; + border-left:1px solid #CECECE; + border-right:1px solid #CECECE; + border-top:1px solid #CECECE; + color:#4C4C4C; + display:inline; + padding:3px 20px 1px; + text-decoration:none; +} +.tabMenu .in-page-link { + outline-color:-moz-use-text-color; + outline-style:none; + outline-width:medium; +} +.tabMenu .seletedTab { + background-color:#fff; + border-bottom:1px solid #fff; +} \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/script/jquery-1.3.2.min.js b/plugins/JP_TC_PluginForTwitter/script/jquery-1.3.2.min.js new file mode 100644 index 000000000..55c2e6d71 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/script/jquery-1.3.2.min.js @@ -0,0 +1,19 @@ +/* + * jQuery JavaScript Library v1.3.2 + * http://jquery.com/ + * + * Copyright (c) 2009 John Resig + * Dual licensed under the MIT and GPL licenses. + * http://docs.jquery.com/License + * + * Date: 2009-02-19 17:34:21 -0500 (Thu, 19 Feb 2009) + * Revision: 6246 + */ +(function(){var l=this,g,y=l.jQuery,p=l.$,o=l.jQuery=l.$=function(E,F){return new o.fn.init(E,F)},D=/^[^<]*(<(.|\s)+>)[^>]*$|^#([\w-]+)$/,f=/^.[^:#\[\.,]*$/;o.fn=o.prototype={init:function(E,H){E=E||document;if(E.nodeType){this[0]=E;this.length=1;this.context=E;return this}if(typeof E==="string"){var G=D.exec(E);if(G&&(G[1]||!H)){if(G[1]){E=o.clean([G[1]],H)}else{var I=document.getElementById(G[3]);if(I&&I.id!=G[3]){return o().find(E)}var F=o(I||[]);F.context=document;F.selector=E;return F}}else{return o(H).find(E)}}else{if(o.isFunction(E)){return o(document).ready(E)}}if(E.selector&&E.context){this.selector=E.selector;this.context=E.context}return this.setArray(o.isArray(E)?E:o.makeArray(E))},selector:"",jquery:"1.3.2",size:function(){return this.length},get:function(E){return E===g?Array.prototype.slice.call(this):this[E]},pushStack:function(F,H,E){var G=o(F);G.prevObject=this;G.context=this.context;if(H==="find"){G.selector=this.selector+(this.selector?" ":"")+E}else{if(H){G.selector=this.selector+"."+H+"("+E+")"}}return G},setArray:function(E){this.length=0;Array.prototype.push.apply(this,E);return this},each:function(F,E){return o.each(this,F,E)},index:function(E){return o.inArray(E&&E.jquery?E[0]:E,this)},attr:function(F,H,G){var E=F;if(typeof F==="string"){if(H===g){return this[0]&&o[G||"attr"](this[0],F)}else{E={};E[F]=H}}return this.each(function(I){for(F in E){o.attr(G?this.style:this,F,o.prop(this,E[F],G,I,F))}})},css:function(E,F){if((E=="width"||E=="height")&&parseFloat(F)<0){F=g}return this.attr(E,F,"curCSS")},text:function(F){if(typeof F!=="object"&&F!=null){return this.empty().append((this[0]&&this[0].ownerDocument||document).createTextNode(F))}var E="";o.each(F||this,function(){o.each(this.childNodes,function(){if(this.nodeType!=8){E+=this.nodeType!=1?this.nodeValue:o.fn.text([this])}})});return E},wrapAll:function(E){if(this[0]){var F=o(E,this[0].ownerDocument).clone();if(this[0].parentNode){F.insertBefore(this[0])}F.map(function(){var G=this;while(G.firstChild){G=G.firstChild}return G}).append(this)}return this},wrapInner:function(E){return this.each(function(){o(this).contents().wrapAll(E)})},wrap:function(E){return this.each(function(){o(this).wrapAll(E)})},append:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.appendChild(E)}})},prepend:function(){return this.domManip(arguments,true,function(E){if(this.nodeType==1){this.insertBefore(E,this.firstChild)}})},before:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this)})},after:function(){return this.domManip(arguments,false,function(E){this.parentNode.insertBefore(E,this.nextSibling)})},end:function(){return this.prevObject||o([])},push:[].push,sort:[].sort,splice:[].splice,find:function(E){if(this.length===1){var F=this.pushStack([],"find",E);F.length=0;o.find(E,this[0],F);return F}else{return this.pushStack(o.unique(o.map(this,function(G){return o.find(E,G)})),"find",E)}},clone:function(G){var E=this.map(function(){if(!o.support.noCloneEvent&&!o.isXMLDoc(this)){var I=this.outerHTML;if(!I){var J=this.ownerDocument.createElement("div");J.appendChild(this.cloneNode(true));I=J.innerHTML}return o.clean([I.replace(/ jQuery\d+="(?:\d+|null)"/g,"").replace(/^\s*/,"")])[0]}else{return this.cloneNode(true)}});if(G===true){var H=this.find("*").andSelf(),F=0;E.find("*").andSelf().each(function(){if(this.nodeName!==H[F].nodeName){return}var I=o.data(H[F],"events");for(var K in I){for(var J in I[K]){o.event.add(this,K,I[K][J],I[K][J].data)}}F++})}return E},filter:function(E){return this.pushStack(o.isFunction(E)&&o.grep(this,function(G,F){return E.call(G,F)})||o.multiFilter(E,o.grep(this,function(F){return F.nodeType===1})),"filter",E)},closest:function(E){var G=o.expr.match.POS.test(E)?o(E):null,F=0;return this.map(function(){var H=this;while(H&&H.ownerDocument){if(G?G.index(H)>-1:o(H).is(E)){o.data(H,"closest",F);return H}H=H.parentNode;F++}})},not:function(E){if(typeof E==="string"){if(f.test(E)){return this.pushStack(o.multiFilter(E,this,true),"not",E)}else{E=o.multiFilter(E,this)}}var F=E.length&&E[E.length-1]!==g&&!E.nodeType;return this.filter(function(){return F?o.inArray(this,E)<0:this!=E})},add:function(E){return this.pushStack(o.unique(o.merge(this.get(),typeof E==="string"?o(E):o.makeArray(E))))},is:function(E){return !!E&&o.multiFilter(E,this).length>0},hasClass:function(E){return !!E&&this.is("."+E)},val:function(K){if(K===g){var E=this[0];if(E){if(o.nodeName(E,"option")){return(E.attributes.value||{}).specified?E.value:E.text}if(o.nodeName(E,"select")){var I=E.selectedIndex,L=[],M=E.options,H=E.type=="select-one";if(I<0){return null}for(var F=H?I:0,J=H?I+1:M.length;F=0||o.inArray(this.name,K)>=0)}else{if(o.nodeName(this,"select")){var N=o.makeArray(K);o("option",this).each(function(){this.selected=(o.inArray(this.value,N)>=0||o.inArray(this.text,N)>=0)});if(!N.length){this.selectedIndex=-1}}else{this.value=K}}})},html:function(E){return E===g?(this[0]?this[0].innerHTML.replace(/ jQuery\d+="(?:\d+|null)"/g,""):null):this.empty().append(E)},replaceWith:function(E){return this.after(E).remove()},eq:function(E){return this.slice(E,+E+1)},slice:function(){return this.pushStack(Array.prototype.slice.apply(this,arguments),"slice",Array.prototype.slice.call(arguments).join(","))},map:function(E){return this.pushStack(o.map(this,function(G,F){return E.call(G,F,G)}))},andSelf:function(){return this.add(this.prevObject)},domManip:function(J,M,L){if(this[0]){var I=(this[0].ownerDocument||this[0]).createDocumentFragment(),F=o.clean(J,(this[0].ownerDocument||this[0]),I),H=I.firstChild;if(H){for(var G=0,E=this.length;G1||G>0?I.cloneNode(true):I)}}if(F){o.each(F,z)}}return this;function K(N,O){return M&&o.nodeName(N,"table")&&o.nodeName(O,"tr")?(N.getElementsByTagName("tbody")[0]||N.appendChild(N.ownerDocument.createElement("tbody"))):N}}};o.fn.init.prototype=o.fn;function z(E,F){if(F.src){o.ajax({url:F.src,async:false,dataType:"script"})}else{o.globalEval(F.text||F.textContent||F.innerHTML||"")}if(F.parentNode){F.parentNode.removeChild(F)}}function e(){return +new Date}o.extend=o.fn.extend=function(){var J=arguments[0]||{},H=1,I=arguments.length,E=false,G;if(typeof J==="boolean"){E=J;J=arguments[1]||{};H=2}if(typeof J!=="object"&&!o.isFunction(J)){J={}}if(I==H){J=this;--H}for(;H-1}},swap:function(H,G,I){var E={};for(var F in G){E[F]=H.style[F];H.style[F]=G[F]}I.call(H);for(var F in G){H.style[F]=E[F]}},css:function(H,F,J,E){if(F=="width"||F=="height"){var L,G={position:"absolute",visibility:"hidden",display:"block"},K=F=="width"?["Left","Right"]:["Top","Bottom"];function I(){L=F=="width"?H.offsetWidth:H.offsetHeight;if(E==="border"){return}o.each(K,function(){if(!E){L-=parseFloat(o.curCSS(H,"padding"+this,true))||0}if(E==="margin"){L+=parseFloat(o.curCSS(H,"margin"+this,true))||0}else{L-=parseFloat(o.curCSS(H,"border"+this+"Width",true))||0}})}if(H.offsetWidth!==0){I()}else{o.swap(H,G,I)}return Math.max(0,Math.round(L))}return o.curCSS(H,F,J)},curCSS:function(I,F,G){var L,E=I.style;if(F=="opacity"&&!o.support.opacity){L=o.attr(E,"opacity");return L==""?"1":L}if(F.match(/float/i)){F=w}if(!G&&E&&E[F]){L=E[F]}else{if(q.getComputedStyle){if(F.match(/float/i)){F="float"}F=F.replace(/([A-Z])/g,"-$1").toLowerCase();var M=q.getComputedStyle(I,null);if(M){L=M.getPropertyValue(F)}if(F=="opacity"&&L==""){L="1"}}else{if(I.currentStyle){var J=F.replace(/\-(\w)/g,function(N,O){return O.toUpperCase()});L=I.currentStyle[F]||I.currentStyle[J];if(!/^\d+(px)?$/i.test(L)&&/^\d/.test(L)){var H=E.left,K=I.runtimeStyle.left;I.runtimeStyle.left=I.currentStyle.left;E.left=L||0;L=E.pixelLeft+"px";E.left=H;I.runtimeStyle.left=K}}}}return L},clean:function(F,K,I){K=K||document;if(typeof K.createElement==="undefined"){K=K.ownerDocument||K[0]&&K[0].ownerDocument||document}if(!I&&F.length===1&&typeof F[0]==="string"){var H=/^<(\w+)\s*\/?>$/.exec(F[0]);if(H){return[K.createElement(H[1])]}}var G=[],E=[],L=K.createElement("div");o.each(F,function(P,S){if(typeof S==="number"){S+=""}if(!S){return}if(typeof S==="string"){S=S.replace(/(<(\w+)[^>]*?)\/>/g,function(U,V,T){return T.match(/^(abbr|br|col|img|input|link|meta|param|hr|area|embed)$/i)?U:V+">"});var O=S.replace(/^\s+/,"").substring(0,10).toLowerCase();var Q=!O.indexOf("",""]||!O.indexOf("",""]||O.match(/^<(thead|tbody|tfoot|colg|cap)/)&&[1,"","
    "]||!O.indexOf("",""]||(!O.indexOf("",""]||!O.indexOf("",""]||!o.support.htmlSerialize&&[1,"div
    ","
    "]||[0,"",""];L.innerHTML=Q[1]+S+Q[2];while(Q[0]--){L=L.lastChild}if(!o.support.tbody){var R=/"&&!R?L.childNodes:[];for(var M=N.length-1;M>=0;--M){if(o.nodeName(N[M],"tbody")&&!N[M].childNodes.length){N[M].parentNode.removeChild(N[M])}}}if(!o.support.leadingWhitespace&&/^\s/.test(S)){L.insertBefore(K.createTextNode(S.match(/^\s*/)[0]),L.firstChild)}S=o.makeArray(L.childNodes)}if(S.nodeType){G.push(S)}else{G=o.merge(G,S)}});if(I){for(var J=0;G[J];J++){if(o.nodeName(G[J],"script")&&(!G[J].type||G[J].type.toLowerCase()==="text/javascript")){E.push(G[J].parentNode?G[J].parentNode.removeChild(G[J]):G[J])}else{if(G[J].nodeType===1){G.splice.apply(G,[J+1,0].concat(o.makeArray(G[J].getElementsByTagName("script"))))}I.appendChild(G[J])}}return E}return G},attr:function(J,G,K){if(!J||J.nodeType==3||J.nodeType==8){return g}var H=!o.isXMLDoc(J),L=K!==g;G=H&&o.props[G]||G;if(J.tagName){var F=/href|src|style/.test(G);if(G=="selected"&&J.parentNode){J.parentNode.selectedIndex}if(G in J&&H&&!F){if(L){if(G=="type"&&o.nodeName(J,"input")&&J.parentNode){throw"type property can't be changed"}J[G]=K}if(o.nodeName(J,"form")&&J.getAttributeNode(G)){return J.getAttributeNode(G).nodeValue}if(G=="tabIndex"){var I=J.getAttributeNode("tabIndex");return I&&I.specified?I.value:J.nodeName.match(/(button|input|object|select|textarea)/i)?0:J.nodeName.match(/^(a|area)$/i)&&J.href?0:g}return J[G]}if(!o.support.style&&H&&G=="style"){return o.attr(J.style,"cssText",K)}if(L){J.setAttribute(G,""+K)}var E=!o.support.hrefNormalized&&H&&F?J.getAttribute(G,2):J.getAttribute(G);return E===null?g:E}if(!o.support.opacity&&G=="opacity"){if(L){J.zoom=1;J.filter=(J.filter||"").replace(/alpha\([^)]*\)/,"")+(parseInt(K)+""=="NaN"?"":"alpha(opacity="+K*100+")")}return J.filter&&J.filter.indexOf("opacity=")>=0?(parseFloat(J.filter.match(/opacity=([^)]*)/)[1])/100)+"":""}G=G.replace(/-([a-z])/ig,function(M,N){return N.toUpperCase()});if(L){J[G]=K}return J[G]},trim:function(E){return(E||"").replace(/^\s+|\s+$/g,"")},makeArray:function(G){var E=[];if(G!=null){var F=G.length;if(F==null||typeof G==="string"||o.isFunction(G)||G.setInterval){E[0]=G}else{while(F){E[--F]=G[F]}}}return E},inArray:function(G,H){for(var E=0,F=H.length;E0?this.clone(true):this).get();o.fn[F].apply(o(L[K]),I);J=J.concat(I)}return this.pushStack(J,E,G)}});o.each({removeAttr:function(E){o.attr(this,E,"");if(this.nodeType==1){this.removeAttribute(E)}},addClass:function(E){o.className.add(this,E)},removeClass:function(E){o.className.remove(this,E)},toggleClass:function(F,E){if(typeof E!=="boolean"){E=!o.className.has(this,F)}o.className[E?"add":"remove"](this,F)},remove:function(E){if(!E||o.filter(E,[this]).length){o("*",this).add([this]).each(function(){o.event.remove(this);o.removeData(this)});if(this.parentNode){this.parentNode.removeChild(this)}}},empty:function(){o(this).children().remove();while(this.firstChild){this.removeChild(this.firstChild)}}},function(E,F){o.fn[E]=function(){return this.each(F,arguments)}});function j(E,F){return E[0]&&parseInt(o.curCSS(E[0],F,true),10)||0}var h="jQuery"+e(),v=0,A={};o.extend({cache:{},data:function(F,E,G){F=F==l?A:F;var H=F[h];if(!H){H=F[h]=++v}if(E&&!o.cache[H]){o.cache[H]={}}if(G!==g){o.cache[H][E]=G}return E?o.cache[H][E]:H},removeData:function(F,E){F=F==l?A:F;var H=F[h];if(E){if(o.cache[H]){delete o.cache[H][E];E="";for(E in o.cache[H]){break}if(!E){o.removeData(F)}}}else{try{delete F[h]}catch(G){if(F.removeAttribute){F.removeAttribute(h)}}delete o.cache[H]}},queue:function(F,E,H){if(F){E=(E||"fx")+"queue";var G=o.data(F,E);if(!G||o.isArray(H)){G=o.data(F,E,o.makeArray(H))}else{if(H){G.push(H)}}}return G},dequeue:function(H,G){var E=o.queue(H,G),F=E.shift();if(!G||G==="fx"){F=E[0]}if(F!==g){F.call(H)}}});o.fn.extend({data:function(E,G){var H=E.split(".");H[1]=H[1]?"."+H[1]:"";if(G===g){var F=this.triggerHandler("getData"+H[1]+"!",[H[0]]);if(F===g&&this.length){F=o.data(this[0],E)}return F===g&&H[1]?this.data(H[0]):F}else{return this.trigger("setData"+H[1]+"!",[H[0],G]).each(function(){o.data(this,E,G)})}},removeData:function(E){return this.each(function(){o.removeData(this,E)})},queue:function(E,F){if(typeof E!=="string"){F=E;E="fx"}if(F===g){return o.queue(this[0],E)}return this.each(function(){var G=o.queue(this,E,F);if(E=="fx"&&G.length==1){G[0].call(this)}})},dequeue:function(E){return this.each(function(){o.dequeue(this,E)})}}); +/* + * Sizzle CSS Selector Engine - v0.9.3 + * Copyright 2009, The Dojo Foundation + * Released under the MIT, BSD, and GPL Licenses. + * More information: http://sizzlejs.com/ + */ +(function(){var R=/((?:\((?:\([^()]+\)|[^()]+)+\)|\[(?:\[[^[\]]*\]|['"][^'"]*['"]|[^[\]'"]+)+\]|\\.|[^ >+~,(\[\\]+)+|[>+~])(\s*,\s*)?/g,L=0,H=Object.prototype.toString;var F=function(Y,U,ab,ac){ab=ab||[];U=U||document;if(U.nodeType!==1&&U.nodeType!==9){return[]}if(!Y||typeof Y!=="string"){return ab}var Z=[],W,af,ai,T,ad,V,X=true;R.lastIndex=0;while((W=R.exec(Y))!==null){Z.push(W[1]);if(W[2]){V=RegExp.rightContext;break}}if(Z.length>1&&M.exec(Y)){if(Z.length===2&&I.relative[Z[0]]){af=J(Z[0]+Z[1],U)}else{af=I.relative[Z[0]]?[U]:F(Z.shift(),U);while(Z.length){Y=Z.shift();if(I.relative[Y]){Y+=Z.shift()}af=J(Y,af)}}}else{var ae=ac?{expr:Z.pop(),set:E(ac)}:F.find(Z.pop(),Z.length===1&&U.parentNode?U.parentNode:U,Q(U));af=F.filter(ae.expr,ae.set);if(Z.length>0){ai=E(af)}else{X=false}while(Z.length){var ah=Z.pop(),ag=ah;if(!I.relative[ah]){ah=""}else{ag=Z.pop()}if(ag==null){ag=U}I.relative[ah](ai,ag,Q(U))}}if(!ai){ai=af}if(!ai){throw"Syntax error, unrecognized expression: "+(ah||Y)}if(H.call(ai)==="[object Array]"){if(!X){ab.push.apply(ab,ai)}else{if(U.nodeType===1){for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&(ai[aa]===true||ai[aa].nodeType===1&&K(U,ai[aa]))){ab.push(af[aa])}}}else{for(var aa=0;ai[aa]!=null;aa++){if(ai[aa]&&ai[aa].nodeType===1){ab.push(af[aa])}}}}}else{E(ai,ab)}if(V){F(V,U,ab,ac);if(G){hasDuplicate=false;ab.sort(G);if(hasDuplicate){for(var aa=1;aa":function(Z,U,aa){var X=typeof U==="string";if(X&&!/\W/.test(U)){U=aa?U:U.toUpperCase();for(var V=0,T=Z.length;V=0)){if(!V){T.push(Y)}}else{if(V){U[X]=false}}}}return false},ID:function(T){return T[1].replace(/\\/g,"")},TAG:function(U,T){for(var V=0;T[V]===false;V++){}return T[V]&&Q(T[V])?U[1]:U[1].toUpperCase()},CHILD:function(T){if(T[1]=="nth"){var U=/(-?)(\d*)n((?:\+|-)?\d*)/.exec(T[2]=="even"&&"2n"||T[2]=="odd"&&"2n+1"||!/\D/.test(T[2])&&"0n+"+T[2]||T[2]);T[2]=(U[1]+(U[2]||1))-0;T[3]=U[3]-0}T[0]=L++;return T},ATTR:function(X,U,V,T,Y,Z){var W=X[1].replace(/\\/g,"");if(!Z&&I.attrMap[W]){X[1]=I.attrMap[W]}if(X[2]==="~="){X[4]=" "+X[4]+" "}return X},PSEUDO:function(X,U,V,T,Y){if(X[1]==="not"){if(X[3].match(R).length>1||/^\w/.test(X[3])){X[3]=F(X[3],null,null,U)}else{var W=F.filter(X[3],U,V,true^Y);if(!V){T.push.apply(T,W)}return false}}else{if(I.match.POS.test(X[0])||I.match.CHILD.test(X[0])){return true}}return X},POS:function(T){T.unshift(true);return T}},filters:{enabled:function(T){return T.disabled===false&&T.type!=="hidden"},disabled:function(T){return T.disabled===true},checked:function(T){return T.checked===true},selected:function(T){T.parentNode.selectedIndex;return T.selected===true},parent:function(T){return !!T.firstChild},empty:function(T){return !T.firstChild},has:function(V,U,T){return !!F(T[3],V).length},header:function(T){return/h\d/i.test(T.nodeName)},text:function(T){return"text"===T.type},radio:function(T){return"radio"===T.type},checkbox:function(T){return"checkbox"===T.type},file:function(T){return"file"===T.type},password:function(T){return"password"===T.type},submit:function(T){return"submit"===T.type},image:function(T){return"image"===T.type},reset:function(T){return"reset"===T.type},button:function(T){return"button"===T.type||T.nodeName.toUpperCase()==="BUTTON"},input:function(T){return/input|select|textarea|button/i.test(T.nodeName)}},setFilters:{first:function(U,T){return T===0},last:function(V,U,T,W){return U===W.length-1},even:function(U,T){return T%2===0},odd:function(U,T){return T%2===1},lt:function(V,U,T){return UT[3]-0},nth:function(V,U,T){return T[3]-0==U},eq:function(V,U,T){return T[3]-0==U}},filter:{PSEUDO:function(Z,V,W,aa){var U=V[1],X=I.filters[U];if(X){return X(Z,W,V,aa)}else{if(U==="contains"){return(Z.textContent||Z.innerText||"").indexOf(V[3])>=0}else{if(U==="not"){var Y=V[3];for(var W=0,T=Y.length;W=0)}}},ID:function(U,T){return U.nodeType===1&&U.getAttribute("id")===T},TAG:function(U,T){return(T==="*"&&U.nodeType===1)||U.nodeName===T},CLASS:function(U,T){return(" "+(U.className||U.getAttribute("class"))+" ").indexOf(T)>-1},ATTR:function(Y,W){var V=W[1],T=I.attrHandle[V]?I.attrHandle[V](Y):Y[V]!=null?Y[V]:Y.getAttribute(V),Z=T+"",X=W[2],U=W[4];return T==null?X==="!=":X==="="?Z===U:X==="*="?Z.indexOf(U)>=0:X==="~="?(" "+Z+" ").indexOf(U)>=0:!U?Z&&T!==false:X==="!="?Z!=U:X==="^="?Z.indexOf(U)===0:X==="$="?Z.substr(Z.length-U.length)===U:X==="|="?Z===U||Z.substr(0,U.length+1)===U+"-":false},POS:function(X,U,V,Y){var T=U[2],W=I.setFilters[T];if(W){return W(X,V,U,Y)}}}};var M=I.match.POS;for(var O in I.match){I.match[O]=RegExp(I.match[O].source+/(?![^\[]*\])(?![^\(]*\))/.source)}var E=function(U,T){U=Array.prototype.slice.call(U);if(T){T.push.apply(T,U);return T}return U};try{Array.prototype.slice.call(document.documentElement.childNodes)}catch(N){E=function(X,W){var U=W||[];if(H.call(X)==="[object Array]"){Array.prototype.push.apply(U,X)}else{if(typeof X.length==="number"){for(var V=0,T=X.length;V";var T=document.documentElement;T.insertBefore(U,T.firstChild);if(!!document.getElementById(V)){I.find.ID=function(X,Y,Z){if(typeof Y.getElementById!=="undefined"&&!Z){var W=Y.getElementById(X[1]);return W?W.id===X[1]||typeof W.getAttributeNode!=="undefined"&&W.getAttributeNode("id").nodeValue===X[1]?[W]:g:[]}};I.filter.ID=function(Y,W){var X=typeof Y.getAttributeNode!=="undefined"&&Y.getAttributeNode("id");return Y.nodeType===1&&X&&X.nodeValue===W}}T.removeChild(U)})();(function(){var T=document.createElement("div");T.appendChild(document.createComment(""));if(T.getElementsByTagName("*").length>0){I.find.TAG=function(U,Y){var X=Y.getElementsByTagName(U[1]);if(U[1]==="*"){var W=[];for(var V=0;X[V];V++){if(X[V].nodeType===1){W.push(X[V])}}X=W}return X}}T.innerHTML="";if(T.firstChild&&typeof T.firstChild.getAttribute!=="undefined"&&T.firstChild.getAttribute("href")!=="#"){I.attrHandle.href=function(U){return U.getAttribute("href",2)}}})();if(document.querySelectorAll){(function(){var T=F,U=document.createElement("div");U.innerHTML="

    ";if(U.querySelectorAll&&U.querySelectorAll(".TEST").length===0){return}F=function(Y,X,V,W){X=X||document;if(!W&&X.nodeType===9&&!Q(X)){try{return E(X.querySelectorAll(Y),V)}catch(Z){}}return T(Y,X,V,W)};F.find=T.find;F.filter=T.filter;F.selectors=T.selectors;F.matches=T.matches})()}if(document.getElementsByClassName&&document.documentElement.getElementsByClassName){(function(){var T=document.createElement("div");T.innerHTML="
    ";if(T.getElementsByClassName("e").length===0){return}T.lastChild.className="e";if(T.getElementsByClassName("e").length===1){return}I.order.splice(1,0,"CLASS");I.find.CLASS=function(U,V,W){if(typeof V.getElementsByClassName!=="undefined"&&!W){return V.getElementsByClassName(U[1])}}})()}function P(U,Z,Y,ad,aa,ac){var ab=U=="previousSibling"&&!ac;for(var W=0,V=ad.length;W0){X=T;break}}}T=T[U]}ad[W]=X}}}var K=document.compareDocumentPosition?function(U,T){return U.compareDocumentPosition(T)&16}:function(U,T){return U!==T&&(U.contains?U.contains(T):true)};var Q=function(T){return T.nodeType===9&&T.documentElement.nodeName!=="HTML"||!!T.ownerDocument&&Q(T.ownerDocument)};var J=function(T,aa){var W=[],X="",Y,V=aa.nodeType?[aa]:aa;while((Y=I.match.PSEUDO.exec(T))){X+=Y[0];T=T.replace(I.match.PSEUDO,"")}T=I.relative[T]?T+"*":T;for(var Z=0,U=V.length;Z0||T.offsetHeight>0};F.selectors.filters.animated=function(T){return o.grep(o.timers,function(U){return T===U.elem}).length};o.multiFilter=function(V,T,U){if(U){V=":not("+V+")"}return F.matches(V,T)};o.dir=function(V,U){var T=[],W=V[U];while(W&&W!=document){if(W.nodeType==1){T.push(W)}W=W[U]}return T};o.nth=function(X,T,V,W){T=T||1;var U=0;for(;X;X=X[V]){if(X.nodeType==1&&++U==T){break}}return X};o.sibling=function(V,U){var T=[];for(;V;V=V.nextSibling){if(V.nodeType==1&&V!=U){T.push(V)}}return T};return;l.Sizzle=F})();o.event={add:function(I,F,H,K){if(I.nodeType==3||I.nodeType==8){return}if(I.setInterval&&I!=l){I=l}if(!H.guid){H.guid=this.guid++}if(K!==g){var G=H;H=this.proxy(G);H.data=K}var E=o.data(I,"events")||o.data(I,"events",{}),J=o.data(I,"handle")||o.data(I,"handle",function(){return typeof o!=="undefined"&&!o.event.triggered?o.event.handle.apply(arguments.callee.elem,arguments):g});J.elem=I;o.each(F.split(/\s+/),function(M,N){var O=N.split(".");N=O.shift();H.type=O.slice().sort().join(".");var L=E[N];if(o.event.specialAll[N]){o.event.specialAll[N].setup.call(I,K,O)}if(!L){L=E[N]={};if(!o.event.special[N]||o.event.special[N].setup.call(I,K,O)===false){if(I.addEventListener){I.addEventListener(N,J,false)}else{if(I.attachEvent){I.attachEvent("on"+N,J)}}}}L[H.guid]=H;o.event.global[N]=true});I=null},guid:1,global:{},remove:function(K,H,J){if(K.nodeType==3||K.nodeType==8){return}var G=o.data(K,"events"),F,E;if(G){if(H===g||(typeof H==="string"&&H.charAt(0)==".")){for(var I in G){this.remove(K,I+(H||""))}}else{if(H.type){J=H.handler;H=H.type}o.each(H.split(/\s+/),function(M,O){var Q=O.split(".");O=Q.shift();var N=RegExp("(^|\\.)"+Q.slice().sort().join(".*\\.")+"(\\.|$)");if(G[O]){if(J){delete G[O][J.guid]}else{for(var P in G[O]){if(N.test(G[O][P].type)){delete G[O][P]}}}if(o.event.specialAll[O]){o.event.specialAll[O].teardown.call(K,Q)}for(F in G[O]){break}if(!F){if(!o.event.special[O]||o.event.special[O].teardown.call(K,Q)===false){if(K.removeEventListener){K.removeEventListener(O,o.data(K,"handle"),false)}else{if(K.detachEvent){K.detachEvent("on"+O,o.data(K,"handle"))}}}F=null;delete G[O]}}})}for(F in G){break}if(!F){var L=o.data(K,"handle");if(L){L.elem=null}o.removeData(K,"events");o.removeData(K,"handle")}}},trigger:function(I,K,H,E){var G=I.type||I;if(!E){I=typeof I==="object"?I[h]?I:o.extend(o.Event(G),I):o.Event(G);if(G.indexOf("!")>=0){I.type=G=G.slice(0,-1);I.exclusive=true}if(!H){I.stopPropagation();if(this.global[G]){o.each(o.cache,function(){if(this.events&&this.events[G]){o.event.trigger(I,K,this.handle.elem)}})}}if(!H||H.nodeType==3||H.nodeType==8){return g}I.result=g;I.target=H;K=o.makeArray(K);K.unshift(I)}I.currentTarget=H;var J=o.data(H,"handle");if(J){J.apply(H,K)}if((!H[G]||(o.nodeName(H,"a")&&G=="click"))&&H["on"+G]&&H["on"+G].apply(H,K)===false){I.result=false}if(!E&&H[G]&&!I.isDefaultPrevented()&&!(o.nodeName(H,"a")&&G=="click")){this.triggered=true;try{H[G]()}catch(L){}}this.triggered=false;if(!I.isPropagationStopped()){var F=H.parentNode||H.ownerDocument;if(F){o.event.trigger(I,K,F,true)}}},handle:function(K){var J,E;K=arguments[0]=o.event.fix(K||l.event);K.currentTarget=this;var L=K.type.split(".");K.type=L.shift();J=!L.length&&!K.exclusive;var I=RegExp("(^|\\.)"+L.slice().sort().join(".*\\.")+"(\\.|$)");E=(o.data(this,"events")||{})[K.type];for(var G in E){var H=E[G];if(J||I.test(H.type)){K.handler=H;K.data=H.data;var F=H.apply(this,arguments);if(F!==g){K.result=F;if(F===false){K.preventDefault();K.stopPropagation()}}if(K.isImmediatePropagationStopped()){break}}}},props:"altKey attrChange attrName bubbles button cancelable charCode clientX clientY ctrlKey currentTarget data detail eventPhase fromElement handler keyCode metaKey newValue originalTarget pageX pageY prevValue relatedNode relatedTarget screenX screenY shiftKey srcElement target toElement view wheelDelta which".split(" "),fix:function(H){if(H[h]){return H}var F=H;H=o.Event(F);for(var G=this.props.length,J;G;){J=this.props[--G];H[J]=F[J]}if(!H.target){H.target=H.srcElement||document}if(H.target.nodeType==3){H.target=H.target.parentNode}if(!H.relatedTarget&&H.fromElement){H.relatedTarget=H.fromElement==H.target?H.toElement:H.fromElement}if(H.pageX==null&&H.clientX!=null){var I=document.documentElement,E=document.body;H.pageX=H.clientX+(I&&I.scrollLeft||E&&E.scrollLeft||0)-(I.clientLeft||0);H.pageY=H.clientY+(I&&I.scrollTop||E&&E.scrollTop||0)-(I.clientTop||0)}if(!H.which&&((H.charCode||H.charCode===0)?H.charCode:H.keyCode)){H.which=H.charCode||H.keyCode}if(!H.metaKey&&H.ctrlKey){H.metaKey=H.ctrlKey}if(!H.which&&H.button){H.which=(H.button&1?1:(H.button&2?3:(H.button&4?2:0)))}return H},proxy:function(F,E){E=E||function(){return F.apply(this,arguments)};E.guid=F.guid=F.guid||E.guid||this.guid++;return E},special:{ready:{setup:B,teardown:function(){}}},specialAll:{live:{setup:function(E,F){o.event.add(this,F[0],c)},teardown:function(G){if(G.length){var E=0,F=RegExp("(^|\\.)"+G[0]+"(\\.|$)");o.each((o.data(this,"events").live||{}),function(){if(F.test(this.type)){E++}});if(E<1){o.event.remove(this,G[0],c)}}}}}};o.Event=function(E){if(!this.preventDefault){return new o.Event(E)}if(E&&E.type){this.originalEvent=E;this.type=E.type}else{this.type=E}this.timeStamp=e();this[h]=true};function k(){return false}function u(){return true}o.Event.prototype={preventDefault:function(){this.isDefaultPrevented=u;var E=this.originalEvent;if(!E){return}if(E.preventDefault){E.preventDefault()}E.returnValue=false},stopPropagation:function(){this.isPropagationStopped=u;var E=this.originalEvent;if(!E){return}if(E.stopPropagation){E.stopPropagation()}E.cancelBubble=true},stopImmediatePropagation:function(){this.isImmediatePropagationStopped=u;this.stopPropagation()},isDefaultPrevented:k,isPropagationStopped:k,isImmediatePropagationStopped:k};var a=function(F){var E=F.relatedTarget;while(E&&E!=this){try{E=E.parentNode}catch(G){E=this}}if(E!=this){F.type=F.data;o.event.handle.apply(this,arguments)}};o.each({mouseover:"mouseenter",mouseout:"mouseleave"},function(F,E){o.event.special[E]={setup:function(){o.event.add(this,F,a,E)},teardown:function(){o.event.remove(this,F,a)}}});o.fn.extend({bind:function(F,G,E){return F=="unload"?this.one(F,G,E):this.each(function(){o.event.add(this,F,E||G,E&&G)})},one:function(G,H,F){var E=o.event.proxy(F||H,function(I){o(this).unbind(I,E);return(F||H).apply(this,arguments)});return this.each(function(){o.event.add(this,G,E,F&&H)})},unbind:function(F,E){return this.each(function(){o.event.remove(this,F,E)})},trigger:function(E,F){return this.each(function(){o.event.trigger(E,F,this)})},triggerHandler:function(E,G){if(this[0]){var F=o.Event(E);F.preventDefault();F.stopPropagation();o.event.trigger(F,G,this[0]);return F.result}},toggle:function(G){var E=arguments,F=1;while(F=0){var E=G.slice(I,G.length);G=G.slice(0,I)}var H="GET";if(J){if(o.isFunction(J)){K=J;J=null}else{if(typeof J==="object"){J=o.param(J);H="POST"}}}var F=this;o.ajax({url:G,type:H,dataType:"html",data:J,complete:function(M,L){if(L=="success"||L=="notmodified"){F.html(E?o("
    ").append(M.responseText.replace(//g,"")).find(E):M.responseText)}if(K){F.each(K,[M.responseText,L,M])}}});return this},serialize:function(){return o.param(this.serializeArray())},serializeArray:function(){return this.map(function(){return this.elements?o.makeArray(this.elements):this}).filter(function(){return this.name&&!this.disabled&&(this.checked||/select|textarea/i.test(this.nodeName)||/text|hidden|password|search/i.test(this.type))}).map(function(E,F){var G=o(this).val();return G==null?null:o.isArray(G)?o.map(G,function(I,H){return{name:F.name,value:I}}):{name:F.name,value:G}}).get()}});o.each("ajaxStart,ajaxStop,ajaxComplete,ajaxError,ajaxSuccess,ajaxSend".split(","),function(E,F){o.fn[F]=function(G){return this.bind(F,G)}});var r=e();o.extend({get:function(E,G,H,F){if(o.isFunction(G)){H=G;G=null}return o.ajax({type:"GET",url:E,data:G,success:H,dataType:F})},getScript:function(E,F){return o.get(E,null,F,"script")},getJSON:function(E,F,G){return o.get(E,F,G,"json")},post:function(E,G,H,F){if(o.isFunction(G)){H=G;G={}}return o.ajax({type:"POST",url:E,data:G,success:H,dataType:F})},ajaxSetup:function(E){o.extend(o.ajaxSettings,E)},ajaxSettings:{url:location.href,global:true,type:"GET",contentType:"application/x-www-form-urlencoded",processData:true,async:true,xhr:function(){return l.ActiveXObject?new ActiveXObject("Microsoft.XMLHTTP"):new XMLHttpRequest()},accepts:{xml:"application/xml, text/xml",html:"text/html",script:"text/javascript, application/javascript",json:"application/json, text/javascript",text:"text/plain",_default:"*/*"}},lastModified:{},ajax:function(M){M=o.extend(true,M,o.extend(true,{},o.ajaxSettings,M));var W,F=/=\?(&|$)/g,R,V,G=M.type.toUpperCase();if(M.data&&M.processData&&typeof M.data!=="string"){M.data=o.param(M.data)}if(M.dataType=="jsonp"){if(G=="GET"){if(!M.url.match(F)){M.url+=(M.url.match(/\?/)?"&":"?")+(M.jsonp||"callback")+"=?"}}else{if(!M.data||!M.data.match(F)){M.data=(M.data?M.data+"&":"")+(M.jsonp||"callback")+"=?"}}M.dataType="json"}if(M.dataType=="json"&&(M.data&&M.data.match(F)||M.url.match(F))){W="jsonp"+r++;if(M.data){M.data=(M.data+"").replace(F,"="+W+"$1")}M.url=M.url.replace(F,"="+W+"$1");M.dataType="script";l[W]=function(X){V=X;I();L();l[W]=g;try{delete l[W]}catch(Y){}if(H){H.removeChild(T)}}}if(M.dataType=="script"&&M.cache==null){M.cache=false}if(M.cache===false&&G=="GET"){var E=e();var U=M.url.replace(/(\?|&)_=.*?(&|$)/,"$1_="+E+"$2");M.url=U+((U==M.url)?(M.url.match(/\?/)?"&":"?")+"_="+E:"")}if(M.data&&G=="GET"){M.url+=(M.url.match(/\?/)?"&":"?")+M.data;M.data=null}if(M.global&&!o.active++){o.event.trigger("ajaxStart")}var Q=/^(\w+:)?\/\/([^\/?#]+)/.exec(M.url);if(M.dataType=="script"&&G=="GET"&&Q&&(Q[1]&&Q[1]!=location.protocol||Q[2]!=location.host)){var H=document.getElementsByTagName("head")[0];var T=document.createElement("script");T.src=M.url;if(M.scriptCharset){T.charset=M.scriptCharset}if(!W){var O=false;T.onload=T.onreadystatechange=function(){if(!O&&(!this.readyState||this.readyState=="loaded"||this.readyState=="complete")){O=true;I();L();T.onload=T.onreadystatechange=null;H.removeChild(T)}}}H.appendChild(T);return g}var K=false;var J=M.xhr();if(M.username){J.open(G,M.url,M.async,M.username,M.password)}else{J.open(G,M.url,M.async)}try{if(M.data){J.setRequestHeader("Content-Type",M.contentType)}if(M.ifModified){J.setRequestHeader("If-Modified-Since",o.lastModified[M.url]||"Thu, 01 Jan 1970 00:00:00 GMT")}J.setRequestHeader("X-Requested-With","XMLHttpRequest");J.setRequestHeader("Accept",M.dataType&&M.accepts[M.dataType]?M.accepts[M.dataType]+", */*":M.accepts._default)}catch(S){}if(M.beforeSend&&M.beforeSend(J,M)===false){if(M.global&&!--o.active){o.event.trigger("ajaxStop")}J.abort();return false}if(M.global){o.event.trigger("ajaxSend",[J,M])}var N=function(X){if(J.readyState==0){if(P){clearInterval(P);P=null;if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}}else{if(!K&&J&&(J.readyState==4||X=="timeout")){K=true;if(P){clearInterval(P);P=null}R=X=="timeout"?"timeout":!o.httpSuccess(J)?"error":M.ifModified&&o.httpNotModified(J,M.url)?"notmodified":"success";if(R=="success"){try{V=o.httpData(J,M.dataType,M)}catch(Z){R="parsererror"}}if(R=="success"){var Y;try{Y=J.getResponseHeader("Last-Modified")}catch(Z){}if(M.ifModified&&Y){o.lastModified[M.url]=Y}if(!W){I()}}else{o.handleError(M,J,R)}L();if(X){J.abort()}if(M.async){J=null}}}};if(M.async){var P=setInterval(N,13);if(M.timeout>0){setTimeout(function(){if(J&&!K){N("timeout")}},M.timeout)}}try{J.send(M.data)}catch(S){o.handleError(M,J,null,S)}if(!M.async){N()}function I(){if(M.success){M.success(V,R)}if(M.global){o.event.trigger("ajaxSuccess",[J,M])}}function L(){if(M.complete){M.complete(J,R)}if(M.global){o.event.trigger("ajaxComplete",[J,M])}if(M.global&&!--o.active){o.event.trigger("ajaxStop")}}return J},handleError:function(F,H,E,G){if(F.error){F.error(H,E,G)}if(F.global){o.event.trigger("ajaxError",[H,F,G])}},active:0,httpSuccess:function(F){try{return !F.status&&location.protocol=="file:"||(F.status>=200&&F.status<300)||F.status==304||F.status==1223}catch(E){}return false},httpNotModified:function(G,E){try{var H=G.getResponseHeader("Last-Modified");return G.status==304||H==o.lastModified[E]}catch(F){}return false},httpData:function(J,H,G){var F=J.getResponseHeader("content-type"),E=H=="xml"||!H&&F&&F.indexOf("xml")>=0,I=E?J.responseXML:J.responseText;if(E&&I.documentElement.tagName=="parsererror"){throw"parsererror"}if(G&&G.dataFilter){I=G.dataFilter(I,H)}if(typeof I==="string"){if(H=="script"){o.globalEval(I)}if(H=="json"){I=l["eval"]("("+I+")")}}return I},param:function(E){var G=[];function H(I,J){G[G.length]=encodeURIComponent(I)+"="+encodeURIComponent(J)}if(o.isArray(E)||E.jquery){o.each(E,function(){H(this.name,this.value)})}else{for(var F in E){if(o.isArray(E[F])){o.each(E[F],function(){H(F,this)})}else{H(F,o.isFunction(E[F])?E[F]():E[F])}}}return G.join("&").replace(/%20/g,"+")}});var m={},n,d=[["height","marginTop","marginBottom","paddingTop","paddingBottom"],["width","marginLeft","marginRight","paddingLeft","paddingRight"],["opacity"]];function t(F,E){var G={};o.each(d.concat.apply([],d.slice(0,E)),function(){G[this]=F});return G}o.fn.extend({show:function(J,L){if(J){return this.animate(t("show",3),J,L)}else{for(var H=0,F=this.length;H").appendTo("body");K=I.css("display");if(K==="none"){K="block"}I.remove();m[G]=K}o.data(this[H],"olddisplay",K)}}for(var H=0,F=this.length;H=0;H--){if(G[H].elem==this){if(E){G[H](true)}G.splice(H,1)}}});if(!E){this.dequeue()}return this}});o.each({slideDown:t("show",1),slideUp:t("hide",1),slideToggle:t("toggle",1),fadeIn:{opacity:"show"},fadeOut:{opacity:"hide"}},function(E,F){o.fn[E]=function(G,H){return this.animate(F,G,H)}});o.extend({speed:function(G,H,F){var E=typeof G==="object"?G:{complete:F||!F&&H||o.isFunction(G)&&G,duration:G,easing:F&&H||H&&!o.isFunction(H)&&H};E.duration=o.fx.off?0:typeof E.duration==="number"?E.duration:o.fx.speeds[E.duration]||o.fx.speeds._default;E.old=E.complete;E.complete=function(){if(E.queue!==false){o(this).dequeue()}if(o.isFunction(E.old)){E.old.call(this)}};return E},easing:{linear:function(G,H,E,F){return E+F*G},swing:function(G,H,E,F){return((-Math.cos(G*Math.PI)/2)+0.5)*F+E}},timers:[],fx:function(F,E,G){this.options=E;this.elem=F;this.prop=G;if(!E.orig){E.orig={}}}});o.fx.prototype={update:function(){if(this.options.step){this.options.step.call(this.elem,this.now,this)}(o.fx.step[this.prop]||o.fx.step._default)(this);if((this.prop=="height"||this.prop=="width")&&this.elem.style){this.elem.style.display="block"}},cur:function(F){if(this.elem[this.prop]!=null&&(!this.elem.style||this.elem.style[this.prop]==null)){return this.elem[this.prop]}var E=parseFloat(o.css(this.elem,this.prop,F));return E&&E>-10000?E:parseFloat(o.curCSS(this.elem,this.prop))||0},custom:function(I,H,G){this.startTime=e();this.start=I;this.end=H;this.unit=G||this.unit||"px";this.now=this.start;this.pos=this.state=0;var E=this;function F(J){return E.step(J)}F.elem=this.elem;if(F()&&o.timers.push(F)&&!n){n=setInterval(function(){var K=o.timers;for(var J=0;J=this.options.duration+this.startTime){this.now=this.end;this.pos=this.state=1;this.update();this.options.curAnim[this.prop]=true;var E=true;for(var F in this.options.curAnim){if(this.options.curAnim[F]!==true){E=false}}if(E){if(this.options.display!=null){this.elem.style.overflow=this.options.overflow;this.elem.style.display=this.options.display;if(o.css(this.elem,"display")=="none"){this.elem.style.display="block"}}if(this.options.hide){o(this.elem).hide()}if(this.options.hide||this.options.show){for(var I in this.options.curAnim){o.attr(this.elem.style,I,this.options.orig[I])}}this.options.complete.call(this.elem)}return false}else{var J=G-this.startTime;this.state=J/this.options.duration;this.pos=o.easing[this.options.easing||(o.easing.swing?"swing":"linear")](this.state,J,0,1,this.options.duration);this.now=this.start+((this.end-this.start)*this.pos);this.update()}return true}};o.extend(o.fx,{speeds:{slow:600,fast:200,_default:400},step:{opacity:function(E){o.attr(E.elem.style,"opacity",E.now)},_default:function(E){if(E.elem.style&&E.elem.style[E.prop]!=null){E.elem.style[E.prop]=E.now+E.unit}else{E.elem[E.prop]=E.now}}}});if(document.documentElement.getBoundingClientRect){o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}var G=this[0].getBoundingClientRect(),J=this[0].ownerDocument,F=J.body,E=J.documentElement,L=E.clientTop||F.clientTop||0,K=E.clientLeft||F.clientLeft||0,I=G.top+(self.pageYOffset||o.boxModel&&E.scrollTop||F.scrollTop)-L,H=G.left+(self.pageXOffset||o.boxModel&&E.scrollLeft||F.scrollLeft)-K;return{top:I,left:H}}}else{o.fn.offset=function(){if(!this[0]){return{top:0,left:0}}if(this[0]===this[0].ownerDocument.body){return o.offset.bodyOffset(this[0])}o.offset.initialized||o.offset.initialize();var J=this[0],G=J.offsetParent,F=J,O=J.ownerDocument,M,H=O.documentElement,K=O.body,L=O.defaultView,E=L.getComputedStyle(J,null),N=J.offsetTop,I=J.offsetLeft;while((J=J.parentNode)&&J!==K&&J!==H){M=L.getComputedStyle(J,null);N-=J.scrollTop,I-=J.scrollLeft;if(J===G){N+=J.offsetTop,I+=J.offsetLeft;if(o.offset.doesNotAddBorder&&!(o.offset.doesAddBorderForTableAndCells&&/^t(able|d|h)$/i.test(J.tagName))){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}F=G,G=J.offsetParent}if(o.offset.subtractsBorderForOverflowNotVisible&&M.overflow!=="visible"){N+=parseInt(M.borderTopWidth,10)||0,I+=parseInt(M.borderLeftWidth,10)||0}E=M}if(E.position==="relative"||E.position==="static"){N+=K.offsetTop,I+=K.offsetLeft}if(E.position==="fixed"){N+=Math.max(H.scrollTop,K.scrollTop),I+=Math.max(H.scrollLeft,K.scrollLeft)}return{top:N,left:I}}}o.offset={initialize:function(){if(this.initialized){return}var L=document.body,F=document.createElement("div"),H,G,N,I,M,E,J=L.style.marginTop,K='
    ';M={position:"absolute",top:0,left:0,margin:0,border:0,width:"1px",height:"1px",visibility:"hidden"};for(E in M){F.style[E]=M[E]}F.innerHTML=K;L.insertBefore(F,L.firstChild);H=F.firstChild,G=H.firstChild,I=H.nextSibling.firstChild.firstChild;this.doesNotAddBorder=(G.offsetTop!==5);this.doesAddBorderForTableAndCells=(I.offsetTop===5);H.style.overflow="hidden",H.style.position="relative";this.subtractsBorderForOverflowNotVisible=(G.offsetTop===-5);L.style.marginTop="1px";this.doesNotIncludeMarginInBodyOffset=(L.offsetTop===0);L.style.marginTop=J;L.removeChild(F);this.initialized=true},bodyOffset:function(E){o.offset.initialized||o.offset.initialize();var G=E.offsetTop,F=E.offsetLeft;if(o.offset.doesNotIncludeMarginInBodyOffset){G+=parseInt(o.curCSS(E,"marginTop",true),10)||0,F+=parseInt(o.curCSS(E,"marginLeft",true),10)||0}return{top:G,left:F}}};o.fn.extend({position:function(){var I=0,H=0,F;if(this[0]){var G=this.offsetParent(),J=this.offset(),E=/^body|html$/i.test(G[0].tagName)?{top:0,left:0}:G.offset();J.top-=j(this,"marginTop");J.left-=j(this,"marginLeft");E.top+=j(G,"borderTopWidth");E.left+=j(G,"borderLeftWidth");F={top:J.top-E.top,left:J.left-E.left}}return F},offsetParent:function(){var E=this[0].offsetParent||document.body;while(E&&(!/^body|html$/i.test(E.tagName)&&o.css(E,"position")=="static")){E=E.offsetParent}return o(E)}});o.each(["Left","Top"],function(F,E){var G="scroll"+E;o.fn[G]=function(H){if(!this[0]){return null}return H!==g?this.each(function(){this==l||this==document?l.scrollTo(!F?H:o(l).scrollLeft(),F?H:o(l).scrollTop()):this[G]=H}):this[0]==l||this[0]==document?self[F?"pageYOffset":"pageXOffset"]||o.boxModel&&document.documentElement[G]||document.body[G]:this[0][G]}});o.each(["Height","Width"],function(I,G){var E=I?"Left":"Top",H=I?"Right":"Bottom",F=G.toLowerCase();o.fn["inner"+G]=function(){return this[0]?o.css(this[0],F,false,"padding"):null};o.fn["outer"+G]=function(K){return this[0]?o.css(this[0],F,false,K?"margin":"border"):null};var J=G.toLowerCase();o.fn[J]=function(K){return this[0]==l?document.compatMode=="CSS1Compat"&&document.documentElement["client"+G]||document.body["client"+G]:this[0]==document?Math.max(document.documentElement["client"+G],document.body["scroll"+G],document.documentElement["scroll"+G],document.body["offset"+G],document.documentElement["offset"+G]):K===g?(this.length?o.css(this[0],J):null):this.css(J,typeof K==="string"?K:K+"px")}})})(); \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/script/jquery.livequery.js b/plugins/JP_TC_PluginForTwitter/script/jquery.livequery.js new file mode 100644 index 000000000..328a63a6b --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/script/jquery.livequery.js @@ -0,0 +1,226 @@ +/*! Copyright (c) 2009 Brandon Aaron (http://brandonaaron.net) + * Dual licensed under the MIT (http://www.opensource.org/licenses/mit-license.php) + * and GPL (http://www.opensource.org/licenses/gpl-license.php) licenses. + * + * Version: 1.1.0-pre + * Requires jQuery 1.3+ + * Docs: http://docs.jquery.com/Plugins/livequery + */ + +(function($) { + +$.extend($.fn, { + livequery: function(type, fn, fn2) { + var self = this, q; + + // Handle different call patterns + if ($.isFunction(type)) + fn2 = fn, fn = type, type = undefined; + + // See if Live Query already exists + $.each( $.livequery.queries, function(i, query) { + if ( self.selector == query.selector && self.context == query.context && + type == query.type && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) ) + // Found the query, exit the each loop + return (q = query) && false; + }); + + // Create new Live Query if it wasn't found + q = q || new $.livequery(this.selector, this.context, type, fn, fn2); + + // Make sure it is running + q.stopped = false; + + // Run it immediately for the first time + q.run(); + + // Contnue the chain + return this; + }, + + expire: function(type, fn, fn2) { + var self = this; + + // Handle different call patterns + if ($.isFunction(type)) + fn2 = fn, fn = type, type = undefined; + + // Find the Live Query based on arguments and stop it + $.each( $.livequery.queries, function(i, query) { + if ( self.selector == query.selector && self.context == query.context && + (!type || type == query.type) && (!fn || fn.$lqguid == query.fn.$lqguid) && (!fn2 || fn2.$lqguid == query.fn2.$lqguid) && !this.stopped ) + $.livequery.stop(query.id); + }); + + // Continue the chain + return this; + } +}); + +$.livequery = function(selector, context, type, fn, fn2) { + this.selector = selector; + this.context = context; + this.type = type; + this.fn = fn; + this.fn2 = fn2; + this.elements = []; + this.stopped = false; + + // The id is the index of the Live Query in $.livequery.queries + this.id = $.livequery.queries.push(this)-1; + + // Mark the functions for matching later on + fn.$lqguid = fn.$lqguid || $.livequery.guid++; + if (fn2) fn2.$lqguid = fn2.$lqguid || $.livequery.guid++; + + // Return the Live Query + return this; +}; + +$.livequery.prototype = { + stop: function() { + var query = this; + + if ( this.type ) + // Unbind all bound events + this.elements.unbind(this.type, this.fn); + else if (this.fn2) + // Call the second function for all matched elements + this.elements.each(function(i, el) { + query.fn2.apply(el); + }); + + // Clear out matched elements + this.elements = []; + + // Stop the Live Query from running until restarted + this.stopped = true; + }, + + run: function() { + // Short-circuit if stopped + if ( this.stopped ) return; + var query = this; + + var oEls = this.elements, + els = $(this.selector, this.context), + nEls = els.not(oEls); + + // Set elements to the latest set of matched elements + this.elements = els; + + if (this.type) { + // Bind events to newly matched elements + nEls.bind(this.type, this.fn); + + // Unbind events to elements no longer matched + if (oEls.length > 0) + $.each(oEls, function(i, el) { + if ( $.inArray(el, els) < 0 ) + $.event.remove(el, query.type, query.fn); + }); + } + else { + // Call the first function for newly matched elements + nEls.each(function() { + query.fn.apply(this); + }); + + // Call the second function for elements no longer matched + if ( this.fn2 && oEls.length > 0 ) + $.each(oEls, function(i, el) { + if ( $.inArray(el, els) < 0 ) + query.fn2.apply(el); + }); + } + } +}; + +$.extend($.livequery, { + guid: 0, + queries: [], + queue: [], + running: false, + timeout: null, + + checkQueue: function() { + if ( $.livequery.running && $.livequery.queue.length ) { + var length = $.livequery.queue.length; + // Run each Live Query currently in the queue + while ( length-- ) + $.livequery.queries[ $.livequery.queue.shift() ].run(); + } + }, + + pause: function() { + // Don't run anymore Live Queries until restarted + $.livequery.running = false; + }, + + play: function() { + // Restart Live Queries + $.livequery.running = true; + // Request a run of the Live Queries + $.livequery.run(); + }, + + registerPlugin: function() { + $.each( arguments, function(i,n) { + // Short-circuit if the method doesn't exist + if (!$.fn[n]) return; + + // Save a reference to the original method + var old = $.fn[n]; + + // Create a new method + $.fn[n] = function() { + // Call the original method + var r = old.apply(this, arguments); + + // Request a run of the Live Queries + $.livequery.run(); + + // Return the original methods result + return r; + } + }); + }, + + run: function(id) { + if (id != undefined) { + // Put the particular Live Query in the queue if it doesn't already exist + if ( $.inArray(id, $.livequery.queue) < 0 ) + $.livequery.queue.push( id ); + } + else + // Put each Live Query in the queue if it doesn't already exist + $.each( $.livequery.queries, function(id) { + if ( $.inArray(id, $.livequery.queue) < 0 ) + $.livequery.queue.push( id ); + }); + + // Clear timeout if it already exists + if ($.livequery.timeout) clearTimeout($.livequery.timeout); + // Create a timeout to check the queue and actually run the Live Queries + $.livequery.timeout = setTimeout($.livequery.checkQueue, 20); + }, + + stop: function(id) { + if (id != undefined) + // Stop are particular Live Query + $.livequery.queries[ id ].stop(); + else + // Stop all Live Queries + $.each( $.livequery.queries, function(id) { + $.livequery.queries[ id ].stop(); + }); + } +}); + +// Register core DOM manipulation methods +$.livequery.registerPlugin('append', 'prepend', 'after', 'before', 'wrap', 'attr', 'removeAttr', 'addClass', 'removeClass', 'toggleClass', 'empty', 'remove'); + +// Run Live Queries when the Document is ready +$(function() { $.livequery.play(); }); + +})(jQuery); \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/script/jquery.preview.text.js b/plugins/JP_TC_PluginForTwitter/script/jquery.preview.text.js new file mode 100644 index 000000000..807d377a0 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/script/jquery.preview.text.js @@ -0,0 +1,111 @@ +/** + * + * Copyright (c) 2007 Tom Deater (http://www.tomdeater.com) + * Licensed under the MIT License: + * http://www.opensource.org/licenses/mit-license.php + * + */ + + + +(function($) { + $.fn.charCounter = function (max, settings) { + max = max || 100; + settings = $.extend({ + container: "", + classname: "charcounter", + format: "(%1 characters remaining)", + format2: "(%1 characters overflow)", + pulse: false, + delay: 0 + }, settings); + var p, timeout; + var convText = ''; + var tempText = ''; + var tempLength = ''; + var disabledChk = ''; + var temp = ''; + disabledChk = $('#disabledChk').attr('value'); + function count(el, container) { + el = $(el); + convText = el.val(); + if (settings.delay > 0) { + if (timeout) { + window.clearTimeout(timeout); + } + timeout = window.setTimeout(function () { + if (disabledChk == 'disabled') { + $('#textLength').html(settings.format.replace(/%1/, (max - 0))); + $('#link_button').attr('disabled','disabled').attr('className','tw_button_disabled'); + $('#update_button').attr('disabled','disabled').attr('className','tw_button_disabled'); + } else { + if (convText.length <= max) { + $('#textLength').html(settings.format.replace(/%1/, (max - convText.length))); + $('#update_button').attr('disabled','').attr('className','tw_button'); + if (viewMode == "full") { + if (nowmenu != "direct") { + if (temp = convText.match(/^\s*@(\w+)\W+/)) { + $('#update_button').val("답변하기"); + if (viewMode == "full") { + $('.doing').html("Reply to " + temp[1]); + } + } else { + $("#in_reply_to_status_id").val(''); + $('#update_button').val("전송하기"); + if (viewMode == "full") { + $('.doing').html("What are you doing?"); + } + } + } + } + } else { + $('#textLength').html(settings.format2.replace(/%1/, (convText.length - max))); + $('#update_button').attr('disabled','disabled').attr('className','tw_button_disabled'); + } + } + }, settings.delay); + } else { + $('#textLength').html(settings.format.replace(/%1/, (max - convText.length))); + $('#update_button').attr('disabled','').attr('className','tw_button'); + } + }; + + function pulse(el, again) { + if (p) { + window.clearTimeout(p); + p = null; + }; + el.animate({ opacity: 0.1 }, 100, function () { + $(this).animate({ opacity: 1.0 }, 100); + }); + if (again) { + p = window.setTimeout(function () { pulse(el) }, 200); + }; + }; + + return this.each(function () { + var container = (!settings.container.match(/^<.+>$/)) + ? $(settings.container) + : $(settings.container) + .insertAfter(this) + .addClass(settings.classname); + $(this) + .bind("keydown", function () { count(this, container); }) + .bind("keypress", function () { count(this, container); }) + .bind("keyup", function () { count(this, container); }) + .bind("focus", function () { count(this, container); }) + .bind("mouseover", function () { count(this, container); }) + .bind("mouseout", function () { count(this, container); }) + .bind("paste", function () { + var me = this; + setTimeout(function () { count(me, container); }, 10); + }); + if (this.addEventListener) { + this.addEventListener('input', function () { count(this, container); }, false); + }; + count(this, container); + }); + }; + +})(jQuery); + diff --git a/plugins/JP_TC_PluginForTwitter/script/twitter.js b/plugins/JP_TC_PluginForTwitter/script/twitter.js new file mode 100644 index 000000000..c448c057c --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/script/twitter.js @@ -0,0 +1,668 @@ +(function($) { + $(document).ready(function(){ + $("#update_body").one('focus',function(){}); + $("#update_body").charCounter(140, { + format: "%1자 남음", + format2: "%1자 초과", + pulse: false, + delay: 100 + }); + + $(".shortenURLCreate").isShortenURLCreate(); + $(".update_button_mini").isUpdatePostMini(); + + if (viewMode == "full") { + $("#update_button").isUpdatePost(); + $("#pagination #more").isMoreButton(); + + $("form#sidebar_search").isSearch(1); + $("#sidebar_search_submit").isSearch(2); + $(".saved_searches_list").isSavedSearches(); + + if (nowmenu == "search") { + $("#saved_link").isCreateDestroySavedSearches(); + } + + $(".meta_action .fav-action").isCreateDestroyfavorite(); + $(".meta_action .reply").isReply(); + $(".meta_action .retweet").isReTweet(); + + if (nowmenu == "friends" || nowmenu == "my") { + $(".meta_action .delete").isDestroyStatus(); + } + + if (nowmenu == "direct") { + isRecipientsListMake(); + $(".meta_action .message").isReply(); + $(".meta_action .delete").isDestroyMessage(); + } + + if (nowmenu == "following" || nowmenu == "followers") { + if (nowmenu == "followers") { + $(".meta_action .message").isDirectMessageGo(); + } + $(".meta_action .follow_act").isCreateDestroyFriendship(); + } + + } + }); + // update post mini + $.fn.isUpdatePostMini = function () { + var pThis = $(".submit_line"); + $(this).click(function () { + var update_body = $("#update_body"); + var ShortenURL = $("#ShortenURL"); + var update_body_rep = update_body.val().replace(/\r/ig, "").replace(/\n/ig, ""); + var reply_to = $("#in_reply_to_status_id").val(); + if (update_body_rep.length > 0) { + var requestData = {body : update_body_rep, reply_to : reply_to, menu : ''}; + var requestURL = blogURL + "/plugin/twitterPostUpdate/"; + var updateID = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + }, + success : function (resultXML) { + updateID = $(resultXML).find("id").text(); + if (updateID != "") { + PM.showMessage("트위터에 글을 전송했습니다.", "center", "bottom"); + update_body.val(""); + ShortenURL.val(""); + } else { + PM.showErrorMessage("트위터에 글을 전송하지 못했습니다. 다시 시도해주세요.", "center", "bottom"); + } + pThis.removeClass("loadingPost"); + }, + error : function () { + PM.showErrorMessage("트위터에 글을 전송하지 못했습니다. 다시 시도해주세요.", "center", "bottom"); + pThis.removeClass("loadingPost"); + } + }); + } else { + PM.showErrorMessage("전송할 글을 입력해주세요.", "center", "bottom"); + update_body.focus(); + } + return false; + }); + } + + // update post full + $.fn.isUpdatePost = function () { + return this.livequery(function () { + var pThis = $(".submit_line"); + $(this).click(function () { + var update_body = $("#update_body"); + var ShortenURL = $("#ShortenURL"); + var update_body_rep = update_body.val().replace(/\r/ig, "").replace(/\n/ig, ""); + if (nowmenu == "direct") { + var message_to = $("#direct_message_user_id"); + var message_to_text = $('#direct_message_user_id > option[value=' + message_to.val() + ']').text(); + var message_to_id = message_to.val(); + + if (message_to_id == "") { + PM.showErrorMessage("메세지 전송할 사용자를 선택해주세요.", "center", "bottom"); + message_to.focus(); + return false; + } + + if (update_body_rep.length > 0) { + var requestData = {text : update_body_rep, user : message_to_id, menu : nowmenu}; + var requestURL = blogURL + "/plugin/twitterNewMessage/"; + var errorMSG = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + pThis.addClass("loadingPost"); + }, + success : function (resultXML) { + errorMSG = $(resultXML).find("error").text(); + if (errorMSG == "0") { + PM.showMessage(message_to_text + "님에게 메세지를 전송했습니다.", "center", "bottom"); + if (seleteTab == "sent") { + $("#timeline").prepend($(resultXML).find("messageStatus").text()); + $(".updatePost").css({"opacity":"0.2"}).animate({opacity: 1.0}, "slow"); + + if ($("#timeline").find("li").length > listLength) { + $("#timeline").find("li:last").remove(); + } + } + update_body.val(""); + ShortenURL.val(""); + } else { + PM.showErrorMessage(message_to_text + "님에게 메세지 전송을 하지못했습니다. 다시 시도해주세요.", "center", "bottom"); + } + pThis.removeClass("loadingPost"); + }, + error : function () { + PM.showErrorMessage(message_to_text + "님에게 메세지 전송을 하지못했습니다. 다시 시도해주세요.", "center", "bottom"); + pThis.removeClass("loadingPost"); + } + }); + } else { + PM.showErrorMessage(message_to_text + "님에게 전송할 메세지를 입력해주세요.", "center", "bottom"); + update_body.focus(); + } + } else { + var reply_to = $("#in_reply_to_status_id").val(); + if (update_body_rep.length > 0) { + var requestData = {body : update_body_rep, reply_to : reply_to, menu : nowmenu}; + var requestURL = blogURL + "/plugin/twitterPostUpdate/"; + var updateID = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + pThis.addClass("loadingPost"); + }, + success : function (resultXML) { + updateID = $(resultXML).find("id").text(); + if (updateID != "") { + PM.showMessage("트위터에 글을 전송했습니다.", "center", "bottom"); + if (nowmenu == "friends" || nowmenu == "my") { + $("#timeline").prepend($(resultXML).find("updatedStatus").text()); + $(".updatePost").css({"opacity":"0.2"}).animate({opacity: 1.0}, "slow"); + + if ($("#timeline").find("li").length > listLength) { + $("#timeline").find("li:last").remove(); + } + } + update_body.val(""); + ShortenURL.val(""); + } else { + PM.showErrorMessage("트위터에 글을 전송하지 못했습니다. 다시 시도해주세요.", "center", "bottom"); + } + pThis.removeClass("loadingPost"); + }, + error : function () { + PM.showErrorMessage("트위터에 글을 전송하지 못했습니다. 다시 시도해주세요.", "center", "bottom"); + pThis.removeClass("loadingPost"); + } + }); + } else { + PM.showErrorMessage("전송할 글을 입력해주세요.", "center", "bottom"); + update_body.focus(); + } + } + return false; + }); + }); + } + + // Shorten URL Create + $.fn.isShortenURLCreate = function () { + var pThis = $(".shorten_line"); + var tThis = $(".shortenLink"); + $(this).click(function () { + if (tThis.val().length > 0) { + if (tThis.val().match(/((http|https|ftp):\/\/[\w?=&.\/-;#~%-]+(?![\w\s?&.\/;#~%"=-]*>))/ig)) { + var requestData = {link : tThis.val()}; + var requestURL = blogURL + "/plugin/shortenURLCreate/"; + var errorMSG = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + pThis.addClass("loadingLink"); + }, + success : function (resultXML) { + errorMSG = $(resultXML).find("error").text(); + if (errorMSG == "0") { + tThis.val($(resultXML).find("shortenURL").text()); + PM.showMessage("짧은 URL을 생성했습니다.", "center", "bottom"); + } else { + PM.showErrorMessage("짧은 URL을 생성하지 못했습니다. 다시 시도해주세요.", "center", "bottom"); + } + pThis.removeClass("loadingLink"); + }, + error : function () { + pThis.removeClass("loadingLink"); + PM.showErrorMessage("짧은 URL을 생성하지 못했습니다. 다시 시도해주세요.", "center", "bottom"); + } + }); + } else { + PM.showErrorMessage("링크 형태가 올바르지 못합니다. 다시 시도해주세요.
    -> " + tThis.val(), "center", "bottom"); + tThis.val(""); + tThis.focus(); + } + } else { + PM.showErrorMessage("짧은 URL을 생성할 링크를 입력해주세요.", "center", "bottom"); + tThis.focus(); + } + }); + } + + // more page + $.fn.isMoreButton = function () { + return this.livequery(function () { + $(this).click(function () { + $(this).blur(); + var requestURL = $(this).attr("href"); + var moreOffSet = $(this).offset().top; + $.ajax({ + type : "GET", url : requestURL, dataType : "xml", + beforeSend : function () { + $("#more").addClass("loading").html(""); + }, + success : function (resultXML) { + $("#timeline").append($(resultXML).find("morePaging").text()); + $("#pagination").html($(resultXML).find("pagination").text()); + }, + error : function () { + return false; + } + }); + return false; + }) + }) + } + + // search + $.fn.isSearch = function (key) { + return this.livequery(function () { + if (key == 1) { + $(this).keyup(function(event) { + if (event.keyCode == 13) { + var sq = $("#sidebar_search_q"); + var qstr = $.trim(sq.val()); + if (qstr.length < 1) { + PM.showErrorMessage("검색 키워드를 입력해주세요.", "center", "bottom"); + sq.val(''); + sq.focus(); + return false; + } else { + $(this).submit(); + } + } + }); + } else if (key == 2) { + $(this).click(function () { + $(this).blur(); + var sq = $("#sidebar_search_q"); + var qstr = $.trim(sq.val()); + if (qstr.length < 1) { + PM.showErrorMessage("검색 키워드를 입력해주세요.", "center", "bottom"); + sq.val(''); + sq.focus(); + return false; + } else { + $("form#sidebar_search")[0].submit(); + } + return false; + }); + } + }) + } + + // Saved Searches open or close + $.fn.isSavedSearches = function () { + return this.livequery(function () { + var sThis = $(this); + $(this).click(function () { + var sCHK = $(".saved_searches").hasClass("collapsed"); + var sFLAG = sCHK ? "open" : "close"; + var requestData = {openclose : sFLAG}; + var requestURL = blogURL + "/plugin/twitterSavedSearchesOpenClose/"; + var result = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + }, + success : function (resultXML) { + result = $(resultXML).find("savedSearchesView").text(); + if (result == 'close') { + $("#my_saved_searches").slideUp("fast"); + $(".saved_searches").addClass("collapsed"); + } else if (result == 'open') { + $("#my_saved_searches").slideDown("fast"); + $(".saved_searches").removeClass("collapsed"); + } + }, + error : function () { + return false; + } + }); + }) + }) + } + + // Saved Searches open or close + $.fn.isSavedSearchesAction = function (sFLAG) { + return this.livequery(function () { + var requestData = {openclose : sFLAG}; + var requestURL = blogURL + "/plugin/twitterSavedSearchesOpenClose/"; + var result = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + }, + success : function (resultXML) { + result = $(resultXML).find("savedSearchesView").text(); + if (result == 'close') { + $("#my_saved_searches").slideUp("fast"); + $(".saved_searches").addClass("collapsed"); + } else if (result == 'open') { + $("#my_saved_searches").slideDown("fast"); + $(".saved_searches").removeClass("collapsed"); + } + }, + error : function () { + return false; + } + }); + }) + } + + // Create or Destroy Saved Searches + $.fn.isCreateDestroySavedSearches = function () { + return this.livequery(function () { + var sThis = $(this); + var msThis = $("#my_saved_searches"); + var slThis = $("#searchLink"); + $(this).click(function () { + var sCHK = sThis.hasClass("saveSearchLink"); + var sFLAG = sCHK ? "Create" : "Destroy"; + var sData = sThis.attr((sCHK ? "title" : "rel")); + var requestData = {qdata : sData}; + var requestURL = blogURL + "/plugin/twitter" + sFLAG + "SavedSearches/"; + var errorMSG = ""; + var resultID = ""; + var resultQuery = ""; + var resultHtml = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + if (sFLAG == "Create") { + sThis.replaceWith('Save this search'); + } else { + sThis.replaceWith('Remove this saved search'); + } + }, + success : function (resultXML) { + errorMSG = $(resultXML).find("error").text(); + resultID = $(resultXML).find("savedID").text(); + resultQuery = $(resultXML).find("savedQuery").text(); + if (errorMSG == "0") { + if (sFLAG == "Create") { + slThis.html('Remove this saved search'); + resultHtml = '
  • '; + resultHtml += '' + resultQuery + ''; + resultHtml += '
  • '; + msThis.append(resultHtml); + if (msThis.css("display") === "none") { + msThis.isSavedSearchesAction('open'); + } + } else { + slThis.html('Save this search'); + $("#search_" + resultID).remove(); + } + } else { + PM.showErrorMessage("저장하지 못했습니다. 다시 시도해주세요.", "center", "bottom"); + + } + }, + error : function () { + return false; + } + }); + return false; + }) + }) + } + + // destroy status + $.fn.isDestroyStatus = function () { + return this.livequery(function () { + var sThis = $(this); + $(this).click(function () { + $(this).blur(); + var statusID = $(this).attr("rel"); + var requestData = {id : statusID}; + var requestURL = blogURL + "/plugin/twitterDestroyStatus/"; + var resultID = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + sThis.addClass("fav-throb"); + }, + success : function (resultXML) { + resultID = $(resultXML).find("statusID").text(); + if (resultID) { + $("#status_" + resultID).fadeOut("slow").remove(); + $(".statuses").find('li:first-child').addClass("li_first-child"); + } + }, + error : function () { + return false; + } + }); + return false; + }) + }) + } + + // create or destroy favorite + $.fn.isCreateDestroyfavorite = function () { + return this.livequery(function () { + var fThis = $(this); + fThis.click(function () { + fThis.blur(); + var fID = fThis.attr("id").replace(/favorite_/, ""); + var fCHK = fThis.hasClass("fav"); + var fFLAG = fCHK ? "Destroy" : "Create"; + var requestData = {id : fID}; + var requestURL = blogURL + "/plugin/twitter" + fFLAG + "Favorites/"; + var resultID = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + fThis.attr("title", "").removeClass(fCHK ? "fav" : "non-fav").addClass("fav-throb"); + }, + success : function (resultXML) { + resultID = $(resultXML).find("favoriteID").text(); + if (resultID) { + if (nowmenu == "favorites" && fFLAG == "Destroy") { + $("#status_" + fID).remove(); + } else { + fThis.attr("title", (fCHK ? "favorite" : "un-favorite") + " this update").removeClass("fav-throb").addClass(fCHK ? "non-fav" : "fav"); + } + } + }, + error : function () { + return false; + } + }); + return false; + }) + }) + } + + // Direct Message menu gogo~~ + $.fn.isDirectMessageGo = function () { + return this.livequery(function () { + $(this).click(function () { + $(this).blur(); + var user_id = $(this).attr("id").replace(/message_user_/, ""); + var menuURL = ""; + menuURL = pluginMenuURL; + menuURL += "&menu=direct&seleteTab=sent"; + menuURL += "&user_id=" + user_id; + window.location.href = menuURL; + return false; + }) + }) + } + + // Reply + $.fn.isReply = function () { + return this.livequery(function () { + $(this).click(function () { + $(this).blur(); + var replyName = $(this).attr("rel"); + var replyStatusID = $(this).attr("id").replace(/reply_/, ""); + if (nowmenu != "direct") { + var replyStr = "@" + replyName + " "; + $("#in_reply_to_status_id").val(replyStatusID); + $('#update_button').val("답변하기"); + $('.doing').html("Reply to " + replyName); + $("#update_body").val(replyStr); + } else { + var DMUID = $("#direct_message_user_id"); + if (!DMUID.find("option[text='" + replyName + "']").attr("selected", true).length) { + DMUID.append('") + } + $("#update_body").trigger("update"); + } + $("#update_body").focusEnd('end'); + window.scroll(0, 0); + return false; + }) + }) + } + + var isRecipientsListMake = function () { + var requestURL = blogURL + "/plugin/twitterRecipientsList/"; + $.ajax({ + type : "GET", url : requestURL, dataType : "json", + beforeSend : function () { + }, + success : function (jdata) { + if (jdata) { + var rOptions = []; + $.each(jdata, function () { + var user = this; + var selecteID = ""; + if ((user.length > 1) && user[0] && user[1]) { + if (puser_id == user[0]) { + selecteID = ' selected="selected" '; + } else { + selecteID = ''; + } + rOptions.push('"); + } + }); + $("#direct_message_user_id").html('' + rOptions.join("")) + } + }, + error : function () { + return false; + } + }); + } + + + // ReTweet + $.fn.isReTweet = function () { + return this.livequery(function () { + $(this).click(function () { + $(this).blur(); + var statusID = $(this).attr("id").replace(/retweet_/, ""); + var statusContent = $("#content_" + statusID).text(); + var acountName = $(".acount_name").text(); + var ReTweetName = $(this).attr("rel"); + var ReTweetContent = ""; + ReTweetContent = "RT @" + ReTweetName + ": "; + ReTweetContent += statusContent; + $("#update_body").val(ReTweetContent); + $("#update_body").focusEnd(3); + window.scroll(0, 0); + return false; + }) + }) + } + + // destroyis message + $.fn.isDestroyMessage = function () { + return this.livequery(function () { + var mThis = $(this); + $(this).click(function () { + $(this).blur(); + var DMID = $(this).attr("rel"); + var requestData = {id : DMID}; + var requestURL = blogURL + "/plugin/twitterDestroyMessage/"; + var resultID = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + mThis.addClass("fav-throb"); + }, + success : function (resultXML) { + resultID = $(resultXML).find("messageID").text(); + if (resultID) { + $("#status_" + resultID).fadeOut("slow"); + } + }, + error : function () { + return false; + } + }); + return false; + }) + }) + } + + // Create or Destroy Friendship + $.fn.isCreateDestroyFriendship = function () { + return this.livequery(function () { + var mThis = $(this); + $(this).click(function () { + $(this).blur(); + var userID = $(this).attr("id").replace(/following_/, "").replace(/followers_/, ""); + var fCHK = $(this).hasClass("unfollow"); + var fFLAG = fCHK ? "Destroy" : "Create"; + var requestData = {user_id : userID}; + var requestURL = blogURL + "/plugin/twitter" + fFLAG + "Friendship/"; + var resultID = ""; + var resultBool = ""; + var resultName = ""; + $.ajax({ + type : "POST", url : requestURL, dataType : "xml", data : requestData, + beforeSend : function () { + mThis.addClass("fav-throb"); + }, + success : function (resultXML) { + resultID = $(resultXML).find("id").text(); + resultName = $(resultXML).find("name").text(); + if (resultID && fFLAG == "Destroy") { + if (nowmenu == "following") { + $("#user_" + resultID).fadeOut("slow").remove(); + $(".statuses").find('li:first-child').addClass("li_first-child"); + } else if (nowmenu == "followers") { + $("#followingMSG_" + resultID).addClass("fhide"); + mThis.attr("title", "Follow " + resultName).removeClass("fav-throb").removeClass("unfollow").addClass("follow"); + } + } else if (resultID && fFLAG == "Create") { + mThis.attr("title", "Unfollow " + resultName).removeClass("fav-throb").removeClass("follow").addClass("unfollow"); + $("#followingMSG_" + resultID).removeClass("fhide").fadeIn("slow"); + } + }, + error : function () { + return false; + } + }); + return false; + }) + }) + } + + // focus end + $.fn.focusEnd = function (position) { + return this.each(function () { + var obj = this; + if (position == 'end') { + position = obj.value.length; + } + if (obj.style.display != "none") { + if ($.browser.msie) { + obj.focus(); + var selRange = obj.createTextRange(); + selRange.collapse(true); + selRange.moveStart("character", 0); + selRange.moveEnd("character", position); + selRange.collapse(false); + selRange.select() + } else { + obj.setSelectionRange(position, position); + obj.focus() + } + } + }) + }; +})(jQuery); \ No newline at end of file diff --git a/plugins/JP_TC_PluginForTwitter/style/twitter.css b/plugins/JP_TC_PluginForTwitter/style/twitter.css new file mode 100644 index 000000000..e88df9001 --- /dev/null +++ b/plugins/JP_TC_PluginForTwitter/style/twitter.css @@ -0,0 +1,37 @@ +#twUpdateForm textarea { + width:276px; + height:100px; + margin-bottom:2px; + border:1px solid #dedede; + overflow:auto; +} +#twUpdateForm .shortenLink { + width:190px; + border:1px solid #dedede; + margin-bottom:1px; +} +#twUpdateForm .tw_button { + border:1px solid #d7d7d7; + background-color:#eaeaea; + font-size:9pt; + height:18px; + color:#555555; + cursor:pointer; +} +#twUpdateForm .tw_button_disabled { + border:1px solid #d7d7d7; + background-color:#eaeaea; + font-size:9pt; + height:18px; + color:#aaa; + cursor:default; +} +#twUpdateForm .tw_button.textFree { + color:blue; +} +#twUpdateForm .tw_button.textOver { + color:red; +} +#twUpdateForm #submit { + margin-top:1px; +} \ No newline at end of file diff --git a/plugins/StatGraph/count/count.php b/plugins/StatGraph/count/count.php index e802ef505..7af6d3671 100644 --- a/plugins/StatGraph/count/count.php +++ b/plugins/StatGraph/count/count.php @@ -2,7 +2,28 @@ define('ROOT', '../../..'); -require ROOT . '/library/includeForIcon.php'; +require ROOT . '/library/include.icon.php'; + +foreach (new DirectoryIterator(ROOT.'/framework/boot') as $fileInfo) { + if($fileInfo->isFile()) require_once($fileInfo->getPathname()); +} +$context = Model_Context::getInstance(); +$config = Model_Config::getInstance(); + +if(!is_null($context->getProperty('database.database'))) { + $context->useNamespace('database'); + $db['database'] = $context->getProperty('database'); + $db['server'] = $context->getProperty('server'); + $db['port'] = $context->getProperty('port'); + $db['username'] = $context->getProperty('username'); + $db['password'] = $context->getProperty('password'); + $context->useNamespace(); + if(POD::bind($db) === false) { + Respond::MessagePage('Problem with connecting database.

    Please re-visit later.'); + exit; + } +} +$database['utf8'] = (POD::charset() == 'utf8') ? true : false; include ("src/jpgraph.php"); include ("src/jpgraph_scatter.php"); @@ -12,7 +33,6 @@ $blogid = intval($_REQUEST['blogid']); } -requireComponent('Eolin.PHP.Core'); requireComponent('Textcube.Model.Statistics'); $row = Statistics::getWeeklyStatistics(); diff --git a/plugins/StatGraph/index.xml b/plugins/StatGraph/index.xml index 6ceea8101..9004aad73 100644 --- a/plugins/StatGraph/index.xml +++ b/plugins/StatGraph/index.xml @@ -2,7 +2,7 @@ Graphic Statistics http://gendoh.com - 0.96 + 0.97 접속자 통계를 Graph로 표시합니다. [##_StatisticsGraph_##] 태그를 스킨에 삽입하거나 사이드바에서 추가하면 됩니다. @@ -10,7 +10,7 @@ - 1.7.9 + 1.8 diff --git a/resources/locale/blog/en.php b/resources/locale/blog/en.php index 48a230101..2cc72a128 100644 --- a/resources/locale/blog/en.php +++ b/resources/locale/blog/en.php @@ -33,20 +33,20 @@ $__text["관리자 권한이 없는 오픈아이디 입니다"] = 'This OpenID does not have administrative privileges'; -//$__text["관리자"] = ""; -//$__text["글관리"] = ""; +$__text["관리자"] = "Administrator"; +$__text["글관리"] = "Manage posts"; $__text["댓글"] = 'Comment'; $__text["댓글의 댓글"] = 'Comment of comment'; -//$__text["돌아가기"] = ""; +$__text["돌아가기"] = "Return"; $__text["방명록"] = 'Guestbook'; $__text["방명록의 댓글"] = 'Comment of guestbook'; //$__text["보기"] = ""; -//$__text["블로그 삭제"] = ""; -//$__text["블로그 삭제중"] = ""; -//$__text["새 블로그 생성"] = ""; -//$__text["새 사용자 등록"] = ""; -//$__text["소유자"] = ""; -//$__text["없음"] = ""; +$__text["블로그 삭제"] = "Delete blog"; +$__text["블로그 삭제중"] = "Deleting blog"; +$__text["새 블로그 생성"] = "Create new blog"; +$__text["새 사용자 등록"] = "Create new user"; +$__text["소유자"] = "Owner"; +$__text["없음"] = "No"; $__text["오픈아이디 인증이 실패하였습니다: "] = 'OpenID authentication failed.'; $__text["오픈아이디를 입력하세요"] = 'Please input OpenID'; $__text["오픈아이디에 도메인 부분이 없습니다. 예) textcube.idtail.com"] = 'Input the domain part of the OpenID. (ex. textcube.idtail.com)'; @@ -89,10 +89,7 @@ $__text['1개월 앞의 달력을 보여줍니다.'] = 'Shows calendar before 1 month.'; //$__text['

    텍스트큐브 사용을 환영합니다. 텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다. 강력한 글 관리와 편집 기능을 통하여 쉽고 빠르게 글을 작성하고 알릴 수 있습니다. 또한 통합된 소통 기능및 RSS 바깥글 읽기 기능을 통하여 다양한 사람들과 간단하게 의견을 주고 받을 수 있습니다.

    또한 텍스트큐브는 플러그인과 테마 시스템을 통하여 다양한 기능을 추가하거나 스킨을 바꾸고 편집할 수 있습니다. 뿐만 아니라 OpenID, microformat 지원 등의 기술적인 부분 및 다국어 지원을 포함한 강력한 저작 도구입니다.

    사용하며 도움말이 필요할 때는 관리자 메뉴의 우측 상단의 도우미 링크를 누르시면 도움말을 보실 수 있습니다. 기타 자세한 정보는 http://www.textcube.org 를 방문해서 확인하실 수 있습니다.

    이 글은 새 블로그에 자동으로 적힌 글입니다. 관리자 화면에서 언제든지 지우셔도 됩니다.

    '] = ''; //$__text['Action'] = ''; -//$__text['Comments does not exist'] = ''; -//$__text['Go to previous page'] = ''; //$__text['HTML'] = ''; -//$__text['Homepage'] = ''; //$__text['Line 추가에 실패했습니다.'] = ''; //$__text['Lines'] = ''; //$__text['Line이 추가되었습니다.'] = ''; @@ -121,13 +118,10 @@ //$__text['Microformat-warn: hAtom용 발행일을 추가하지 못하였습니다.'] = ''; //$__text['Microformat-warn: 작성자에 hAtom용 class="author"를 추가하지 못하였습니다'] = ''; //$__text['Microformat-warn: 제목에 hAtom용 title을 추가하지 못했습니다.'] = ''; -//$__text['Name'] = ''; //$__text['No handling plugin'] = ''; -//$__text['No trackback'] = ''; //$__text['OFF'] = ''; //$__text['ON'] = ''; //$__text['PHP 정보'] = ''; -//$__text['Password'] = ''; //$__text['Password:'] = ''; //$__text['Precondition Failed'] = ''; //$__text['Protected post!'] = ''; @@ -136,13 +130,6 @@ //$__text['RSS 주소를 숫자로 사용'] = ''; //$__text['Secret Comment'] = ''; //$__text['Server 정보'] = ''; -//$__text['Show comment'] = ''; -//$__text['Show front page'] = ''; -//$__text['Show next post'] = ''; -//$__text['Show posts'] = ''; -//$__text['Show previous post'] = ''; -//$__text['Show trackbacks'] = ''; -//$__text['Submit'] = ''; //$__text['Technically supported by %1'] = ''; //$__text['Textcube - Login'] = ''; //$__text['View Post'] = ''; @@ -157,6 +144,7 @@ $__text['걸린 글 보기'] = 'Show trackbacks'; //$__text['걸린 글'] = ''; $__text['걸린 글이 없습니다'] = 'No trackback'; +//$__text['검색'] = ''; //$__text['계속 진행 하시겠습니까?'] = ''; $__text['공개'] = 'Public'; $__text['공개로 변경합니다'] = 'Change to public'; @@ -179,6 +167,7 @@ $__text['그룹을 추가하세요.'] = 'Add group'; //$__text['글 목록'] = ''; $__text['글 보관함'] = 'Archive'; +//$__text['글 보기'] = ''; //$__text['글 쓰기'] = ''; //$__text['글 작성'] = ''; //$__text['글 작성시 태그나 지역로그를 입력할 때 이올린 서버로부터 자동 추천 단어를 받아 옵니다.'] = ''; @@ -187,6 +176,7 @@ $__text['글걸기 시도'] = 'Trying trackback'; $__text['글걸기를 시도합니다'] = 'Trying trackback'; //$__text['글관리'] = ''; +//$__text['글목록'] = ''; //$__text['글쓰기'] = ''; $__text['글을 걸 수 없었습니다.'] = 'Failed to send trackback.'; //$__text['글이 전부 삭제되지는 않고 팀블로그의 로그인 데이터만 삭제됩니다'] = ''; @@ -204,6 +194,7 @@ $__text['년'] = 'Year'; $__text['다른 메뉴보기'] = 'Show other menu'; $__text['다음 글 보기'] = 'Show next post'; +//$__text['다음 페이지'] = ''; $__text['다음'] = 'NEXT'; //$__text['다중 블로그 모드에서 블로그 운영자가 블로그를 비공개로 설정하는 것을 허용합니다.'] = ''; $__text['닫기'] = 'Close'; @@ -272,7 +263,10 @@ //$__text['바로 가기'] = ''; $__text['받는 사람'] = 'Recipient'; $__text['발행'] = 'Published'; +//$__text['방명록 쓰기'] = ''; $__text['방명록'] = 'Guestbook'; +//$__text['방명록에 댓글 달기'] = ''; +//$__text['방명록이 없습니다'] = ''; $__text['버전업 체크를 위한 파일을 생성합니다. 지금 생성하시겠습니까?'] = 'Create file for version tracking?'; //$__text['범위설정'] = ''; //$__text['변경시 텍스트큐브의 동작에 큰 영향을 줄 수 있으므로 주의하시기 바랍니다.'] = ''; @@ -305,6 +299,7 @@ $__text['비공개로 변경합니다'] = 'Change to private'; $__text['비밀 댓글'] = 'Secret Comment'; $__text['비밀 댓글입니다'] = 'Secret comment.'; +//$__text['비밀 방명록'] = ''; $__text['비밀글로 등록'] = 'Write as private comment'; $__text['비밀글의 작성자만 읽을 수 있는 댓글입니다.'] = 'Reading is allowed only to the writer of secret comment.'; $__text['비밀방문자'] = 'Secret visitor'; @@ -436,6 +431,8 @@ $__text['이메일이 바르지 않습니다.'] = 'Incorrect Email'; //$__text['이올린 태그 추천 사용'] = ''; $__text['이전 글 보기'] = 'Show previous post.'; +//$__text['이전 페이지'] = ''; +//$__text['이전 페이지로 돌아가기'] = ''; $__text['이전 페이지로'] = 'Go to previous page'; $__text['이전'] = 'PREV'; //$__text['인코딩'] = ''; @@ -448,6 +445,7 @@ //$__text['임시 암호가 설정되었습니다.'] = ''; //$__text['임시 암호가 설정되지 못했습니다.'] = ''; $__text['자세한 설정 보기'] = 'Show detail'; +//$__text['작성'] = ''; $__text['잘못된 트랜잭션입니다'] = 'Wrong transaction.'; $__text['저장'] = 'Save'; //$__text['저장되었습니다'] = ''; @@ -469,6 +467,7 @@ //$__text['조각보'] = ''; $__text['존재하지 않는 페이지입니다.'] = 'Page not found.'; $__text['주소입력'] = 'Input address'; +//$__text['지우기'] = ''; $__text['지정된 이메일로 로그인 정보가 전달되었습니다.'] = 'Login information sent.'; $__text['지정하신 걸린글 기록을 삭제하시겠습니까?'] = 'Will you delete marked trackback logs?'; $__text['지정하신 주소로 글을 보내시겠습니까?'] = 'Will you send your post to this address?'; @@ -476,7 +475,8 @@ $__text['차단된 이름을 사용하고 계시므로 댓글을 남기실 수 없습니다.'] = 'Cannot write comment. You are using blocked name.'; $__text['차단된 홈페이지 주소를 사용하고 계시므로 댓글을 남기실 수 없습니다.'] = 'Cannot write comment. You are using blocked homepage address'; //$__text['참여자를 추가하지 못하였습니다.'] = ''; -//$__text['참여중인 블로그'] = ''; +$__text['참여중인 블로그'] = 'My blogs'; +$__text['첫화면으로 돌아가기'] = 'Return'; $__text['초'] = 'sec.'; //$__text['초대 메일은 발송되지 않으며, 새로 추가된 참여자는 기본 권한만을 가지게 됩니다.'] = ''; $__text['초대장'] = 'Invitation'; @@ -499,24 +499,27 @@ //$__text['캐시 사용 조절'] = ''; //$__text['크로스 브라우징을 지원하는 트랙백 복사를 위한 플래시를 사용합니다.'] = ''; //$__text['키워드 만들기'] = ''; -//$__text['태그 관리'] = ''; +$__text['태그 관리'] = 'Manage Tags'; $__text['태그'] = 'Tag'; -//$__text['텍스트큐브 관리 페이지'] = ''; +$__text['텍스트큐브 관리 페이지'] = 'Admin panel'; $__text['텍스트큐브 로고'] = 'Textcube logo'; $__text['텍스트큐브 블로그 로그인 정보'] = 'Textcube blog login information'; $__text['텍스트큐브 시스템 점검이 필요합니다. 지금 점검하시겠습니까?'] = 'System check is necessary. Start the system check now?'; $__text['텍스트큐브'] = 'Textcube'; -//$__text['텍스트큐브는'] = ''; +$__text['텍스트큐브는'] = 'About Textcube'; //$__text['텍스트큐브의 기능을 조정합니다.'] = ''; //$__text['텍스트큐브의 자바 스크립트 컴포넌트등을 외부에서 불러옵니다.'] = ''; //$__text['텍스트큐브의 전반적인 캐시 기능을 사용합니다. 페이지 캐시, 스킨캐시, 실시간 쿼리 캐시 및 정책을 모두 포함됩니다.'] = ''; $__text['토요일'] = 'Sat'; +$__text['트랙백 보기'] = 'View Trackbacks'; +$__text['트랙백'] = 'Trackback'; +$__text['트랙백이 없습니다'] = 'No trackback'; //$__text['팀블로그 멤버 목록'] = ''; //$__text['팀블로그 참여자를 추가하였습니다.'] = ''; -//$__text['팀블로그'] = ''; -//$__text['팀원 제외'] = ''; -//$__text['팀원 추가'] = ''; -//$__text['파비콘 트래픽'] = ''; +$__text['팀블로그'] = 'Team blog'; +$__text['팀원 제외'] = 'Exclude member'; +$__text['팀원 추가'] = 'Add member'; +$__text['파비콘 트래픽'] = 'Favicon traffic'; $__text['파일 쓰기 권한이 없습니다. 웹서버가 %1 파일의 쓰기 권한을 가지고 있는지 확인하세요.'] = 'Do not have permission to write file. Please check your web server has write permission of %1 file.'; $__text['팟캐스트 포스트입니다.'] = 'This is a podcast.'; $__text['팟캐스트'] = 'Podcast'; @@ -525,30 +528,30 @@ $__text['패스워드가 일치하지 않습니다.'] = 'Password is not correct.'; $__text['패스워드가 틀렸습니다.'] = 'Wrong password.'; $__text['페이지 오류'] = 'Page error'; -//$__text['페이지 캐시 사용'] = ''; +$__text['페이지 캐시 사용'] = 'Use page cache'; $__text['편집기 없음'] = 'No default editor'; $__text['포스트가 없습니다.'] = 'Post does not exist'; $__text['포스트보기'] = 'Show posts'; -//$__text['표지 위젯'] = ''; +$__text['표지 위젯'] = 'Cover widgets'; $__text['표지'] = 'Cover'; -//$__text['플래시 업로더 사용'] = ''; -//$__text['플래시 트랙백 주소 복사 사용'] = ''; -//$__text['플러그인 데이터 관리'] = ''; -//$__text['플러그인 목록'] = ''; -//$__text['플러그인'] = ''; +$__text['플래시 업로더 사용'] = 'Use multiple file uploader (requires flash)'; +$__text['플래시 트랙백 주소 복사 사용'] = 'Use trackback copy (requires flash)'; +$__text['플러그인 데이터 관리'] = 'Manage Plugin data'; +$__text['플러그인 목록'] = 'Plugins'; +$__text['플러그인'] = 'Plugin'; $__text['피드 갱신'] = 'Refresh Feeds'; $__text['피드 등록하기'] = 'Add a new feed'; $__text['피드 수정하기'] = 'Edit feed'; $__text['피드 주소를 입력하세요.'] = 'Enter feed URL.'; $__text['피드를 갱신 했습니다.'] = 'Feeds refreshed'; $__text['피드를 읽어오고 있습니다.'] = 'Reading Feed'; -//$__text['필진 목록'] = ''; +$__text['필진 목록'] = 'Authors'; //$__text['현재 단일 블로그 모드 텍스트큐브가 설정되어 있습니다. 단일 블로그 모드에서는 대표 블로그 만이 외부에 보여집니다.'] = ''; $__text['현재 달의 달력을 보여줍니다.'] = 'Shows calendar of current month.'; $__text['현재 로그인한 오픈아이디'] = 'Currently logged-in OpenID'; $__text['홈페이지'] = 'Homepage'; $__text['화요일'] = 'Tue'; $__text['환영합니다!'] = 'Welcome!'; -//$__text['환영합니다. %1님.'] = ''; -//$__text['휴지통'] = ''; +$__text['환영합니다. %1님.'] = 'Welcome, %1'; +$__text['휴지통'] = 'Trash'; ?> diff --git a/resources/locale/blog/ja.php b/resources/locale/blog/ja.php index 8f8fc8314..48fa29325 100644 --- a/resources/locale/blog/ja.php +++ b/resources/locale/blog/ja.php @@ -81,12 +81,9 @@ $__text['(이름 없음 %1)'] = '(名称無し %1)'; $__text['1개월 뒤의 달력을 보여줍니다.'] = '1ヵ月後のカレンダーを表示します。'; $__text['1개월 앞의 달력을 보여줍니다.'] = '1ヵ月前のカレンダーを表示します。'; -$__text['

    텍스트큐브 사용을 환영합니다. 텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다. 강력한 글 관리와 편집 기능을 통하여 쉽고 빠르게 글을 작성하고 알릴 수 있습니다. 또한 통합된 소통 기능및 RSS 바깥글 읽기 기능을 통하여 다양한 사람들과 간단하게 의견을 주고 받을 수 있습니다.

    또한 텍스트큐브는 플러그인과 테마 시스템을 통하여 다양한 기능을 추가하거나 스킨을 바꾸고 편집할 수 있습니다. 뿐만 아니라 OpenID, microformat 지원 등의 기술적인 부분 및 다국어 지원을 포함한 강력한 저작 도구입니다.

    사용하며 도움말이 필요할 때는 관리자 메뉴의 우측 상단의 도우미 링크를 누르시면 도움말을 보실 수 있습니다. 기타 자세한 정보는 http://www.textcube.org 를 방문해서 확인하실 수 있습니다.

    이 글은 새 블로그에 자동으로 적힌 글입니다. 관리자 화면에서 언제든지 지우셔도 됩니다.

    '] = '<p>ようこそ、Textcubeです。Textcubeはネットから自分の考えや日常を記録・表現するためのソフトウェアです。強力な記事編集機能は手安い記事作成を手伝い、コメントやトラックバック・OpenIDの履歴管理、内臓RSSリーダーや国際化対応からMircoformatへの対応などの多様な機能は便利なブログライフの最高のパートナーとなります。</p><p>また、Textcubeのプラグインとテーマシステムは利用者が要求するいろんな機能の追加と利用をお手伝いします。</p><p>管理者メニューの右上に位置する「ヘルプ」リンクはTextcubeの機能に関することを記述したページへ進めるハイパーリンクであります。</p><p>その他、詳細な情報はhttp://www.textcube.org/ をお訪ねください。</p>'; +$__text['

    텍스트큐브 사용을 환영합니다. 텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다. 강력한 글 관리와 편집 기능을 통하여 쉽고 빠르게 글을 작성하고 알릴 수 있습니다. 또한 통합된 소통 기능및 RSS 바깥글 읽기 기능을 통하여 다양한 사람들과 간단하게 의견을 주고 받을 수 있습니다.

    또한 텍스트큐브는 플러그인과 테마 시스템을 통하여 다양한 기능을 추가하거나 스킨을 바꾸고 편집할 수 있습니다. 뿐만 아니라 OpenID, microformat 지원 등의 기술적인 부분 및 다국어 지원을 포함한 강력한 저작 도구입니다.

    사용하며 도움말이 필요할 때는 관리자 메뉴의 우측 상단의 도우미 링크를 누르시면 도움말을 보실 수 있습니다. 기타 자세한 정보는 http://www.textcube.org 를 방문해서 확인하실 수 있습니다.

    이 글은 새 블로그에 자동으로 적힌 글입니다. 관리자 화면에서 언제든지 지우셔도 됩니다.

    '] = '<p>ようこそ、Textcubeです。Textcubeはネットから自分の考えや日常を記録・表現するためのソフトウェアです。強力な記事編集機能は手安い記事作成を手伝い、コメントやトラックバック・OpenIDの履歴管理、内臓RSSリーダーや国際化対応からMircoformatへの対応などの多様な機能は便利なブログライフの最高のパートナーとなります。</p>>lt;p>また、Textcubeのプラグインとテーマシステムは利用者が要求するいろんな機能の追加と利用をお手伝いします。</p><p>管理者メニューの右上に位置する「ヘルプ」リンクはTextcubeの機能に関することを記述したページへ進めるハイパーリンクであります。</p><p>その他、詳細な情報はhttp://www.textcube.org/ をお訪ねください。</p>'; //$__text['Action'] = ''; -//$__text['Comments does not exist'] = ''; -//$__text['Go to previous page'] = ''; //$__text['HTML'] = ''; -//$__text['Homepage'] = ''; //$__text['Line 추가에 실패했습니다.'] = ''; //$__text['Lines'] = ''; //$__text['Line이 추가되었습니다.'] = ''; @@ -115,13 +112,10 @@ $__text['Microformat-warn: hAtom용 발행일을 추가하지 못하였습니다.'] = 'Microformat-warn: hAtom用の発行日属性の作成に失敗しました。'; $__text['Microformat-warn: 작성자에 hAtom용 class="author"를 추가하지 못하였습니다'] = 'Microformat-warn: 作成者属性にhAtom用の class="author"属性の作成に失敗しました。'; $__text['Microformat-warn: 제목에 hAtom용 title을 추가하지 못했습니다.'] = 'Microformat-warn: タイトルにhAtom用のtitle属性の作成に失敗しました。'; -//$__text['Name'] = ''; //$__text['No handling plugin'] = ''; -//$__text['No trackback'] = ''; //$__text['OFF'] = ''; //$__text['ON'] = ''; //$__text['PHP 정보'] = ''; -//$__text['Password'] = ''; //$__text['Password:'] = ''; //$__text['Precondition Failed'] = ''; //$__text['Protected post!'] = ''; @@ -130,18 +124,11 @@ //$__text['RSS 주소를 숫자로 사용'] = ''; //$__text['Secret Comment'] = ''; //$__text['Server 정보'] = ''; -//$__text['Show comment'] = ''; -//$__text['Show front page'] = ''; -//$__text['Show next post'] = ''; -//$__text['Show posts'] = ''; -//$__text['Show previous post'] = ''; -//$__text['Show trackbacks'] = ''; -//$__text['Submit'] = ''; //$__text['Technically supported by %1'] = ''; //$__text['Textcube - Login'] = ''; //$__text['View Post'] = ''; $__text['[비밀댓글]'] = '[非公開コメント]'; -$__text['http://www.google.co.kr/search?q=OpenID&lr=lang_ko'] = 'http://www.google.co.kr/search?q=OpenID&amp;lr=lang_ja'; +$__text['http://www.google.co.kr/search?q=OpenID&lr=lang_ko'] = 'http://www.google.co.kr/search?q=OpenID&lr=lang_ja'; //$__text['rewrite 규칙을 편집합니다'] = ''; //$__text['rewrite 모듈 디버그 모드 사용'] = ''; //$__text['rewrite 모듈 디버그 모드를 디버그 모드에 추가합니다. 접근시 적용된 주소를 해석한 정보가 디버그 모드 끝에 출력됩니다.'] = ''; @@ -151,6 +138,7 @@ $__text['걸린 글 보기'] = 'トラックバック'; //$__text['걸린 글'] = ''; $__text['걸린 글이 없습니다'] = 'トラックバックが存在しておりません。'; +//$__text['검색'] = ''; //$__text['계속 진행 하시겠습니까?'] = ''; $__text['공개'] = '公開'; //$__text['공개로 변경합니다'] = ''; @@ -173,6 +161,7 @@ $__text['그룹을 추가하세요.'] = 'グループを作成してください。'; //$__text['글 목록'] = ''; $__text['글 보관함'] = 'アーカイブ'; +//$__text['글 보기'] = ''; //$__text['글 쓰기'] = ''; //$__text['글 작성'] = ''; //$__text['글 작성시 태그나 지역로그를 입력할 때 이올린 서버로부터 자동 추천 단어를 받아 옵니다.'] = ''; @@ -181,6 +170,7 @@ $__text['글걸기 시도'] = 'トラックバック送信'; $__text['글걸기를 시도합니다'] = 'トラックバック送信'; //$__text['글관리'] = ''; +//$__text['글목록'] = ''; //$__text['글쓰기'] = ''; $__text['글을 걸 수 없었습니다.'] = 'トラックバック送信に失敗しました。'; //$__text['글이 전부 삭제되지는 않고 팀블로그의 로그인 데이터만 삭제됩니다'] = ''; @@ -198,6 +188,7 @@ $__text['년'] = '年'; $__text['다른 메뉴보기'] = '他メニュー表示'; $__text['다음 글 보기'] = '次の記事へ'; +//$__text['다음 페이지'] = ''; $__text['다음'] = '次へ'; //$__text['다중 블로그 모드에서 블로그 운영자가 블로그를 비공개로 설정하는 것을 허용합니다.'] = ''; $__text['닫기'] = '閉じる'; @@ -266,7 +257,10 @@ //$__text['바로 가기'] = ''; $__text['받는 사람'] = '受取人'; $__text['발행'] = '発行'; +//$__text['방명록 쓰기'] = ''; $__text['방명록'] = '掲示板'; +//$__text['방명록에 댓글 달기'] = ''; +//$__text['방명록이 없습니다'] = ''; $__text['버전업 체크를 위한 파일을 생성합니다. 지금 생성하시겠습니까?'] = '更新事項チェックのためのファイルを作成します、よろしいですか?'; //$__text['범위설정'] = ''; //$__text['변경시 텍스트큐브의 동작에 큰 영향을 줄 수 있으므로 주의하시기 바랍니다.'] = ''; @@ -299,6 +293,7 @@ $__text['비공개로 변경합니다'] = '非公開転換'; $__text['비밀 댓글'] = '非公開コメント'; $__text['비밀 댓글입니다'] = '非公開コメント'; +//$__text['비밀 방명록'] = ''; $__text['비밀글로 등록'] = '非公開コメント'; $__text['비밀글의 작성자만 읽을 수 있는 댓글입니다.'] = '非公開コメントの作成者のみにこのコメントが表示されます。'; $__text['비밀방문자'] = '非公開希望'; @@ -430,6 +425,8 @@ $__text['이메일이 바르지 않습니다.'] = '正しくない形式のメールアドレスです。'; //$__text['이올린 태그 추천 사용'] = ''; $__text['이전 글 보기'] = '前の記事へ'; +//$__text['이전 페이지'] = ''; +//$__text['이전 페이지로 돌아가기'] = ''; $__text['이전 페이지로'] = '前のページへ'; $__text['이전'] = '前へ'; //$__text['인코딩'] = ''; @@ -442,6 +439,7 @@ //$__text['임시 암호가 설정되었습니다.'] = ''; //$__text['임시 암호가 설정되지 못했습니다.'] = ''; $__text['자세한 설정 보기'] = '詳細設定表示'; +//$__text['작성'] = ''; $__text['잘못된 트랜잭션입니다'] = '正しくない形式のトランゼクションです。'; $__text['저장'] = '保存'; //$__text['저장되었습니다'] = ''; @@ -463,6 +461,7 @@ //$__text['조각보'] = ''; $__text['존재하지 않는 페이지입니다.'] = 'ページを見つかりません。'; $__text['주소입력'] = 'アドレス'; +//$__text['지우기'] = ''; $__text['지정된 이메일로 로그인 정보가 전달되었습니다.'] = '設定したメールへサインイン情報を送信しました。'; $__text['지정하신 걸린글 기록을 삭제하시겠습니까?'] = '設定したトラックバックログを削除します、よろしいですか?'; $__text['지정하신 주소로 글을 보내시겠습니까?'] = 'トラックバックを送信します、よろしいですか?'; @@ -471,6 +470,7 @@ $__text['차단된 홈페이지 주소를 사용하고 계시므로 댓글을 남기실 수 없습니다.'] = 'ブロックされているURLを利用しているのでコメントの作成ができません。'; //$__text['참여자를 추가하지 못하였습니다.'] = ''; //$__text['참여중인 블로그'] = ''; +//$__text['첫화면으로 돌아가기'] = ''; $__text['초'] = '秒'; //$__text['초대 메일은 발송되지 않으며, 새로 추가된 참여자는 기본 권한만을 가지게 됩니다.'] = ''; $__text['초대장'] = '招待状'; @@ -505,6 +505,9 @@ //$__text['텍스트큐브의 자바 스크립트 컴포넌트등을 외부에서 불러옵니다.'] = ''; //$__text['텍스트큐브의 전반적인 캐시 기능을 사용합니다. 페이지 캐시, 스킨캐시, 실시간 쿼리 캐시 및 정책을 모두 포함됩니다.'] = ''; $__text['토요일'] = '土'; +//$__text['트랙백 보기'] = ''; +//$__text['트랙백'] = ''; +//$__text['트랙백이 없습니다'] = ''; //$__text['팀블로그 멤버 목록'] = ''; //$__text['팀블로그 참여자를 추가하였습니다.'] = ''; //$__text['팀블로그'] = ''; @@ -545,4 +548,4 @@ $__text['환영합니다!'] = 'ようこそ!'; //$__text['환영합니다. %1님.'] = ''; //$__text['휴지통'] = ''; -?> \ No newline at end of file +?> diff --git a/resources/locale/blog/ko.php b/resources/locale/blog/ko.php index ee14e4885..ee960856d 100644 --- a/resources/locale/blog/ko.php +++ b/resources/locale/blog/ko.php @@ -88,10 +88,7 @@ //$__text['1개월 앞의 달력을 보여줍니다.'] = ''; //$__text['

    텍스트큐브 사용을 환영합니다. 텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다. 강력한 글 관리와 편집 기능을 통하여 쉽고 빠르게 글을 작성하고 알릴 수 있습니다. 또한 통합된 소통 기능및 RSS 바깥글 읽기 기능을 통하여 다양한 사람들과 간단하게 의견을 주고 받을 수 있습니다.

    또한 텍스트큐브는 플러그인과 테마 시스템을 통하여 다양한 기능을 추가하거나 스킨을 바꾸고 편집할 수 있습니다. 뿐만 아니라 OpenID, microformat 지원 등의 기술적인 부분 및 다국어 지원을 포함한 강력한 저작 도구입니다.

    사용하며 도움말이 필요할 때는 관리자 메뉴의 우측 상단의 도우미 링크를 누르시면 도움말을 보실 수 있습니다. 기타 자세한 정보는 http://www.textcube.org 를 방문해서 확인하실 수 있습니다.

    이 글은 새 블로그에 자동으로 적힌 글입니다. 관리자 화면에서 언제든지 지우셔도 됩니다.

    '] = ''; //$__text['Action'] = ''; -//$__text['Comments does not exist'] = ''; -//$__text['Go to previous page'] = ''; //$__text['HTML'] = ''; -//$__text['Homepage'] = ''; //$__text['Line 추가에 실패했습니다.'] = ''; //$__text['Lines'] = ''; //$__text['Line이 추가되었습니다.'] = ''; @@ -120,13 +117,10 @@ //$__text['Microformat-warn: hAtom용 발행일을 추가하지 못하였습니다.'] = ''; //$__text['Microformat-warn: 작성자에 hAtom용 class="author"를 추가하지 못하였습니다'] = ''; //$__text['Microformat-warn: 제목에 hAtom용 title을 추가하지 못했습니다.'] = ''; -//$__text['Name'] = ''; //$__text['No handling plugin'] = ''; -//$__text['No trackback'] = ''; //$__text['OFF'] = ''; //$__text['ON'] = ''; //$__text['PHP 정보'] = ''; -//$__text['Password'] = ''; //$__text['Password:'] = ''; //$__text['Precondition Failed'] = ''; //$__text['Protected post!'] = ''; @@ -135,13 +129,6 @@ //$__text['RSS 주소를 숫자로 사용'] = ''; //$__text['Secret Comment'] = ''; //$__text['Server 정보'] = ''; -//$__text['Show comment'] = ''; -//$__text['Show front page'] = ''; -//$__text['Show next post'] = ''; -//$__text['Show posts'] = ''; -//$__text['Show previous post'] = ''; -//$__text['Show trackbacks'] = ''; -//$__text['Submit'] = ''; //$__text['Technically supported by %1'] = ''; //$__text['Textcube - Login'] = ''; //$__text['View Post'] = ''; @@ -156,6 +143,7 @@ //$__text['걸린 글 보기'] = ''; //$__text['걸린 글'] = ''; //$__text['걸린 글이 없습니다'] = ''; +//$__text['검색'] = ''; //$__text['계속 진행 하시겠습니까?'] = ''; //$__text['공개'] = ''; //$__text['공개로 변경합니다'] = ''; @@ -178,6 +166,7 @@ //$__text['그룹을 추가하세요.'] = ''; //$__text['글 목록'] = ''; //$__text['글 보관함'] = ''; +//$__text['글 보기'] = ''; //$__text['글 쓰기'] = ''; //$__text['글 작성'] = ''; //$__text['글 작성시 태그나 지역로그를 입력할 때 이올린 서버로부터 자동 추천 단어를 받아 옵니다.'] = ''; @@ -186,6 +175,7 @@ //$__text['글걸기 시도'] = ''; //$__text['글걸기를 시도합니다'] = ''; //$__text['글관리'] = ''; +//$__text['글목록'] = ''; //$__text['글쓰기'] = ''; //$__text['글을 걸 수 없었습니다.'] = ''; //$__text['글이 전부 삭제되지는 않고 팀블로그의 로그인 데이터만 삭제됩니다'] = ''; @@ -203,6 +193,7 @@ //$__text['년'] = ''; //$__text['다른 메뉴보기'] = ''; //$__text['다음 글 보기'] = ''; +//$__text['다음 페이지'] = ''; //$__text['다음'] = ''; //$__text['다중 블로그 모드에서 블로그 운영자가 블로그를 비공개로 설정하는 것을 허용합니다.'] = ''; //$__text['닫기'] = ''; @@ -271,7 +262,10 @@ //$__text['바로 가기'] = ''; //$__text['받는 사람'] = ''; //$__text['발행'] = ''; +//$__text['방명록 쓰기'] = ''; //$__text['방명록'] = ''; +//$__text['방명록에 댓글 달기'] = ''; +//$__text['방명록이 없습니다'] = ''; //$__text['버전업 체크를 위한 파일을 생성합니다. 지금 생성하시겠습니까?'] = ''; //$__text['범위설정'] = ''; //$__text['변경시 텍스트큐브의 동작에 큰 영향을 줄 수 있으므로 주의하시기 바랍니다.'] = ''; @@ -304,6 +298,7 @@ //$__text['비공개로 변경합니다'] = ''; //$__text['비밀 댓글'] = ''; //$__text['비밀 댓글입니다'] = ''; +//$__text['비밀 방명록'] = ''; //$__text['비밀글로 등록'] = ''; //$__text['비밀글의 작성자만 읽을 수 있는 댓글입니다.'] = ''; //$__text['비밀방문자'] = ''; @@ -435,6 +430,8 @@ //$__text['이메일이 바르지 않습니다.'] = ''; //$__text['이올린 태그 추천 사용'] = ''; //$__text['이전 글 보기'] = ''; +//$__text['이전 페이지'] = ''; +//$__text['이전 페이지로 돌아가기'] = ''; //$__text['이전 페이지로'] = ''; //$__text['이전'] = ''; //$__text['인코딩'] = ''; @@ -447,6 +444,7 @@ //$__text['임시 암호가 설정되었습니다.'] = ''; //$__text['임시 암호가 설정되지 못했습니다.'] = ''; //$__text['자세한 설정 보기'] = ''; +//$__text['작성'] = ''; //$__text['잘못된 트랜잭션입니다'] = ''; //$__text['저장'] = ''; //$__text['저장되었습니다'] = ''; @@ -468,6 +466,7 @@ //$__text['조각보'] = ''; //$__text['존재하지 않는 페이지입니다.'] = ''; //$__text['주소입력'] = ''; +//$__text['지우기'] = ''; //$__text['지정된 이메일로 로그인 정보가 전달되었습니다.'] = ''; //$__text['지정하신 걸린글 기록을 삭제하시겠습니까?'] = ''; //$__text['지정하신 주소로 글을 보내시겠습니까?'] = ''; @@ -476,6 +475,7 @@ //$__text['차단된 홈페이지 주소를 사용하고 계시므로 댓글을 남기실 수 없습니다.'] = ''; //$__text['참여자를 추가하지 못하였습니다.'] = ''; //$__text['참여중인 블로그'] = ''; +//$__text['첫화면으로 돌아가기'] = ''; //$__text['초'] = ''; //$__text['초대 메일은 발송되지 않으며, 새로 추가된 참여자는 기본 권한만을 가지게 됩니다.'] = ''; //$__text['초대장'] = ''; @@ -510,6 +510,9 @@ //$__text['텍스트큐브의 자바 스크립트 컴포넌트등을 외부에서 불러옵니다.'] = ''; //$__text['텍스트큐브의 전반적인 캐시 기능을 사용합니다. 페이지 캐시, 스킨캐시, 실시간 쿼리 캐시 및 정책을 모두 포함됩니다.'] = ''; $__text['토요일'] = '토'; +//$__text['트랙백 보기'] = ''; +//$__text['트랙백'] = ''; +//$__text['트랙백이 없습니다'] = ''; //$__text['팀블로그 멤버 목록'] = ''; //$__text['팀블로그 참여자를 추가하였습니다.'] = ''; //$__text['팀블로그'] = ''; diff --git a/resources/locale/blog/vi.php b/resources/locale/blog/vi.php index 12d356dbd..8763bdf95 100644 --- a/resources/locale/blog/vi.php +++ b/resources/locale/blog/vi.php @@ -87,10 +87,7 @@ $__text['1개월 앞의 달력을 보여줍니다.'] = 'Hiển thị lịch trước 1 tháng.'; //$__text['

    텍스트큐브 사용을 환영합니다. 텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다. 강력한 글 관리와 편집 기능을 통하여 쉽고 빠르게 글을 작성하고 알릴 수 있습니다. 또한 통합된 소통 기능및 RSS 바깥글 읽기 기능을 통하여 다양한 사람들과 간단하게 의견을 주고 받을 수 있습니다.

    또한 텍스트큐브는 플러그인과 테마 시스템을 통하여 다양한 기능을 추가하거나 스킨을 바꾸고 편집할 수 있습니다. 뿐만 아니라 OpenID, microformat 지원 등의 기술적인 부분 및 다국어 지원을 포함한 강력한 저작 도구입니다.

    사용하며 도움말이 필요할 때는 관리자 메뉴의 우측 상단의 도우미 링크를 누르시면 도움말을 보실 수 있습니다. 기타 자세한 정보는 http://www.textcube.org 를 방문해서 확인하실 수 있습니다.

    이 글은 새 블로그에 자동으로 적힌 글입니다. 관리자 화면에서 언제든지 지우셔도 됩니다.

    '] = ''; //$__text['Action'] = ''; -//$__text['Comments does not exist'] = ''; -//$__text['Go to previous page'] = ''; //$__text['HTML'] = ''; -//$__text['Homepage'] = ''; //$__text['Line 추가에 실패했습니다.'] = ''; //$__text['Lines'] = ''; //$__text['Line이 추가되었습니다.'] = ''; @@ -119,13 +116,10 @@ //$__text['Microformat-warn: hAtom용 발행일을 추가하지 못하였습니다.'] = ''; //$__text['Microformat-warn: 작성자에 hAtom용 class="author"를 추가하지 못하였습니다'] = ''; //$__text['Microformat-warn: 제목에 hAtom용 title을 추가하지 못했습니다.'] = ''; -//$__text['Name'] = ''; //$__text['No handling plugin'] = ''; -//$__text['No trackback'] = ''; //$__text['OFF'] = ''; //$__text['ON'] = ''; //$__text['PHP 정보'] = ''; -//$__text['Password'] = ''; //$__text['Password:'] = ''; //$__text['Precondition Failed'] = ''; //$__text['Protected post!'] = ''; @@ -134,13 +128,6 @@ //$__text['RSS 주소를 숫자로 사용'] = ''; //$__text['Secret Comment'] = ''; //$__text['Server 정보'] = ''; -//$__text['Show comment'] = ''; -//$__text['Show front page'] = ''; -//$__text['Show next post'] = ''; -//$__text['Show posts'] = ''; -//$__text['Show previous post'] = ''; -//$__text['Show trackbacks'] = ''; -//$__text['Submit'] = ''; //$__text['Technically supported by %1'] = ''; //$__text['Textcube - Login'] = ''; //$__text['View Post'] = ''; @@ -155,6 +142,7 @@ $__text['걸린 글 보기'] = 'Xem liên kết'; //$__text['걸린 글'] = ''; $__text['걸린 글이 없습니다'] = 'Không có liên kết'; +//$__text['검색'] = ''; //$__text['계속 진행 하시겠습니까?'] = ''; $__text['공개'] = 'Hiển thị'; $__text['공개로 변경합니다'] = 'Chuyển sang hiển thị'; @@ -177,6 +165,7 @@ $__text['그룹을 추가하세요.'] = 'Thêm nhóm mới'; //$__text['글 목록'] = ''; $__text['글 보관함'] = 'Lưu trữ'; +//$__text['글 보기'] = ''; //$__text['글 쓰기'] = ''; //$__text['글 작성'] = ''; //$__text['글 작성시 태그나 지역로그를 입력할 때 이올린 서버로부터 자동 추천 단어를 받아 옵니다.'] = ''; @@ -185,6 +174,7 @@ $__text['글걸기 시도'] = 'Sử dụng liên kết Web'; $__text['글걸기를 시도합니다'] = 'Đang sử dụng liên kết Web'; //$__text['글관리'] = ''; +//$__text['글목록'] = ''; //$__text['글쓰기'] = ''; $__text['글을 걸 수 없었습니다.'] = 'Không thể gửi được liên kết Web.'; //$__text['글이 전부 삭제되지는 않고 팀블로그의 로그인 데이터만 삭제됩니다'] = ''; @@ -202,6 +192,7 @@ $__text['년'] = 'Năm'; $__text['다른 메뉴보기'] = 'Hiển thị Menu khác'; $__text['다음 글 보기'] = 'Xem bài tiếp theo'; +//$__text['다음 페이지'] = ''; $__text['다음'] = 'TIẾP'; //$__text['다중 블로그 모드에서 블로그 운영자가 블로그를 비공개로 설정하는 것을 허용합니다.'] = ''; $__text['닫기'] = 'Đóng'; @@ -270,7 +261,10 @@ //$__text['바로 가기'] = ''; $__text['받는 사람'] = 'Người nhận'; $__text['발행'] = 'Xuất bản'; +//$__text['방명록 쓰기'] = ''; $__text['방명록'] = 'Lưu niệm'; +//$__text['방명록에 댓글 달기'] = ''; +//$__text['방명록이 없습니다'] = ''; $__text['버전업 체크를 위한 파일을 생성합니다. 지금 생성하시겠습니까?'] = 'Bạn muốn tạo tập tin theo dõi các phiên bản không?'; //$__text['범위설정'] = ''; //$__text['변경시 텍스트큐브의 동작에 큰 영향을 줄 수 있으므로 주의하시기 바랍니다.'] = ''; @@ -303,6 +297,7 @@ $__text['비공개로 변경합니다'] = 'Chuyển thành ẩn'; $__text['비밀 댓글'] = 'Bình luận ẩn'; $__text['비밀 댓글입니다'] = 'Bình luận ẩn.'; +//$__text['비밀 방명록'] = ''; $__text['비밀글로 등록'] = 'Ẩn bình luận này'; $__text['비밀글의 작성자만 읽을 수 있는 댓글입니다.'] = 'Những bài viết hoặc bình luận ẩn, chỉ người viết mới có thể đọc.'; $__text['비밀방문자'] = 'Đăng nhập ẩn'; @@ -434,6 +429,8 @@ $__text['이메일이 바르지 않습니다.'] = 'Email bị sai.'; //$__text['이올린 태그 추천 사용'] = ''; $__text['이전 글 보기'] = 'Hiển thị bài viết trước.'; +//$__text['이전 페이지'] = ''; +//$__text['이전 페이지로 돌아가기'] = ''; $__text['이전 페이지로'] = 'Chuyển về trang trước'; $__text['이전'] = 'TRƯỚC'; //$__text['인코딩'] = ''; @@ -446,6 +443,7 @@ //$__text['임시 암호가 설정되었습니다.'] = ''; //$__text['임시 암호가 설정되지 못했습니다.'] = ''; $__text['자세한 설정 보기'] = 'Hiển thị chi tiết'; +//$__text['작성'] = ''; $__text['잘못된 트랜잭션입니다'] = 'Giao dịch bị sai.'; $__text['저장'] = 'Lưu lại'; //$__text['저장되었습니다'] = ''; @@ -467,6 +465,7 @@ //$__text['조각보'] = ''; $__text['존재하지 않는 페이지입니다.'] = 'Trang không được tìm thấy.'; $__text['주소입력'] = 'Nhập vào địa chỉ'; +//$__text['지우기'] = ''; $__text['지정된 이메일로 로그인 정보가 전달되었습니다.'] = 'Thông tin đăng nhập đã được gửi tới Email của bạn.'; $__text['지정하신 걸린글 기록을 삭제하시겠습니까?'] = 'Bạn chắc chắn muốn xóa những đánh dấu lưu lại của liên kết Web?'; $__text['지정하신 주소로 글을 보내시겠습니까?'] = 'Bạn chắc chắn muốn gửi bài viết cho địa chỉ này không?'; @@ -475,6 +474,7 @@ $__text['차단된 홈페이지 주소를 사용하고 계시므로 댓글을 남기실 수 없습니다.'] = 'Không thể viết bình luận. Bạn đang sử dụng Website đã bị chặn.'; //$__text['참여자를 추가하지 못하였습니다.'] = ''; //$__text['참여중인 블로그'] = ''; +//$__text['첫화면으로 돌아가기'] = ''; $__text['초'] = 'giây'; //$__text['초대 메일은 발송되지 않으며, 새로 추가된 참여자는 기본 권한만을 가지게 됩니다.'] = ''; $__text['초대장'] = 'Thư mời'; @@ -509,6 +509,9 @@ //$__text['텍스트큐브의 자바 스크립트 컴포넌트등을 외부에서 불러옵니다.'] = ''; //$__text['텍스트큐브의 전반적인 캐시 기능을 사용합니다. 페이지 캐시, 스킨캐시, 실시간 쿼리 캐시 및 정책을 모두 포함됩니다.'] = ''; $__text['토요일'] = 'Thứ bảy'; +//$__text['트랙백 보기'] = ''; +//$__text['트랙백'] = ''; +//$__text['트랙백이 없습니다'] = ''; //$__text['팀블로그 멤버 목록'] = ''; //$__text['팀블로그 참여자를 추가하였습니다.'] = ''; //$__text['팀블로그'] = ''; @@ -549,4 +552,4 @@ $__text['환영합니다!'] = 'Xin chào!'; //$__text['환영합니다. %1님.'] = ''; //$__text['휴지통'] = ''; -?> \ No newline at end of file +?> diff --git a/resources/locale/blog/zh-CN.php b/resources/locale/blog/zh-CN.php index 1f16f1587..5f5bb4254 100644 --- a/resources/locale/blog/zh-CN.php +++ b/resources/locale/blog/zh-CN.php @@ -80,10 +80,7 @@ $__text['1개월 앞의 달력을 보여줍니다.'] = '显示上一月的月历。'; $__text['

    텍스트큐브 사용을 환영합니다. 텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다. 강력한 글 관리와 편집 기능을 통하여 쉽고 빠르게 글을 작성하고 알릴 수 있습니다. 또한 통합된 소통 기능및 RSS 바깥글 읽기 기능을 통하여 다양한 사람들과 간단하게 의견을 주고 받을 수 있습니다.

    또한 텍스트큐브는 플러그인과 테마 시스템을 통하여 다양한 기능을 추가하거나 스킨을 바꾸고 편집할 수 있습니다. 뿐만 아니라 OpenID, microformat 지원 등의 기술적인 부분 및 다국어 지원을 포함한 강력한 저작 도구입니다.

    사용하며 도움말이 필요할 때는 관리자 메뉴의 우측 상단의 도우미 링크를 누르시면 도움말을 보실 수 있습니다. 기타 자세한 정보는 http://www.textcube.org 를 방문해서 확인하실 수 있습니다.

    이 글은 새 블로그에 자동으로 적힌 글입니다. 관리자 화면에서 언제든지 지우셔도 됩니다.

    '] = '<p>欢迎使用 TextCube。TextCube 是用于记录与展现自己的想法以及日常生活,强大的文章编辑器能够帮助你更轻松的撰写内容,拥有博客评论及引用技术和 OpenID 管理,RSS feed 等,并且有国际化对应以及 Microformat 对应等功能。</p><p>你可以自行增加各种插件与主题样版,方便的扩充与增加博客功能。所有的说明都在关于 TextCube 的链结中。</p><p>在管理者清单上方有"帮助"的项目.</p><p>更多的详细信息请参阅: http://www.textcube.org/。</p>'; //$__text['Action'] = ''; -$__text['Comments does not exist'] = '评论不存在。'; -$__text['Go to previous page'] = '前往上一页'; //$__text['HTML'] = ''; -$__text['Homepage'] = '首页'; //$__text['Line 추가에 실패했습니다.'] = ''; //$__text['Lines'] = ''; //$__text['Line이 추가되었습니다.'] = ''; @@ -112,13 +109,10 @@ $__text['Microformat-warn: hAtom용 발행일을 추가하지 못하였습니다.'] = 'Microformat-info: 提供 hAtom 所使用的发行日属性制作失败。'; $__text['Microformat-warn: 작성자에 hAtom용 class="author"를 추가하지 못하였습니다'] = 'Microformat-info: 提供 hAtom 所使用的作者属性 class="author" 制作失败。'; $__text['Microformat-warn: 제목에 hAtom용 title을 추가하지 못했습니다.'] = 'Microformat-info: 提供 hAtom 所使用的标题属性 title 制作失败。'; -//$__text['Name'] = ''; $__text['No handling plugin'] = '无法控制插件'; -$__text['No trackback'] = '没有引用'; //$__text['OFF'] = ''; //$__text['ON'] = ''; //$__text['PHP 정보'] = ''; -$__text['Password'] = '密码'; $__text['Password:'] = '密码:'; //$__text['Precondition Failed'] = ''; $__text['Protected post!'] = '已受保护的文章!'; @@ -127,13 +121,6 @@ //$__text['RSS 주소를 숫자로 사용'] = ''; $__text['Secret Comment'] = '私密评论'; //$__text['Server 정보'] = ''; -$__text['Show comment'] = '显示评论'; -$__text['Show front page'] = '显示首页'; -$__text['Show next post'] = '显示下一则文章'; -$__text['Show posts'] = '显示文章'; -$__text['Show previous post'] = '显示前一则文章'; -$__text['Show trackbacks'] = '显示引用'; -$__text['Submit'] = '送出'; //$__text['Technically supported by %1'] = ''; $__text['Textcube - Login'] = 'Textcube - 登入'; //$__text['View Post'] = ''; @@ -148,6 +135,7 @@ $__text['걸린 글 보기'] = '瀏覽引用'; //$__text['걸린 글'] = ''; $__text['걸린 글이 없습니다'] = '尚無引用'; +//$__text['검색'] = ''; //$__text['계속 진행 하시겠습니까?'] = ''; $__text['공개'] = '公开'; $__text['공개로 변경합니다'] = '修改为公开'; @@ -170,6 +158,7 @@ $__text['그룹을 추가하세요.'] = '请建立群组。'; //$__text['글 목록'] = ''; $__text['글 보관함'] = '文章存檔'; +//$__text['글 보기'] = ''; //$__text['글 쓰기'] = ''; //$__text['글 작성'] = ''; //$__text['글 작성시 태그나 지역로그를 입력할 때 이올린 서버로부터 자동 추천 단어를 받아 옵니다.'] = ''; @@ -178,6 +167,7 @@ $__text['글걸기 시도'] = '試圖引用'; $__text['글걸기를 시도합니다'] = '試圖引用文章'; //$__text['글관리'] = ''; +//$__text['글목록'] = ''; //$__text['글쓰기'] = ''; $__text['글을 걸 수 없었습니다.'] = '发送引用失败。'; //$__text['글이 전부 삭제되지는 않고 팀블로그의 로그인 데이터만 삭제됩니다'] = ''; @@ -195,6 +185,7 @@ $__text['년'] = '年'; $__text['다른 메뉴보기'] = '查看其他選項'; $__text['다음 글 보기'] = '瀏覽下一篇'; +//$__text['다음 페이지'] = ''; $__text['다음'] = '继续'; //$__text['다중 블로그 모드에서 블로그 운영자가 블로그를 비공개로 설정하는 것을 허용합니다.'] = ''; $__text['닫기'] = '關閉'; @@ -263,7 +254,10 @@ //$__text['바로 가기'] = ''; $__text['받는 사람'] = '收件人'; $__text['발행'] = '发行'; +//$__text['방명록 쓰기'] = ''; $__text['방명록'] = '留言板'; +//$__text['방명록에 댓글 달기'] = ''; +//$__text['방명록이 없습니다'] = ''; $__text['버전업 체크를 위한 파일을 생성합니다. 지금 생성하시겠습니까?'] = '未更新版本建立文件,现在确认吗?'; //$__text['범위설정'] = ''; //$__text['변경시 텍스트큐브의 동작에 큰 영향을 줄 수 있으므로 주의하시기 바랍니다.'] = ''; @@ -296,6 +290,7 @@ $__text['비공개로 변경합니다'] = '修改为不公开'; $__text['비밀 댓글'] = '悄悄話'; $__text['비밀 댓글입니다'] = '已關閉的回覆'; +//$__text['비밀 방명록'] = ''; $__text['비밀글로 등록'] = '以悄悄話發佈'; $__text['비밀글의 작성자만 읽을 수 있는 댓글입니다.'] = '此回复仅作者本人可检视。'; $__text['비밀방문자'] = '秘密访客'; @@ -427,6 +422,8 @@ $__text['이메일이 바르지 않습니다.'] = '信箱地址错误。'; //$__text['이올린 태그 추천 사용'] = ''; $__text['이전 글 보기'] = '瀏覽上一篇文章'; +//$__text['이전 페이지'] = ''; +//$__text['이전 페이지로 돌아가기'] = ''; $__text['이전 페이지로'] = '到上一页'; $__text['이전'] = '返回'; //$__text['인코딩'] = ''; @@ -439,6 +436,7 @@ //$__text['임시 암호가 설정되었습니다.'] = ''; //$__text['임시 암호가 설정되지 못했습니다.'] = ''; $__text['자세한 설정 보기'] = '顯示詳細設定'; +//$__text['작성'] = ''; $__text['잘못된 트랜잭션입니다'] = '传送错误'; $__text['저장'] = '储存'; //$__text['저장되었습니다'] = ''; @@ -460,6 +458,7 @@ //$__text['조각보'] = ''; $__text['존재하지 않는 페이지입니다.'] = '此页不存在!'; $__text['주소입력'] = '输入地址'; +//$__text['지우기'] = ''; $__text['지정된 이메일로 로그인 정보가 전달되었습니다.'] = '登入讯息已发送到指定信箱。'; $__text['지정하신 걸린글 기록을 삭제하시겠습니까?'] = '要删除指定的引用吗?'; $__text['지정하신 주소로 글을 보내시겠습니까?'] = '发送引用到指定地址吗?'; @@ -468,6 +467,7 @@ $__text['차단된 홈페이지 주소를 사용하고 계시므로 댓글을 남기실 수 없습니다.'] = '因为使用被过滤网址,故不能回复。'; //$__text['참여자를 추가하지 못하였습니다.'] = ''; //$__text['참여중인 블로그'] = ''; +//$__text['첫화면으로 돌아가기'] = ''; $__text['초'] = '秒'; //$__text['초대 메일은 발송되지 않으며, 새로 추가된 참여자는 기본 권한만을 가지게 됩니다.'] = ''; $__text['초대장'] = '邀请函'; @@ -502,6 +502,9 @@ //$__text['텍스트큐브의 자바 스크립트 컴포넌트등을 외부에서 불러옵니다.'] = ''; //$__text['텍스트큐브의 전반적인 캐시 기능을 사용합니다. 페이지 캐시, 스킨캐시, 실시간 쿼리 캐시 및 정책을 모두 포함됩니다.'] = ''; $__text['토요일'] = '六'; +//$__text['트랙백 보기'] = ''; +//$__text['트랙백'] = ''; +//$__text['트랙백이 없습니다'] = ''; //$__text['팀블로그 멤버 목록'] = ''; //$__text['팀블로그 참여자를 추가하였습니다.'] = ''; //$__text['팀블로그'] = ''; @@ -542,4 +545,4 @@ $__text['환영합니다!'] = '欢迎光临!'; //$__text['환영합니다. %1님.'] = ''; //$__text['휴지통'] = ''; -?> \ No newline at end of file +?> diff --git a/resources/locale/blog/zh-TW.php b/resources/locale/blog/zh-TW.php index 4bf969409..19cc81af0 100644 --- a/resources/locale/blog/zh-TW.php +++ b/resources/locale/blog/zh-TW.php @@ -80,10 +80,7 @@ $__text['1개월 앞의 달력을 보여줍니다.'] = '顯示上一月的月曆。'; $__text['

    텍스트큐브 사용을 환영합니다. 텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다. 강력한 글 관리와 편집 기능을 통하여 쉽고 빠르게 글을 작성하고 알릴 수 있습니다. 또한 통합된 소통 기능및 RSS 바깥글 읽기 기능을 통하여 다양한 사람들과 간단하게 의견을 주고 받을 수 있습니다.

    또한 텍스트큐브는 플러그인과 테마 시스템을 통하여 다양한 기능을 추가하거나 스킨을 바꾸고 편집할 수 있습니다. 뿐만 아니라 OpenID, microformat 지원 등의 기술적인 부분 및 다국어 지원을 포함한 강력한 저작 도구입니다.

    사용하며 도움말이 필요할 때는 관리자 메뉴의 우측 상단의 도우미 링크를 누르시면 도움말을 보실 수 있습니다. 기타 자세한 정보는 http://www.textcube.org 를 방문해서 확인하실 수 있습니다.

    이 글은 새 블로그에 자동으로 적힌 글입니다. 관리자 화면에서 언제든지 지우셔도 됩니다.

    '] = '<p>歡迎使用 TextCube。TextCube 是用於記錄與展現自己的想法以及日常生活,強大的文章編輯器能夠幫助你更輕鬆的撰寫內容,擁有部落格評論及引用技術和 OpenID 管理,RSS feed 等,並且有國際化對應以及 Microformat 對應等功能。</p><p>你可以自行增加各種插件與主題樣版,方便的擴充與增加部落格功能。所有的說明都在關於 TextCube 的鏈結中。</p><p>在管理者清單上方有"幫助"的項目.</p><p>更多的詳細資訊請參閱: http://www.textcube.org/。</p>'; //$__text['Action'] = ''; -$__text['Comments does not exist'] = '評論不存在。'; -$__text['Go to previous page'] = '前往上一頁'; //$__text['HTML'] = ''; -$__text['Homepage'] = '首頁'; //$__text['Line 추가에 실패했습니다.'] = ''; //$__text['Lines'] = ''; //$__text['Line이 추가되었습니다.'] = ''; @@ -112,13 +109,10 @@ $__text['Microformat-warn: hAtom용 발행일을 추가하지 못하였습니다.'] = 'Microformat-info: 提供 hAtom 所使用的發行日屬性製作失敗。'; $__text['Microformat-warn: 작성자에 hAtom용 class="author"를 추가하지 못하였습니다'] = 'Microformat-info: 提供 hAtom 所使用的作者屬性 class="author" 製作失敗。'; $__text['Microformat-warn: 제목에 hAtom용 title을 추가하지 못했습니다.'] = 'Microformat-info: 提供 hAtom 所使用的標題屬性 title 製作失敗。'; -//$__text['Name'] = ''; $__text['No handling plugin'] = '無法控制插件'; -$__text['No trackback'] = '沒有引用'; //$__text['OFF'] = ''; //$__text['ON'] = ''; //$__text['PHP 정보'] = ''; -$__text['Password'] = '密碼'; $__text['Password:'] = '密碼:'; //$__text['Precondition Failed'] = ''; $__text['Protected post!'] = '已受保護的文章!'; @@ -127,13 +121,6 @@ //$__text['RSS 주소를 숫자로 사용'] = ''; $__text['Secret Comment'] = '私密評論'; //$__text['Server 정보'] = ''; -$__text['Show comment'] = '顯示評論'; -$__text['Show front page'] = '顯示首頁'; -$__text['Show next post'] = '顯示下一則文章'; -$__text['Show posts'] = '顯示文章'; -$__text['Show previous post'] = '顯示前一則文章'; -$__text['Show trackbacks'] = '顯示引用'; -$__text['Submit'] = '送出'; //$__text['Technically supported by %1'] = ''; $__text['Textcube - Login'] = 'Textcube - 登入'; //$__text['View Post'] = ''; @@ -148,6 +135,7 @@ $__text['걸린 글 보기'] = '瀏覽引用'; //$__text['걸린 글'] = ''; $__text['걸린 글이 없습니다'] = '尚無引用'; +//$__text['검색'] = ''; //$__text['계속 진행 하시겠습니까?'] = ''; $__text['공개'] = '公開'; $__text['공개로 변경합니다'] = '修改為公開'; @@ -170,6 +158,7 @@ $__text['그룹을 추가하세요.'] = '請建立群組。'; //$__text['글 목록'] = ''; $__text['글 보관함'] = '文章存檔'; +//$__text['글 보기'] = ''; //$__text['글 쓰기'] = ''; //$__text['글 작성'] = ''; //$__text['글 작성시 태그나 지역로그를 입력할 때 이올린 서버로부터 자동 추천 단어를 받아 옵니다.'] = ''; @@ -178,6 +167,7 @@ $__text['글걸기 시도'] = '試圖引用'; $__text['글걸기를 시도합니다'] = '試圖引用文章'; //$__text['글관리'] = ''; +//$__text['글목록'] = ''; //$__text['글쓰기'] = ''; $__text['글을 걸 수 없었습니다.'] = '發送引用失敗。'; //$__text['글이 전부 삭제되지는 않고 팀블로그의 로그인 데이터만 삭제됩니다'] = ''; @@ -195,6 +185,7 @@ $__text['년'] = '年'; $__text['다른 메뉴보기'] = '查看其他選項'; $__text['다음 글 보기'] = '瀏覽下一篇'; +//$__text['다음 페이지'] = ''; $__text['다음'] = '繼續'; //$__text['다중 블로그 모드에서 블로그 운영자가 블로그를 비공개로 설정하는 것을 허용합니다.'] = ''; $__text['닫기'] = '關閉'; @@ -263,7 +254,10 @@ //$__text['바로 가기'] = ''; $__text['받는 사람'] = '收件人'; $__text['발행'] = '發行'; +//$__text['방명록 쓰기'] = ''; $__text['방명록'] = '留言板'; +//$__text['방명록에 댓글 달기'] = ''; +//$__text['방명록이 없습니다'] = ''; $__text['버전업 체크를 위한 파일을 생성합니다. 지금 생성하시겠습니까?'] = '未更新版本建立文件,現在確認嗎?'; //$__text['범위설정'] = ''; //$__text['변경시 텍스트큐브의 동작에 큰 영향을 줄 수 있으므로 주의하시기 바랍니다.'] = ''; @@ -296,6 +290,7 @@ $__text['비공개로 변경합니다'] = '修改為不公開'; $__text['비밀 댓글'] = '悄悄話'; $__text['비밀 댓글입니다'] = '已關閉的回覆'; +//$__text['비밀 방명록'] = ''; $__text['비밀글로 등록'] = '以悄悄話發佈'; $__text['비밀글의 작성자만 읽을 수 있는 댓글입니다.'] = '此回覆僅作者本人可檢視。'; $__text['비밀방문자'] = '秘密訪客'; @@ -427,6 +422,8 @@ $__text['이메일이 바르지 않습니다.'] = '信箱地址錯誤。'; //$__text['이올린 태그 추천 사용'] = ''; $__text['이전 글 보기'] = '瀏覽上一篇文章'; +//$__text['이전 페이지'] = ''; +//$__text['이전 페이지로 돌아가기'] = ''; $__text['이전 페이지로'] = '到上一頁'; $__text['이전'] = '返回'; //$__text['인코딩'] = ''; @@ -439,6 +436,7 @@ //$__text['임시 암호가 설정되었습니다.'] = ''; //$__text['임시 암호가 설정되지 못했습니다.'] = ''; $__text['자세한 설정 보기'] = '顯示詳細設定'; +//$__text['작성'] = ''; $__text['잘못된 트랜잭션입니다'] = '傳送錯誤'; $__text['저장'] = '儲存'; //$__text['저장되었습니다'] = ''; @@ -460,6 +458,7 @@ //$__text['조각보'] = ''; $__text['존재하지 않는 페이지입니다.'] = '此頁不存在!'; $__text['주소입력'] = '輸入地址'; +//$__text['지우기'] = ''; $__text['지정된 이메일로 로그인 정보가 전달되었습니다.'] = '登入訊息已發送到指定信箱。'; $__text['지정하신 걸린글 기록을 삭제하시겠습니까?'] = '要刪除指定的引用嗎?'; $__text['지정하신 주소로 글을 보내시겠습니까?'] = '發送引用到指定地址嗎?'; @@ -468,6 +467,7 @@ $__text['차단된 홈페이지 주소를 사용하고 계시므로 댓글을 남기실 수 없습니다.'] = '因為使用被過濾網址,故不能回覆。'; //$__text['참여자를 추가하지 못하였습니다.'] = ''; //$__text['참여중인 블로그'] = ''; +//$__text['첫화면으로 돌아가기'] = ''; $__text['초'] = '秒'; //$__text['초대 메일은 발송되지 않으며, 새로 추가된 참여자는 기본 권한만을 가지게 됩니다.'] = ''; $__text['초대장'] = '邀請函'; @@ -502,6 +502,9 @@ //$__text['텍스트큐브의 자바 스크립트 컴포넌트등을 외부에서 불러옵니다.'] = ''; //$__text['텍스트큐브의 전반적인 캐시 기능을 사용합니다. 페이지 캐시, 스킨캐시, 실시간 쿼리 캐시 및 정책을 모두 포함됩니다.'] = ''; $__text['토요일'] = '六'; +//$__text['트랙백 보기'] = ''; +//$__text['트랙백'] = ''; +//$__text['트랙백이 없습니다'] = ''; //$__text['팀블로그 멤버 목록'] = ''; //$__text['팀블로그 참여자를 추가하였습니다.'] = ''; //$__text['팀블로그'] = ''; @@ -542,4 +545,4 @@ $__text['환영합니다!'] = '歡迎光臨!'; //$__text['환영합니다. %1님.'] = ''; //$__text['휴지통'] = ''; -?> \ No newline at end of file +?> diff --git a/resources/locale/checkup/en.php b/resources/locale/checkup/en.php index 89bb3f543..b7c0d4b33 100644 --- a/resources/locale/checkup/en.php +++ b/resources/locale/checkup/en.php @@ -74,6 +74,7 @@ $__text['텍스트큐브를 점검합니다.'] = 'Textcube maintenance start.'; $__text['트랙백 불러오기 속도를 개선하기 위하여 트랙백 테이블의 인덱스 설정을 변경합니다.'] = 'Modifying index setting of trackback table.'; //$__text['트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.'] = ''; +//$__text['트랙백 테이블의 호환성을 위하여 필드 이름을 변경합니다.'] = ''; $__text['페이지 캐시를 초기화합니다.'] = 'Reset page cache'; //$__text['필터 테이블에 예외 목록을 추가하기 위하여 필드 속성을 변경합니다.'] = ''; //$__text['필터 호환성을 위하여 필드의 이름을 변경합니다.'] = ''; diff --git a/resources/locale/checkup/ja.php b/resources/locale/checkup/ja.php index b737fa90b..7d07bc182 100644 --- a/resources/locale/checkup/ja.php +++ b/resources/locale/checkup/ja.php @@ -68,6 +68,7 @@ $__text['텍스트큐브를 점검합니다.'] = 'Textcubeを点検します。'; $__text['트랙백 불러오기 속도를 개선하기 위하여 트랙백 테이블의 인덱스 설정을 변경합니다.'] = 'トラックバック動作速度の改善のためトラックバックテーブルのインデックス設定を更新します。'; //$__text['트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.'] = ''; +//$__text['트랙백 테이블의 호환성을 위하여 필드 이름을 변경합니다.'] = ''; $__text['페이지 캐시를 초기화합니다.'] = 'ページキャッシュをリセットします。'; $__text['필터 테이블에 예외 목록을 추가하기 위하여 필드 속성을 변경합니다.'] = '拒否除外設定のため、拒否テーブルの属性を更新します。'; //$__text['필터 호환성을 위하여 필드의 이름을 변경합니다.'] = ''; diff --git a/resources/locale/checkup/ko.php b/resources/locale/checkup/ko.php index d8dbde02e..0591ac925 100644 --- a/resources/locale/checkup/ko.php +++ b/resources/locale/checkup/ko.php @@ -73,6 +73,7 @@ //$__text['텍스트큐브를 점검합니다.'] = ''; //$__text['트랙백 불러오기 속도를 개선하기 위하여 트랙백 테이블의 인덱스 설정을 변경합니다.'] = ''; //$__text['트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.'] = ''; +//$__text['트랙백 테이블의 호환성을 위하여 필드 이름을 변경합니다.'] = ''; //$__text['페이지 캐시를 초기화합니다.'] = ''; //$__text['필터 테이블에 예외 목록을 추가하기 위하여 필드 속성을 변경합니다.'] = ''; //$__text['필터 호환성을 위하여 필드의 이름을 변경합니다.'] = ''; diff --git a/resources/locale/checkup/vi.php b/resources/locale/checkup/vi.php index af387ef5e..f48de293e 100644 --- a/resources/locale/checkup/vi.php +++ b/resources/locale/checkup/vi.php @@ -72,6 +72,7 @@ $__text['텍스트큐브를 점검합니다.'] = 'Bắt đầu bảo trì Textcube.'; $__text['트랙백 불러오기 속도를 개선하기 위하여 트랙백 테이블의 인덱스 설정을 변경합니다.'] = 'Sửa đổi mục điều chỉnh của liên kết Web.'; //$__text['트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.'] = ''; +//$__text['트랙백 테이블의 호환성을 위하여 필드 이름을 변경합니다.'] = ''; $__text['페이지 캐시를 초기화합니다.'] = 'Tạo lại cache.'; //$__text['필터 테이블에 예외 목록을 추가하기 위하여 필드 속성을 변경합니다.'] = ''; //$__text['필터 호환성을 위하여 필드의 이름을 변경합니다.'] = ''; diff --git a/resources/locale/checkup/zh-CN.php b/resources/locale/checkup/zh-CN.php index 58028e24d..4cdc42f77 100644 --- a/resources/locale/checkup/zh-CN.php +++ b/resources/locale/checkup/zh-CN.php @@ -65,6 +65,7 @@ $__text['텍스트큐브를 점검합니다.'] = '更新,检查Textcube。'; $__text['트랙백 불러오기 속도를 개선하기 위하여 트랙백 테이블의 인덱스 설정을 변경합니다.'] = '制作引用数据表索引以改善引用数据的速度'; //$__text['트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.'] = ''; +//$__text['트랙백 테이블의 호환성을 위하여 필드 이름을 변경합니다.'] = ''; $__text['페이지 캐시를 초기화합니다.'] = '重设页面缓存。'; $__text['필터 테이블에 예외 목록을 추가하기 위하여 필드 속성을 변경합니다.'] = '变更过滤器数据表,追加空白网址例外清单设定。'; //$__text['필터 호환성을 위하여 필드의 이름을 변경합니다.'] = ''; diff --git a/resources/locale/checkup/zh-TW.php b/resources/locale/checkup/zh-TW.php index 5ad3c9c12..f7376ba0b 100644 --- a/resources/locale/checkup/zh-TW.php +++ b/resources/locale/checkup/zh-TW.php @@ -65,6 +65,7 @@ $__text['텍스트큐브를 점검합니다.'] = '更新,檢查Textcube。'; $__text['트랙백 불러오기 속도를 개선하기 위하여 트랙백 테이블의 인덱스 설정을 변경합니다.'] = '製作引用資料表索引以改善引用資料的速度'; //$__text['트랙백 테이블에 컨텐츠 종류를 판단하기 위한 필드를 추가합니다.'] = ''; +//$__text['트랙백 테이블의 호환성을 위하여 필드 이름을 변경합니다.'] = ''; $__text['페이지 캐시를 초기화합니다.'] = '重設頁面緩存。'; $__text['필터 테이블에 예외 목록을 추가하기 위하여 필드 속성을 변경합니다.'] = '變更過濾器資料表,追加空白網址例外清單設定。'; //$__text['필터 호환성을 위하여 필드의 이름을 변경합니다.'] = ''; diff --git a/resources/locale/mobile/en.php b/resources/locale/mobile/en.php index 1d0759518..b3933b040 100644 --- a/resources/locale/mobile/en.php +++ b/resources/locale/mobile/en.php @@ -32,11 +32,11 @@ $__text['토요일'] = 'Sat'; +//$__text['%1 페이지'] = ''; //$__text['2007년 4월 23일 TNF의 박용주님에 의하여 S2는 텍스트큐브로 명명 되었으며, 이후 개발 기간을 거쳐 2007년 8월 16일 TNF에 의하여 텍스트큐브의 첫 정식 버전인 텍스트큐브 1.5가 발표되었습니다.'] = ''; //$__text['2007년 4월 태터앤프렌즈(TNF)는 태터 네트워크 재단(TNF, Tatter Network Foundation) 계획과 함께 적극적 참여 집단인 니들웍스(Needlworks) 를 발표하였습니다. 또한 태터툴즈를 기반으로 하는 오픈소스 블로그 소프트웨어인 S2 개발 계획도 발표하였습니다.'] = ''; //$__text['Administrator access only.'] = ''; //$__text['Blocked %1'] = ''; -//$__text['Blog Login'] = ''; //$__text['Cannot write comment.'] = ''; //$__text['Comment delete error'] = ''; //$__text['Comment delete error.'] = ''; @@ -46,22 +46,43 @@ //$__text['Comment write error.'] = ''; //$__text['Delete Comment'] = ''; //$__text['Delete comment?'] = ''; +//$__text['E-mail 저장'] = ''; //$__text['E-mail'] = ''; //$__text['Go to comments page'] = ''; //$__text['Go to front page'] = ''; //$__text['Incorrect Password.'] = ''; //$__text['No'] = ''; //$__text['Password (again)!'] = ''; -//$__text['Password'] = ''; //$__text['Password:'] = ''; -//$__text['Permission denied.'] = ''; //$__text['Please enter Password.'] = ''; //$__text['Please enter content.'] = ''; //$__text['Please enter your name.'] = ''; -//$__text['Wrong E-mail or Password.'] = ''; //$__text['Wrong password.'] = ''; //$__text['Yes'] = ''; //$__text['You have to log in with and OpenID to leave a comment.'] = ''; +//$__text['검색 결과'] = ''; +//$__text['검색'] = ''; +//$__text['권한이 없습니다.'] = ''; +//$__text['글 검색'] = ''; +//$__text['글목록'] = ''; +//$__text['로그아웃'] = ''; +//$__text['로그인 하였습니다.'] = ''; +//$__text['로그인'] = ''; +//$__text['링크'] = ''; +//$__text['모든 카테고리'] = ''; +//$__text['방명록'] = ''; +//$__text['보관목록'] = ''; +//$__text['분류'] = ''; +//$__text['블로그 로그인'] = ''; +//$__text['비밀번호'] = ''; +//$__text['잘못된 E-mail 주소 또는 비밀번호입니다.'] = ''; +//$__text['첫 페이지로 돌아가기'] = ''; +//$__text['최근 댓글'] = ''; +//$__text['최근 트랙백'] = ''; +//$__text['취소'] = ''; +//$__text['태그'] = ''; //$__text['텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다.'] = ''; //$__text['텍스트큐브는 개인 사용자부터 서비스 구축까지 넓은 폭으로 사용할 수 있으며, 플러그인과 테마 시스템, 다국어 지원을 통하여 무한한 확장성을 제공합니다.'] = ''; +//$__text['트랙백'] = ''; +//$__text['페이지'] = ''; ?> \ No newline at end of file diff --git a/resources/locale/mobile/ja.php b/resources/locale/mobile/ja.php index 284c9716d..79c85ecbb 100644 --- a/resources/locale/mobile/ja.php +++ b/resources/locale/mobile/ja.php @@ -26,11 +26,11 @@ $__text['Australia/Darwin'] = 'オーストラリア(ダーウィン)'; $__text['Australia/Perth'] = 'オーストラリア(パース)'; +//$__text['%1 페이지'] = ''; $__text['2007년 4월 23일 TNF의 박용주님에 의하여 S2는 텍스트큐브로 명명 되었으며, 이후 개발 기간을 거쳐 2007년 8월 16일 TNF에 의하여 텍스트큐브의 첫 정식 버전인 텍스트큐브 1.5가 발표되었습니다.'] = '平成19(2007)年4月23日、Project S2の名称はTNFメンバーのパク・ヨンジュウさんによってTextcubeで決めらた。そして、平成19(2007)年8月16日にやがて初版であるTextcube 1.5が発表された。'; $__text['2007년 4월 태터앤프렌즈(TNF)는 태터 네트워크 재단(TNF, Tatter Network Foundation) 계획과 함께 적극적 참여 집단인 니들웍스(Needlworks) 를 발표하였습니다. 또한 태터툴즈를 기반으로 하는 오픈소스 블로그 소프트웨어인 S2 개발 계획도 발표하였습니다.'] = '平成19(2007)年4月、テト・アンド・フレンズ(TNF)はテト・ネットワーク財団(TNF=Tatter Network Foundation)の計画と共にオープンソース開発団体のNeedlworksを発足した。そして、その2つの計画と共に既存のテト・ツールズに基づいた新しいオープンソースのブログソフトウェア、Project S2を発表した。'; //$__text['Administrator access only.'] = ''; //$__text['Blocked %1'] = ''; -//$__text['Blog Login'] = ''; //$__text['Cannot write comment.'] = ''; //$__text['Comment delete error'] = ''; //$__text['Comment delete error.'] = ''; @@ -40,22 +40,43 @@ //$__text['Comment write error.'] = ''; //$__text['Delete Comment'] = ''; //$__text['Delete comment?'] = ''; +//$__text['E-mail 저장'] = ''; //$__text['E-mail'] = ''; //$__text['Go to comments page'] = ''; //$__text['Go to front page'] = ''; //$__text['Incorrect Password.'] = ''; //$__text['No'] = ''; //$__text['Password (again)!'] = ''; -//$__text['Password'] = ''; //$__text['Password:'] = ''; -//$__text['Permission denied.'] = ''; //$__text['Please enter Password.'] = ''; //$__text['Please enter content.'] = ''; //$__text['Please enter your name.'] = ''; -//$__text['Wrong E-mail or Password.'] = ''; //$__text['Wrong password.'] = ''; //$__text['Yes'] = ''; //$__text['You have to log in with and OpenID to leave a comment.'] = ''; +//$__text['검색 결과'] = ''; +//$__text['검색'] = ''; +//$__text['권한이 없습니다.'] = ''; +//$__text['글 검색'] = ''; +//$__text['글목록'] = ''; +//$__text['로그아웃'] = ''; +//$__text['로그인 하였습니다.'] = ''; +//$__text['로그인'] = ''; +//$__text['링크'] = ''; +//$__text['모든 카테고리'] = ''; +//$__text['방명록'] = ''; +//$__text['보관목록'] = ''; +//$__text['분류'] = ''; +//$__text['블로그 로그인'] = ''; +//$__text['비밀번호'] = ''; +//$__text['잘못된 E-mail 주소 또는 비밀번호입니다.'] = ''; +//$__text['첫 페이지로 돌아가기'] = ''; +//$__text['최근 댓글'] = ''; +//$__text['최근 트랙백'] = ''; +//$__text['취소'] = ''; +//$__text['태그'] = ''; $__text['텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다.'] = 'Textcubeはネットから自分の考えや日常を記録・表現するためのプログラムです。'; $__text['텍스트큐브는 개인 사용자부터 서비스 구축까지 넓은 폭으로 사용할 수 있으며, 플러그인과 테마 시스템, 다국어 지원을 통하여 무한한 확장성을 제공합니다.'] = 'Textcubeは個人用ブログの用途から大型サービスの構築までいろんな用途での利用ができます。Textcubeのプラグインやテーマシステム、国際化対応などで無限の拡張性を提供します。'; +//$__text['트랙백'] = ''; +//$__text['페이지'] = ''; ?> \ No newline at end of file diff --git a/resources/locale/mobile/ko.php b/resources/locale/mobile/ko.php index 94cb113ae..b4f8d8aa8 100644 --- a/resources/locale/mobile/ko.php +++ b/resources/locale/mobile/ko.php @@ -31,11 +31,11 @@ $__text['토요일'] = '토'; +//$__text['%1 페이지'] = ''; //$__text['2007년 4월 23일 TNF의 박용주님에 의하여 S2는 텍스트큐브로 명명 되었으며, 이후 개발 기간을 거쳐 2007년 8월 16일 TNF에 의하여 텍스트큐브의 첫 정식 버전인 텍스트큐브 1.5가 발표되었습니다.'] = ''; //$__text['2007년 4월 태터앤프렌즈(TNF)는 태터 네트워크 재단(TNF, Tatter Network Foundation) 계획과 함께 적극적 참여 집단인 니들웍스(Needlworks) 를 발표하였습니다. 또한 태터툴즈를 기반으로 하는 오픈소스 블로그 소프트웨어인 S2 개발 계획도 발표하였습니다.'] = ''; //$__text['Administrator access only.'] = ''; //$__text['Blocked %1'] = ''; -//$__text['Blog Login'] = ''; //$__text['Cannot write comment.'] = ''; //$__text['Comment delete error'] = ''; //$__text['Comment delete error.'] = ''; @@ -45,22 +45,43 @@ //$__text['Comment write error.'] = ''; //$__text['Delete Comment'] = ''; //$__text['Delete comment?'] = ''; +//$__text['E-mail 저장'] = ''; //$__text['E-mail'] = ''; //$__text['Go to comments page'] = ''; //$__text['Go to front page'] = ''; //$__text['Incorrect Password.'] = ''; //$__text['No'] = ''; //$__text['Password (again)!'] = ''; -//$__text['Password'] = ''; //$__text['Password:'] = ''; -//$__text['Permission denied.'] = ''; //$__text['Please enter Password.'] = ''; //$__text['Please enter content.'] = ''; //$__text['Please enter your name.'] = ''; -//$__text['Wrong E-mail or Password.'] = ''; //$__text['Wrong password.'] = ''; //$__text['Yes'] = ''; //$__text['You have to log in with and OpenID to leave a comment.'] = ''; +//$__text['검색 결과'] = ''; +//$__text['검색'] = ''; +//$__text['권한이 없습니다.'] = ''; +//$__text['글 검색'] = ''; +//$__text['글목록'] = ''; +//$__text['로그아웃'] = ''; +//$__text['로그인 하였습니다.'] = ''; +//$__text['로그인'] = ''; +//$__text['링크'] = ''; +//$__text['모든 카테고리'] = ''; +//$__text['방명록'] = ''; +//$__text['보관목록'] = ''; +//$__text['분류'] = ''; +//$__text['블로그 로그인'] = ''; +//$__text['비밀번호'] = ''; +//$__text['잘못된 E-mail 주소 또는 비밀번호입니다.'] = ''; +//$__text['첫 페이지로 돌아가기'] = ''; +//$__text['최근 댓글'] = ''; +//$__text['최근 트랙백'] = ''; +//$__text['취소'] = ''; +//$__text['태그'] = ''; //$__text['텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다.'] = ''; //$__text['텍스트큐브는 개인 사용자부터 서비스 구축까지 넓은 폭으로 사용할 수 있으며, 플러그인과 테마 시스템, 다국어 지원을 통하여 무한한 확장성을 제공합니다.'] = ''; +//$__text['트랙백'] = ''; +//$__text['페이지'] = ''; ?> \ No newline at end of file diff --git a/resources/locale/mobile/vi.php b/resources/locale/mobile/vi.php index 29ad6a8c6..27be76348 100644 --- a/resources/locale/mobile/vi.php +++ b/resources/locale/mobile/vi.php @@ -30,11 +30,11 @@ $__text['토요일'] = 'Thứ bảy'; +//$__text['%1 페이지'] = ''; //$__text['2007년 4월 23일 TNF의 박용주님에 의하여 S2는 텍스트큐브로 명명 되었으며, 이후 개발 기간을 거쳐 2007년 8월 16일 TNF에 의하여 텍스트큐브의 첫 정식 버전인 텍스트큐브 1.5가 발표되었습니다.'] = ''; //$__text['2007년 4월 태터앤프렌즈(TNF)는 태터 네트워크 재단(TNF, Tatter Network Foundation) 계획과 함께 적극적 참여 집단인 니들웍스(Needlworks) 를 발표하였습니다. 또한 태터툴즈를 기반으로 하는 오픈소스 블로그 소프트웨어인 S2 개발 계획도 발표하였습니다.'] = ''; //$__text['Administrator access only.'] = ''; //$__text['Blocked %1'] = ''; -//$__text['Blog Login'] = ''; //$__text['Cannot write comment.'] = ''; //$__text['Comment delete error'] = ''; //$__text['Comment delete error.'] = ''; @@ -44,22 +44,43 @@ //$__text['Comment write error.'] = ''; //$__text['Delete Comment'] = ''; //$__text['Delete comment?'] = ''; +//$__text['E-mail 저장'] = ''; //$__text['E-mail'] = ''; //$__text['Go to comments page'] = ''; //$__text['Go to front page'] = ''; //$__text['Incorrect Password.'] = ''; //$__text['No'] = ''; //$__text['Password (again)!'] = ''; -//$__text['Password'] = ''; //$__text['Password:'] = ''; -//$__text['Permission denied.'] = ''; //$__text['Please enter Password.'] = ''; //$__text['Please enter content.'] = ''; //$__text['Please enter your name.'] = ''; -//$__text['Wrong E-mail or Password.'] = ''; //$__text['Wrong password.'] = ''; //$__text['Yes'] = ''; //$__text['You have to log in with and OpenID to leave a comment.'] = ''; +//$__text['검색 결과'] = ''; +//$__text['검색'] = ''; +//$__text['권한이 없습니다.'] = ''; +//$__text['글 검색'] = ''; +//$__text['글목록'] = ''; +//$__text['로그아웃'] = ''; +//$__text['로그인 하였습니다.'] = ''; +//$__text['로그인'] = ''; +//$__text['링크'] = ''; +//$__text['모든 카테고리'] = ''; +//$__text['방명록'] = ''; +//$__text['보관목록'] = ''; +//$__text['분류'] = ''; +//$__text['블로그 로그인'] = ''; +//$__text['비밀번호'] = ''; +//$__text['잘못된 E-mail 주소 또는 비밀번호입니다.'] = ''; +//$__text['첫 페이지로 돌아가기'] = ''; +//$__text['최근 댓글'] = ''; +//$__text['최근 트랙백'] = ''; +//$__text['취소'] = ''; +//$__text['태그'] = ''; //$__text['텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다.'] = ''; //$__text['텍스트큐브는 개인 사용자부터 서비스 구축까지 넓은 폭으로 사용할 수 있으며, 플러그인과 테마 시스템, 다국어 지원을 통하여 무한한 확장성을 제공합니다.'] = ''; +//$__text['트랙백'] = ''; +//$__text['페이지'] = ''; ?> \ No newline at end of file diff --git a/resources/locale/mobile/zh-CN.php b/resources/locale/mobile/zh-CN.php index 12d2c69e7..dd999dd91 100644 --- a/resources/locale/mobile/zh-CN.php +++ b/resources/locale/mobile/zh-CN.php @@ -23,11 +23,11 @@ $__text['Australia/Perth'] = '珀斯(澳大利亚)'; +//$__text['%1 페이지'] = ''; $__text['2007년 4월 23일 TNF의 박용주님에 의하여 S2는 텍스트큐브로 명명 되었으며, 이후 개발 기간을 거쳐 2007년 8월 16일 TNF에 의하여 텍스트큐브의 첫 정식 버전인 텍스트큐브 1.5가 발표되었습니다.'] = '2007年4月23日, 由 TNF 所主导的 S2 项目, 名为 되었으며, 并决定使用 TextCube 这个名称. 初版的 TextCube 1.5 在 2007 年 8 月 16 日发表。'; $__text['2007년 4월 태터앤프렌즈(TNF)는 태터 네트워크 재단(TNF, Tatter Network Foundation) 계획과 함께 적극적 참여 집단인 니들웍스(Needlworks) 를 발표하였습니다. 또한 태터툴즈를 기반으로 하는 오픈소스 블로그 소프트웨어인 S2 개발 계획도 발표하였습니다.'] = '2007年4月由TNF(TNF, Tatter Network Foundation)与开放原始码团体(Needlworks)共同计划以及发布了项目 S2 的开放原始码的博客软件。'; $__text['Administrator access only.'] = '仅限最高权限使用者使用。'; $__text['Blocked %1'] = '已阻挡 %1'; -$__text['Blog Login'] = '博客登入'; $__text['Cannot write comment.'] = '无法写入评论。'; $__text['Comment delete error'] = '删除评论错误。'; $__text['Comment delete error.'] = '删除评论错误。'; @@ -37,22 +37,43 @@ $__text['Comment write error.'] = '写入评论错误。'; $__text['Delete Comment'] = '删除评论'; $__text['Delete comment?'] = '是否删除评论?'; +//$__text['E-mail 저장'] = ''; //$__text['E-mail'] = ''; $__text['Go to comments page'] = '前往评论页面'; $__text['Go to front page'] = '前往首页'; $__text['Incorrect Password.'] = '错误的密码。'; //$__text['No'] = ''; $__text['Password (again)!'] = '密码(请再输入一次)!'; -$__text['Password'] = '密码'; $__text['Password:'] = '密码:'; -$__text['Permission denied.'] = '权限错误。'; $__text['Please enter Password.'] = '请输入密码。'; $__text['Please enter content.'] = '请输入内文。'; $__text['Please enter your name.'] = '请输入您的姓名。'; -//$__text['Wrong E-mail or Password.'] = ''; //$__text['Wrong password.'] = ''; //$__text['Yes'] = ''; //$__text['You have to log in with and OpenID to leave a comment.'] = ''; +//$__text['검색 결과'] = ''; +//$__text['검색'] = ''; +//$__text['권한이 없습니다.'] = ''; +//$__text['글 검색'] = ''; +//$__text['글목록'] = ''; +//$__text['로그아웃'] = ''; +//$__text['로그인 하였습니다.'] = ''; +//$__text['로그인'] = ''; +//$__text['링크'] = ''; +//$__text['모든 카테고리'] = ''; +//$__text['방명록'] = ''; +//$__text['보관목록'] = ''; +//$__text['분류'] = ''; +//$__text['블로그 로그인'] = ''; +//$__text['비밀번호'] = ''; +//$__text['잘못된 E-mail 주소 또는 비밀번호입니다.'] = ''; +//$__text['첫 페이지로 돌아가기'] = ''; +//$__text['최근 댓글'] = ''; +//$__text['최근 트랙백'] = ''; +//$__text['취소'] = ''; +//$__text['태그'] = ''; $__text['텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다.'] = 'TextCube 是用于展现与记录自己的想法,与日常生活的工具。'; $__text['텍스트큐브는 개인 사용자부터 서비스 구축까지 넓은 폭으로 사용할 수 있으며, 플러그인과 테마 시스템, 다국어 지원을 통하여 무한한 확장성을 제공합니다.'] = 'TextCube 博客提供个人至大型服务器与其各种用途使用。以扩充插件以及主题模板系统与国际化对应提供无限的扩充性。'; +//$__text['트랙백'] = ''; +//$__text['페이지'] = ''; ?> \ No newline at end of file diff --git a/resources/locale/mobile/zh-TW.php b/resources/locale/mobile/zh-TW.php index 495bd730b..b7ca7d742 100644 --- a/resources/locale/mobile/zh-TW.php +++ b/resources/locale/mobile/zh-TW.php @@ -23,11 +23,11 @@ $__text['Australia/Perth'] = '珀斯(澳大利亞)'; +//$__text['%1 페이지'] = ''; $__text['2007년 4월 23일 TNF의 박용주님에 의하여 S2는 텍스트큐브로 명명 되었으며, 이후 개발 기간을 거쳐 2007년 8월 16일 TNF에 의하여 텍스트큐브의 첫 정식 버전인 텍스트큐브 1.5가 발표되었습니다.'] = '2007年4月23日, 由 TNF 所主導的 S2 專案, 名為 되었으며, 並決定使用 TextCube 這個名稱. 初版的 TextCube 1.5 在 2007 年 8 月 16 日發表。'; $__text['2007년 4월 태터앤프렌즈(TNF)는 태터 네트워크 재단(TNF, Tatter Network Foundation) 계획과 함께 적극적 참여 집단인 니들웍스(Needlworks) 를 발표하였습니다. 또한 태터툴즈를 기반으로 하는 오픈소스 블로그 소프트웨어인 S2 개발 계획도 발표하였습니다.'] = '2007年4月由TNF(TNF, Tatter Network Foundation)與開放原始碼團體(Needlworks)共同計劃以及發佈了專案 S2 的開放原始碼的部落格軟體。'; $__text['Administrator access only.'] = '僅限最高權限使用者使用。'; $__text['Blocked %1'] = '已阻擋 %1'; -$__text['Blog Login'] = '部落格登入'; $__text['Cannot write comment.'] = '無法寫入評論。'; $__text['Comment delete error'] = '刪除評論錯誤。'; $__text['Comment delete error.'] = '刪除評論錯誤。'; @@ -37,22 +37,43 @@ $__text['Comment write error.'] = '寫入評論錯誤。'; $__text['Delete Comment'] = '刪除評論'; $__text['Delete comment?'] = '是否刪除評論?'; +//$__text['E-mail 저장'] = ''; //$__text['E-mail'] = ''; $__text['Go to comments page'] = '前往評論頁面'; $__text['Go to front page'] = '前往首頁'; $__text['Incorrect Password.'] = '錯誤的密碼。'; //$__text['No'] = ''; $__text['Password (again)!'] = '密碼(請再輸入一次)!'; -$__text['Password'] = '密碼'; $__text['Password:'] = '密碼:'; -$__text['Permission denied.'] = '權限錯誤。'; $__text['Please enter Password.'] = '請輸入密碼。'; $__text['Please enter content.'] = '請輸入內文。'; $__text['Please enter your name.'] = '請輸入您的姓名。'; -//$__text['Wrong E-mail or Password.'] = ''; //$__text['Wrong password.'] = ''; //$__text['Yes'] = ''; //$__text['You have to log in with and OpenID to leave a comment.'] = ''; +//$__text['검색 결과'] = ''; +//$__text['검색'] = ''; +//$__text['권한이 없습니다.'] = ''; +//$__text['글 검색'] = ''; +//$__text['글목록'] = ''; +//$__text['로그아웃'] = ''; +//$__text['로그인 하였습니다.'] = ''; +//$__text['로그인'] = ''; +//$__text['링크'] = ''; +//$__text['모든 카테고리'] = ''; +//$__text['방명록'] = ''; +//$__text['보관목록'] = ''; +//$__text['분류'] = ''; +//$__text['블로그 로그인'] = ''; +//$__text['비밀번호'] = ''; +//$__text['잘못된 E-mail 주소 또는 비밀번호입니다.'] = ''; +//$__text['첫 페이지로 돌아가기'] = ''; +//$__text['최근 댓글'] = ''; +//$__text['최근 트랙백'] = ''; +//$__text['취소'] = ''; +//$__text['태그'] = ''; $__text['텍스트큐브(Textcube) 는 웹에서 자신의 생각이나 일상을 기록하고 표현하기 위한 도구입니다.'] = 'TextCube 是用於展現與記錄自己的想法,與日常生活的工具。'; $__text['텍스트큐브는 개인 사용자부터 서비스 구축까지 넓은 폭으로 사용할 수 있으며, 플러그인과 테마 시스템, 다국어 지원을 통하여 무한한 확장성을 제공합니다.'] = 'TextCube 部落格提供個人至大型服務器與其各種用途使用。以擴充插件以及主題模板系統與國際化對應提供無限的擴充性。'; +//$__text['트랙백'] = ''; +//$__text['페이지'] = ''; ?> \ No newline at end of file diff --git a/resources/locale/owner/en.php b/resources/locale/owner/en.php index 3bd71aed0..51e967505 100644 --- a/resources/locale/owner/en.php +++ b/resources/locale/owner/en.php @@ -35,10 +35,13 @@ $__text["%1 설정"] = 'Set up %1'; $__text["%1님께서 블로그의 팀원으로 초대합니다"] = '%1 as a teamblog leader invites you to join'; $__text["BlogAPI를 사용하는 편집기들은 이 블로그로 글을 보내기 위하여 'API 주소'를 사용합니다."] = 'When using external blog editors, such as Ecto or MarsEdit, you can use this address.'; +$__text["관리자"] = 'Admin.'; +$__text["글관리"] = 'Post'; $__text["댓글 및 필자 정보에 사용되는 대표 홈페이지 주소를 설정합니다. 로그인 상태에서 댓글을 달 경우 댓글에 출력되는 블로그 아이콘은 이 주소의 정보에 의하여 결정됩니다."] = 'You can choose primal webpage address which will use as comments and author information. When you write on comment, blogicon on comment will decide as this information.'; -$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = "Your blog is ready. -You may begin using it immediately."; +$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = "Your blog is ready.\nYou may begin using it immediately."; +//$__text["소유자"] = ""; $__text["아래로"] = 'Move down'; +//$__text["없음"] = ""; $__text["오픈아이디를 현재 아이디와 연결합니다."] = 'Match OpenID with current login ID'; $__text["외부 편집기가 사용할 수 있는 주소를 만들어 주는 도우미입니다."] = 'You can make URL here for external editors.'; $__text["위로"] = 'Move Up'; @@ -60,7 +63,7 @@ $__text['%1 테이블을 최적화하고 있습니다.'] = 'Optimizing %1 table.'; $__text['%1 파일을 수정하실 수 있는 권한이 없습니다.'] = 'You have no authorization to edit file %1'; //$__text['%1/entry/'] = ''; -$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '%1 new feed(s) received.\nPlease update the reading list.'; +$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '%1 new feed(s) received.\\nPlease update the reading list.'; $__text['%1에 글을 공개합니다.'] = 'Publish to %1.'; $__text['%1은 올바른 이메일이 아닙니다.'] = '%1 is not a valid e-mail address.'; //$__text['© 2004 - 2009. 모든 저작권은 개발자 및 공헌자에게 있습니다.
    텍스트큐브는 니들웍스/TNF에서 개발합니다.
    텍스트큐브와 텍스트큐브 로고는 니들웍스의 상표입니다.'] = ''; @@ -83,16 +86,16 @@ $__text['2차 블로그 주소가 올바르지 않습니다.'] = '2nd Blog URL is invalid.'; $__text['2차 블로그 주소를 변경하지 못했습니다'] = 'Failed to change the second domain'; $__text['7일 평균'] = 'Avg.7 days'; -$__text['OPML 업로드'] = '&lt;acronym title="Outline Processor Markup Language"&gt;OPML&lt;/acronym&gt; Upload'; -$__text['RSS 주소'] = '&lt;acronym title="Rich Site Summary"&gt;RSS&lt;/acronym&gt; address'; -$__text['URL 입력'] = 'Typing &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt;'; +$__text['OPML 업로드'] = 'OPML Upload'; +$__text['RSS 주소'] = 'RSS address'; +$__text['URL 입력'] = 'Typing URL'; //$__text['ACL / i18n / XML-RPC API interface / OpenID / Microformat'] = ''; $__text['API Key 설정'] = 'Setting API Key'; $__text['API 용 비밀번호'] = 'Password for API'; $__text['API 주소'] = 'API address'; $__text['BlogAPI에 사용할 비밀번호입니다.'] = 'Password for BlogAPI'; $__text['Body Id 변경'] = 'Body Id'; -$__text['Body id는 블로그 스킨의 CSS 활용을 위해 사용합니다.
    기본값인 "tt-body-category"를 그냥 사용하셔도 사용에 지장은 없습니다.'] = 'Body Id is used for the skin &lt;acronym title="Cascading Style Sheet"&gt;CSS&lt;/acronym&gt;.&lt;br /&gt; You can use "tt-body-category" which is the default value'; +$__text['Body id는 블로그 스킨의 CSS 활용을 위해 사용합니다.
    기본값인 "tt-body-category"를 그냥 사용하셔도 사용에 지장은 없습니다.'] = 'Body Id is used for the skin CSS
    You can use "tt-body-category" which is the default value'; //$__text['Code Contributor'] = ''; //$__text['Core / DB management / Editor / Documentation'] = ''; //$__text['Default skin'] = ''; @@ -162,7 +165,7 @@ $__text['같이 사는'] = 'co-resident'; $__text['같이 일하는'] = 'co-worker'; $__text['개발자'] = 'Developer'; -$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '\n new feeds received.Please update the reading list.'; +$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '\\n new feeds received.Please update the reading list.'; $__text['개인 정보'] = 'Personal information'; $__text['갤러리 삽입'] = 'Insert Gallery'; $__text['갱신'] = 'Update'; @@ -211,6 +214,7 @@ //$__text['관리 패널 스킨은 로그인한 후 보여지는 패널의 디자인을 다양하게 변경합니다.'] = ''; //$__text['관리 패널 스킨을 추가하기 위해서는 관리 패널 스킨을 내려받아 /skin/admin 디렉토리에 설치하시면 됩니다.'] = ''; $__text['관리 패널 화면에서 사용할 언어를 설정합니다.'] = 'Choose language to be used on administration panel.'; +//$__text['관리 패널로 이동합니다.'] = ''; $__text['관리자 로그인 비밀번호와 동일하게 사용하실 경우 비워두시기 바랍니다.'] = 'Leave as blank if you want to use login password.'; $__text['관리자 비밀번호를 그대로 사용'] = 'Use admin\'s password'; $__text['관리자 플러그인'] = 'Admin plugin'; @@ -218,6 +222,7 @@ $__text['관리자'] = 'Admin.'; $__text['교정 대상을 확인하고 있습니다.'] = 'Looking up checklist'; $__text['권한'] = 'Permission'; +//$__text['권한이 없습니다.'] = ''; $__text['그대로 두기'] = 'Default'; $__text['그룹 이름을 입력하세요.'] = 'Type in group name.'; $__text['그룹을 삭제하고 있습니다.'] = 'Deleting Group.'; @@ -240,6 +245,8 @@ //$__text['글 쓰기'] = ''; $__text['글 작성 환경을 설정합니다'] = 'Authoring environment'; $__text['글 작성'] = 'Post'; +//$__text['글 작성자를 변경하지 못했습니다.'] = ''; +//$__text['글 작성자를 변경합니다.'] = ''; $__text['글 종류'] = 'Post type'; $__text['글 주소 표기법을 변경할 수 없습니다.'] = 'Could not change the permalink.'; $__text['글 주소'] = 'Permalink'; @@ -401,6 +408,7 @@ $__text['링크 추가'] = 'Add a link'; $__text['링크 카테고리 수정'] = 'Link category'; $__text['링크 카테고리 정보를 수정합니다'] = 'Modifying link category information'; +//$__text['링크 카테고리를 복원하고 있습니다.'] = ''; $__text['링크 카테고리를 수정하고 있습니다.'] = 'Modifying link category table.'; $__text['링크'] = 'Link'; $__text['링크가 삭제되었습니다.'] = 'Link deleted'; @@ -475,7 +483,7 @@ $__text['백업을 저장하고 있습니다.'] = 'Saving backup.'; //$__text['백업을 저장하지 못했습니다'] = ''; $__text['백업이 저장되었습니다.'] = 'Backup saved.'; -$__text['백업파일 URL'] = 'Backup file &lt;acronym title="Uniform Resource Locator"&gt;URL&lt;/acronym&gt;'; +$__text['백업파일 URL'] = 'Backup file URL'; $__text['백업파일 URL을 입력하십시오.'] = 'Enter Backup file URL.'; $__text['백업파일 경로'] = 'Backup file location'; $__text['백업파일 올리기.'] = 'Upload backup file'; @@ -485,7 +493,7 @@ $__text['백업파일을 가져오고 있습니다.'] = 'Getting backup file'; $__text['백업파일을 선택하십시오.'] = 'Select backup file.'; $__text['백업파일을 올리고 있습니다.'] = 'Uploading backup file'; -$__text['백업파일을 읽어서 데이터를 복원합니다.
    백업파일에 첨부파일이 포함되어 있으면 첨부파일도 자동으로 복원됩니다.
    이전 버전으로부터의 데이터도 복원을 통해 가져올 수 있습니다.'] = 'Restore data from the backup file.&lt;br /&gt;Attached files and migration data will also be restored..'; +$__text['백업파일을 읽어서 데이터를 복원합니다.
    백업파일에 첨부파일이 포함되어 있으면 첨부파일도 자동으로 복원됩니다.
    이전 버전으로부터의 데이터도 복원을 통해 가져올 수 있습니다.'] = 'Restore data from the backup file.
    Attached files and migration data will also be restored..'; $__text['백업파일을 자신의 하드디스크로부터 직접 선택하여 데이터베이스를 복원합니다. 백업파일의 용량이 업로드 허용용량을 초과하지 않는지 주의하십시오.'] = 'Restore database from local backup file. Make sure the backup file size does not exceed upload file size limit.'; $__text['백업파일을 저장할 공간에 권한이 없습니다.'] = 'Not authorized'; $__text['백업파일을 확인하고 있습니다.'] = 'Checking backup file.'; @@ -501,7 +509,7 @@ $__text['변경된 2차 블로그 주소로 이동합니다'] = 'Go to the updated 2nd blog URL'; $__text['변경된 기본 블로그 도메인으로 이동합니다.'] = 'Go to the updated primary blog URL'; $__text['변경된 블로그 주소로 이동합니다'] = 'Go to the updated blog URL.'; -$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = 'Style change(s) has not been saved. \n save the changes?'; +$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = 'Style change(s) has not been saved. \\n save the changes?'; $__text['변경하고 있습니다.'] = 'Modifying'; $__text['변경하지 못했습니다.'] = 'Could not modify.'; //$__text['변경한 관리 패널 스킨으로 현재 페이지를 다시 불러오시겠습니까?'] = ''; @@ -561,7 +569,7 @@ $__text['블로그 공개 정책을 설정합니다'] = 'Feed Settings'; $__text['블로그 권한 설정 과정에서 오류가 발생하였습니다.'] = 'Error has occurred while setting permission.'; $__text['블로그 글을 한 쪽당 %1개 보여줍니다.'] = 'Show %1 posts per page'; -$__text['블로그 로고 및 파비콘'] = 'Blog Logo &amp; Favicon'; +$__text['블로그 로고 및 파비콘'] = 'Blog Logo and Favicon'; $__text['블로그 메인으로 이동합니다.'] = 'To Blog Main Page'; $__text['블로그 설명'] = 'Blog Description'; $__text['블로그 설명을 변경하지 못했습니다.'] = 'Could not change blog description.'; @@ -622,7 +630,7 @@ $__text['비밀번호를 변경하시겠습니까?'] = 'Change Password?'; $__text['비밀번호를 입력해 주십시오.'] = 'Enter Password.'; $__text['비우기에 실패하였습니다.'] = 'Failed to delete.'; -$__text['비정상적인 데이터를 교정합니다.
    동적인 캐쉬 데이터는 재계산하여 저장합니다.'] = 'Correcting data.&lt;br /&gt; Active cache data will be recalculated and saved.'; +$__text['비정상적인 데이터를 교정합니다.
    동적인 캐쉬 데이터는 재계산하여 저장합니다.'] = 'Correcting data.
    Active cache data will be recalculated and saved.'; //$__text['사용 가능한 스킨 목록'] = ''; $__text['사용 불가능한 판번호'] = 'This version is not supported.'; $__text['사용가능한 스킨들의 목록입니다'] = 'Currently available skins'; @@ -680,11 +688,11 @@ $__text['새로운 비밀번호'] = 'New Password'; //$__text['새로운 사람을 블로그의 필자로 초대합니다. 초대장은 이메일을 통하여 발송됩니다. 메일 주소가 이미 블로그 서비스에 등록되어 있는 경우, 그 사용자에게 이 블로그의 필진 권한을 추가합니다. 사용자가 존재하지 않는 경우에는 새로운 사용자를 자동으로 등록하고 초대장을 발송합니다. 초대된 사람에게는 기본적으로 글쓰기 권한이 부여됩니다.'] = ''; $__text['새로운 사람을 블로그의 필진으로 초대합니다'] = 'Invite new author'; -$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'If you select new skin, all the page settings and sidebar changes for old skin will be deleted. \n Do you want to apply new skin?'; +$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'If you select new skin, all the page settings and sidebar changes for old skin will be deleted. \\n Do you want to apply new skin?'; $__text['생활반경'] = 'Geographical'; $__text['서버'] = 'Server'; $__text['서버에 %1에 백업한 파일이 존재합니다.'] = 'Backup file exists in the server. Created %1'; -$__text['서버에 %1에 저장된 백업파일이 있습니다. 삭제후 복원에는 이 파일을 이용하실 수 있습니다.'] = 'Found a backup file saved on the server in the location %1. You can use this for restoration.'; +$__text['서버에 %1에 저장된 백업파일이 있습니다. 삭제후 복원에는 이 파일을 이용하실 수 있습니다.'] = 'Found a backup file saved on the server in the location <em>%1</em>. You can use this for restoration.'; $__text['서버에 %1에 저장된 백업파일이 있습니다.'] = 'Found a backup file saved on the server in the location %1'; $__text['서버에 백업파일을 저장하여 복원에 사용할 수 있습니다.'] = 'save backup file on the server for restoration.'; $__text['서버에 저장'] = 'Save to Server'; @@ -757,7 +765,7 @@ $__text['소통'] = 'Communication'; $__text['손님이 글쓰기 허용'] = 'Allow visitors to write a guestbook entry'; $__text['수정'] = 'Edit'; -$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'You are using modified skin. If you select new skin, all the page settings and sidebar changes for old skin will be deleted. \n Do you want to apply new skin?'; +$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'You are using modified skin. If you select new skin, all the page settings and sidebar changes for old skin will be deleted. \\n Do you want to apply new skin?'; $__text['수정하기'] = 'Modify'; //$__text['수정한 파일은 내려받기 링크를 통해 다운로드 할 수 있습니다. 가장 최근에 수정한 파일을 내려 받기 위해서는 다운로드 전에 꼭 저장을 먼저 해 주시기 바랍니다. 스킨 파일은 하나의 html 파일로 되어 있기 때문에 다양한 웹 에디터를 사용해서 편집하셔도 문제가 없습니다. 내려받은 파일을 웹 에디터로 편집하신 후에 스킨 편집창에 붙여넣는 식으로 스킨을 수정하셔도 됩니다.'] = ''; $__text['수집하지 않음'] = 'Do not fetch'; @@ -808,9 +816,9 @@ $__text['애정'] = 'Sweet'; $__text['앰퍼샌드(&)가 들어간 카테고리 이름은 사용할 수 없습니다'] = 'Cannot use category name that contains ampersand($).'; $__text['어제'] = 'Yesterday'; -$__text['언어 및 시간대'] = 'Language &amp;amp; Timezone'; +$__text['언어 및 시간대'] = 'Language and Timezone'; $__text['언어'] = 'Language'; -$__text['언어, 시간대를 설정합니다'] = 'Language &amp;amp; Timezone'; +$__text['언어, 시간대를 설정합니다'] = 'Language and Timezone'; $__text['업데이트 주기'] = 'Update Frequency'; $__text['업로드 중..'] = 'Uploading..'; $__text['업로드 중지'] = 'Stop Uploading'; @@ -849,7 +857,7 @@ $__text['올바르지 않은 블로그 주소입니다'] = 'Invalid blog address.'; $__text['올바른 OPML 파일이 아닙니다.'] = 'Invalid OPML file.'; $__text['올바른 XML 파일이 아닙니다.'] = 'Invalid XML File.'; -$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = 'Invalid theme directory name.\nYou can use only alphabet, numeric numbers, underbar(_), null character, or dash(-).'; +$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = 'Invalid theme directory name.\\nYou can use only alphabet, numeric numbers, underbar(_), null character, or dash(-).'; $__text['올바른 피드가 아닙니다.'] = 'Invalid Feed.'; $__text['완료.'] = 'Complete'; $__text['완료되었습니다.'] = 'Completed'; @@ -925,7 +933,7 @@ $__text['이동'] = 'Move'; $__text['이름 변경'] = 'Rename'; $__text['이름 필터링'] = ' Name to be filtered'; -$__text['이름<이메일> 혹은 이메일'] = 'Name&amp;lt;Email&amp;gt; or Email'; +$__text['이름<이메일> 혹은 이메일'] = 'Name <Email> or Email'; $__text['이름'] = 'Name'; $__text['이름(e-mail)'] = 'Name (e-mail)'; $__text['이름순으로 표시합니다.'] = 'By name'; @@ -947,7 +955,7 @@ $__text['이미지 리샘플링 기능을 기본으로 사용합니다.'] = 'Use Image Resampling as Default '; $__text['이미지 리샘플링 정보'] = 'Image resampling information.'; $__text['이미지 리샘플링을 설정합니다'] = 'Image Resampling'; -$__text['이미지 리샘플링을 통하여 올린 이미지의 크기를 줄여 저장한 후 출력하여 블로그의 트래픽을 줄여줍니다.'] = 'Image Resampling will resize uploaded image. This will decrease blog traffic bandwidth.&lt;br /&gt;'; +$__text['이미지 리샘플링을 통하여 올린 이미지의 크기를 줄여 저장한 후 출력하여 블로그의 트래픽을 줄여줍니다.'] = 'Image Resampling will resize uploaded image. This will decrease blog traffic bandwidth.<br />'; $__text['이올린'] = 'Eolin'; $__text['이올린, 지금 만나보세요'] = 'Eolin, come to see me.'; //$__text['이올린에 발행된 글만을 RSS 및 ATOM 피드로 내보냅니다.'] = ''; @@ -961,7 +969,7 @@ $__text['인기도순으로 표시합니다.'] = 'By clicks'; $__text['일'] = 'day(s)'; $__text['일로서 아는'] = 'Acquaintance'; -$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = 'Usually when restoring, original data is overwritten. \n Not to overwrite but add backup file, open backup file and change migrational=false to migrational=true. Please check the file and proceed. \n Do you want to continue? '; +$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = 'Usually when restoring, original data is overwritten. \\n Not to overwrite but add backup file, open backup file and change migrational=false to migrational=true. Please check the file and proceed. \\n Do you want to continue? '; $__text['일별 통계 정보를 복원하고 있습니다.'] = 'Restoring daily stats..'; $__text['읽은 글 감추기'] = 'Hide read'; $__text['읽지 않은 상태로 변경하였습니다.'] = 'Marked as unread.'; @@ -1025,11 +1033,11 @@ $__text['정보가져오기'] = 'Retrieve information'; $__text['제목'] = 'Title'; $__text['제목을 입력해 주십시오.'] = 'Enter Title.'; -//$__text['제어판으로 이동합니다.'] = ''; $__text['제외할 수 없습니다'] = 'Cannot exclude.'; $__text['제작자'] = 'Author'; $__text['조각보'] = 'Dashboard'; $__text['조각보를 봅니다'] = 'Dashboard'; +//$__text['존재하지 않은 사용자입니다'] = ''; $__text['종류'] = 'Type'; //$__text['죄송합니다. 아직 해당 메뉴에 대한 도움말이 준비되지 않았습니다.'] = ''; $__text['주소를 입력해 주십시오.'] = 'Enter Address'; @@ -1060,7 +1068,7 @@ $__text['초기화'] = 'Reset'; //$__text['초대 링크'] = ''; $__text['초대 메시지'] = 'Invite message'; -$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = 'Enter invitee`s name&lt;Email&gt;.\nYou can only enter the email.'; +$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = 'Enter invitee`s name\nYou can only enter the email.'; $__text['초대받을 사람이 사용할 블로그 식별자를 적어 주십시오.'] = 'Enter the blog name to be used by the invitee.'; $__text['초대상태'] = 'Status'; $__text['초대에 응하지 않은 사용자의 계정을 삭제합니다.'] = 'Delete the accounts associated with the unanswered invitations'; @@ -1126,7 +1134,7 @@ //$__text['키워드 만들기'] = ''; $__text['키워드'] = 'Keyword'; $__text['키워드를 복원하고 있습니다.'] = 'Restoring Keyword'; -$__text['태그 & 위치'] = 'Tag &amp;amp; Location'; +$__text['태그 & 위치'] = 'Tag & Location'; //$__text['태그 관리'] = ''; //$__text['태그 삭제'] = ''; $__text['태그 선택 시'] = 'When tag is selected'; @@ -1159,15 +1167,15 @@ $__text['텍스트큐브 개발자'] = 'Textcube Developers'; $__text['텍스트큐브 관리 페이지'] = 'Textcube Administration Page'; //$__text['텍스트큐브 관리'] = ''; -$__text['텍스트큐브 글목록에서 발행버튼을 누르거나 글쓰기시 공개범위를 "발행"으로 체크하면 됩니다.'] = 'To publishthe entry, click publish button in Textcube entry list or check \"publish\" in publish option while you are writing'; +$__text['텍스트큐브 글목록에서 발행버튼을 누르거나 글쓰기시 공개범위를 "발행"으로 체크하면 됩니다.'] = 'To publishthe entry, click publish button in Textcube entry list or check \\"publish\\" in publish option while you are writing'; $__text['텍스트큐브 시스템 점검이 필요합니다. 지금 점검하시겠습니까?'] = 'System check is necessary. Start the system check now?'; $__text['텍스트큐브 홈페이지의 %1을 방문하시면 다양한 스킨을 다운로드 하실 수 있습니다. 일반적으로 스킨 파일을 텍스트큐브의 skin 디렉토리로 업로드하면 설치가 완료됩니다. 업로드가 완료된 스킨은 이 메뉴에서 적용 버튼을 눌러 사용하실 수 있습니다.'] = 'More themes can be found at %1. To use the theme, upload the theme file onto the skin directory, find the downloaded theme from the list, and click to select.'; $__text['텍스트큐브 홈페이지의 %1을 방문하시면 다양한 플러그인을 받을 수 있습니다. 받은 플러그인 파일을 텍스트큐브의 plugin 디렉토리(폴더)로 업로드하면 설치가 완료됩니다. 업로드 후, 이 페이지에서 해당 플러그인을 사용중으로 전환하여 사용을 시작할 수 있습니다.'] = 'Please visit %1 at Textcube site to download more plugins. You can upload plugins into the /plugin folder of your Textcube install. Once uploaded, you can activate them here.'; $__text['텍스트큐브 홈페이지의 스킨 업로드 게시판으로 연결합니다.'] = 'Connecting to the Theme upload BBS on Textcube official homepage.'; $__text['텍스트큐브'] = 'Textcube'; $__text['텍스트큐브는'] = 'About Textcube'; -$__text['텍스트큐브의 동작을 위하여 모듈이 필요한 부분마다 최소 하나 이상이 필요합니다.\n현재 해당 모듈이 하나밖에 존재하지 않기 때문에 이 모듈의 동작을 중지시킬 수 없습니다.'] = 'At lease one module is needed to make Textcube work.\n You cannot inavtivate this module because it is the only one activated. '; -$__text['텍스트큐브의 모든 데이터를 삭제합니다.
    첨부파일의 삭제 여부를 선택하실 수 있습니다.
    데이터의 복원은 백업파일을 통해서만 가능하므로 먼저 백업을 하시기 바랍니다.'] = 'Erase Textcube data.&lt;br /&gt;You can optionally choose to erase attachments.&lt;br /&gt;Recovering data is only possible through the Restore data option so please do a backup first.'; +$__text['텍스트큐브의 동작을 위하여 모듈이 필요한 부분마다 최소 하나 이상이 필요합니다.\n현재 해당 모듈이 하나밖에 존재하지 않기 때문에 이 모듈의 동작을 중지시킬 수 없습니다.'] = 'At lease one module is needed to make Textcube work.\\n You cannot inavtivate this module because it is the only one activated. '; +$__text['텍스트큐브의 모든 데이터를 삭제합니다.
    첨부파일의 삭제 여부를 선택하실 수 있습니다.
    데이터의 복원은 백업파일을 통해서만 가능하므로 먼저 백업을 하시기 바랍니다.'] = 'Erase Textcube data.<br />You can optionally choose to erase attachments.<br />Recovering data is only possible through the Restore data option so please do a backup first.'; $__text['트랙백 리스트'] = 'Trackback list'; $__text['트랙백 영역'] = 'Trackback'; $__text['트리 속성'] = 'Tree Property'; @@ -1249,7 +1257,7 @@ //$__text['필터를 추가하였습니다.'] = ''; //$__text['필터를 추가하지 못했습니다.'] = ''; $__text['필터링을 삭제하지 못했습니다.'] = 'Could not delete filter'; -$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = 'A feed received.\nPlease update the feed.'; +$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = 'A feed received.\\nPlease update the feed.'; $__text['하위 분류가 있으므로 삭제할 수 없습니다.'] = 'Could not delete the category as it contains sub-category(ies).'; $__text['한 쪽당 글 수'] = 'Posts per page'; $__text['한 페이지에 글 %1건 표시'] = 'Show %1 posts per page'; @@ -1273,7 +1281,7 @@ //$__text['현재 자동 저장 중입니다. 저장이 완료된 후 다시 시도해 주세요.'] = ''; //$__text['현재 태그'] = ''; $__text['현재글 스크랩'] = 'Star This Article'; -$__text['현재의 모든 데이터를 TTXML형태의 백업파일로 보관합니다.
    첨부파일을 포함시킬 수 있으며, 복원할 경우 자동으로 첨부파일이 처리됩니다.
    백업파일은 서버에 저장하거나 다운받으실 수 있습니다.'] = 'Store all data as TTXML backup file.&lt;br /&gt;You can include attachments, and they will be processed automatically when restoring.&lt;br /&gt;You can download backup file or store at the server.'; +$__text['현재의 모든 데이터를 TTXML형태의 백업파일로 보관합니다.
    첨부파일을 포함시킬 수 있으며, 복원할 경우 자동으로 첨부파일이 처리됩니다.
    백업파일은 서버에 저장하거나 다운받으실 수 있습니다.'] = 'Store all data as TTXML backup file.<br />You can include attachments, and they will be processed automatically when restoring.<br />You can download backup file or store at the server.'; //$__text['현재의 태그를 새로운 이름으로 변경합니다.'] = ''; $__text['형제,자매'] = 'Sibling'; $__text['홈페이지 이름'] = 'Site Name'; @@ -1285,7 +1293,7 @@ $__text['확인'] = 'Confirm'; $__text['확장 지원'] = 'Extend support'; $__text['환경설정'] = 'Settings'; -$__text['환영합니다. %1님.'] = 'Welcome, %1'; +$__text['환영합니다. %1님.'] = 'Welcome, <em>%1</em>'; $__text['휴지통 내의 모든 걸린글을 삭제합니다. 계속 하시겠습니까?'] = 'Delete every trackback in trash. Ok to proceed.'; $__text['휴지통 내의 모든 댓글 및 방명록을 삭제합니다. 계속 하시겠습니까?'] = 'Delete every comments and guestbook in trash. Ok to proceed.'; $__text['휴지통 비우기'] = 'Empty trash'; diff --git a/resources/locale/owner/ja.php b/resources/locale/owner/ja.php index 11bb0b530..c234dd29c 100644 --- a/resources/locale/owner/ja.php +++ b/resources/locale/owner/ja.php @@ -29,9 +29,13 @@ $__text["%1 설정"] = '%1の設定'; $__text["%1님께서 블로그의 팀원으로 초대합니다"] = '%1さんからあなたをチームブログのメンバーに招待します。'; $__text["BlogAPI를 사용하는 편집기들은 이 블로그로 글을 보내기 위하여 'API 주소'를 사용합니다."] = 'BlogAPIを利用するエディターで作成した記事をこのブログに送信するためには\'APIアドレス\'を必要とします。'; +$__text["관리자"] = '管理者'; +$__text["글관리"] = '記事管理'; $__text["댓글 및 필자 정보에 사용되는 대표 홈페이지 주소를 설정합니다. 로그인 상태에서 댓글을 달 경우 댓글에 출력되는 블로그 아이콘은 이 주소의 정보에 의하여 결정됩니다."] = '作成者情報に表示するRepresenting URLを設定します。サインインしてコメントを作成したらコメントに表示されるアイコンはこのURLから情報を取得します。'; //$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = ""; +//$__text["소유자"] = ""; $__text["아래로"] = '下段へ'; +//$__text["없음"] = ""; $__text["오픈아이디를 현재 아이디와 연결합니다."] = '利用中の名前をOpenIDとリンクします。'; $__text["외부 편집기가 사용할 수 있는 주소를 만들어 주는 도우미입니다."] = 'BlogAPIを利用するエディターから利用するAPIアドレスを作成する<strong>BlogAPIマネジャー</strong>です。'; $__text["위로"] = '上段へ'; @@ -53,7 +57,7 @@ $__text['%1 테이블을 최적화하고 있습니다.'] = '%1 テーブルを最適化中…'; $__text['%1 파일을 수정하실 수 있는 권한이 없습니다.'] = '%1への編集権限をお持ちしておりません。'; //$__text['%1/entry/'] = ''; -$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '%1 件のフィードを取得しました。\nフィードを更新してください。'; +$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '%1 件のフィードを取得しました。\\nフィードを更新してください。'; $__text['%1에 글을 공개합니다.'] = '%1に記事発行'; $__text['%1은 올바른 이메일이 아닙니다.'] = '%1 は正しい形式のメール アドレスではありません。'; //$__text['© 2004 - 2009. 모든 저작권은 개발자 및 공헌자에게 있습니다.
    텍스트큐브는 니들웍스/TNF에서 개발합니다.
    텍스트큐브와 텍스트큐브 로고는 니들웍스의 상표입니다.'] = ''; @@ -155,7 +159,7 @@ $__text['같이 사는'] = '同居中'; $__text['같이 일하는'] = '仲間'; $__text['개발자'] = '開発者'; -$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '件のフィードを取得しました。\nフィードを更新してください。'; +$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '件のフィードを取得しました。\\nフィードを更新してください。'; $__text['개인 정보'] = '個人情報'; $__text['갤러리 삽입'] = 'ギャラリー挿入'; $__text['갱신'] = '更新'; @@ -204,6 +208,7 @@ //$__text['관리 패널 스킨은 로그인한 후 보여지는 패널의 디자인을 다양하게 변경합니다.'] = ''; //$__text['관리 패널 스킨을 추가하기 위해서는 관리 패널 스킨을 내려받아 /skin/admin 디렉토리에 설치하시면 됩니다.'] = ''; $__text['관리 패널 화면에서 사용할 언어를 설정합니다.'] = '管理者モードの利用言語を設定します。'; +//$__text['관리 패널로 이동합니다.'] = ''; $__text['관리자 로그인 비밀번호와 동일하게 사용하실 경우 비워두시기 바랍니다.'] = '管理者パスワードと一緒にするなら空のままでおいてください。'; $__text['관리자 비밀번호를 그대로 사용'] = '管理者パスワードと一緒に'; $__text['관리자 플러그인'] = '管理者プラグイン'; @@ -211,6 +216,7 @@ $__text['관리자'] = '管理者'; $__text['교정 대상을 확인하고 있습니다.'] = '校正するデータの確認中であります。'; $__text['권한'] = '権限'; +//$__text['권한이 없습니다.'] = ''; $__text['그대로 두기'] = 'そのままで'; $__text['그룹 이름을 입력하세요.'] = 'グループ名をご入力ください。'; $__text['그룹을 삭제하고 있습니다.'] = 'グループを削除中…'; @@ -233,6 +239,8 @@ //$__text['글 쓰기'] = ''; $__text['글 작성 환경을 설정합니다'] = '作成環境設定'; $__text['글 작성'] = '記事作成'; +//$__text['글 작성자를 변경하지 못했습니다.'] = ''; +//$__text['글 작성자를 변경합니다.'] = ''; $__text['글 종류'] = '記事タイプ'; $__text['글 주소 표기법을 변경할 수 없습니다.'] = '記事リンクの表記方法の更新に失敗しました。'; $__text['글 주소'] = '記事リンク'; @@ -394,6 +402,7 @@ $__text['링크 추가'] = 'ブックマーク作成'; $__text['링크 카테고리 수정'] = 'ブックマーク分類設定'; $__text['링크 카테고리 정보를 수정합니다'] = 'ブックマーク分類情報を更新します。'; +//$__text['링크 카테고리를 복원하고 있습니다.'] = ''; $__text['링크 카테고리를 수정하고 있습니다.'] = 'ブックマーク分類を更新します。'; $__text['링크'] = 'ブックマーク'; $__text['링크가 삭제되었습니다.'] = 'ブックマークを削除しました。'; @@ -494,7 +503,7 @@ $__text['변경된 2차 블로그 주소로 이동합니다'] = '更新された2次ブログURLへ進みます。'; $__text['변경된 기본 블로그 도메인으로 이동합니다.'] = '更新されたデフォルトURLへ進みます。'; $__text['변경된 블로그 주소로 이동합니다'] = '更新されたブログURLへ進みます。'; -$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = '更新したスタイルはまだ保存しておりません。\n保存しますか?'; +$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = '更新したスタイルはまだ保存しておりません。\\n保存しますか?'; $__text['변경하고 있습니다.'] = '更新中…'; $__text['변경하지 못했습니다.'] = '更新に失敗しました。'; //$__text['변경한 관리 패널 스킨으로 현재 페이지를 다시 불러오시겠습니까?'] = ''; @@ -657,7 +666,7 @@ $__text['삭제하기'] = '削除'; $__text['삭제하시겠습니까?'] = '削除しますか?'; $__text['삭제하지 못했습니다.'] = '削除に失敗しました。'; -$__text['삭제할 파일을 선택해 주십시오\t'] = '削除するファイルをご選択ください。\t'; +$__text['삭제할 파일을 선택해 주십시오\t'] = '削除するファイルをご選択ください。\\t'; $__text['삭제합니다.'] = '削除'; $__text['상태'] = '状態'; $__text['새 글 쓰기'] = '記事作成'; @@ -673,12 +682,12 @@ $__text['새로운 비밀번호'] = '新しいパスワード'; $__text['새로운 사람을 블로그의 필자로 초대합니다. 초대장은 이메일을 통하여 발송됩니다. 메일 주소가 이미 블로그 서비스에 등록되어 있는 경우, 그 사용자에게 이 블로그의 필진 권한을 추가합니다. 사용자가 존재하지 않는 경우에는 새로운 사용자를 자동으로 등록하고 초대장을 발송합니다. 초대된 사람에게는 기본적으로 글쓰기 권한이 부여됩니다.'] = '新規メンバーを招待します。招待状はメールで送信されます。新規メンバーの場合、招待された新規メンバーはメンバー作成と一緒に投稿者権限が付与されます。既登録メンバーの場合、投稿者権限を付与してます。'; $__text['새로운 사람을 블로그의 필진으로 초대합니다'] = '新規メンバー招待'; -$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'テーマを変更すると利用中のサイドバーの設定がリセットされます、\nよろしいですか?'; +$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'テーマを変更すると利用中のサイドバーの設定がリセットされます、\\nよろしいですか?'; $__text['생활반경'] = '生活'; $__text['서버'] = 'サーバー'; $__text['서버에 %1에 백업한 파일이 존재합니다.'] = 'サーバーに %1の頃に保存したバックアップデータが存在しております。'; -$__text['서버에 %1에 저장된 백업파일이 있습니다. 삭제후 복원에는 이 파일을 이용하실 수 있습니다.'] = 'サーバーに %1の頃に保存したバックアップデータが存在しております。このデータを復元に利用できます。'; -$__text['서버에 %1에 저장된 백업파일이 있습니다.'] = 'サーバーに %1頃に保存したバックアップデータが存在しております。'; +$__text['서버에 %1에 저장된 백업파일이 있습니다. 삭제후 복원에는 이 파일을 이용하실 수 있습니다.'] = 'サーバーに <em>%1</em>の頃に保存したバックアップデータが存在しております。このデータを復元に利用できます。'; +$__text['서버에 %1에 저장된 백업파일이 있습니다.'] = 'サーバーに <em>%1</em>頃に保存したバックアップデータが存在しております。'; $__text['서버에 백업파일을 저장하여 복원에 사용할 수 있습니다.'] = 'サーバーにバックアップを保存して復元に利用できます。'; $__text['서버에 저장'] = 'サーバーに保存'; $__text['서버에 저장된 백업파일.'] = 'サーバーに保存されたバックアップデータ'; @@ -750,7 +759,7 @@ $__text['소통'] = '送受信履歴'; $__text['손님이 글쓰기 허용'] = '利用'; $__text['수정'] = '編集'; -$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '利用中のテーマは編集されたものです。テーマを変更すると適用中のサイドバーの設定がリセットされます、\nよろしいですか?'; +$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '利用中のテーマは編集されたものです。テーマを変更すると適用中のサイドバーの設定がリセットされます、\\nよろしいですか?'; $__text['수정하기'] = '編集'; $__text['수정한 파일은 내려받기 링크를 통해 다운로드 할 수 있습니다. 가장 최근에 수정한 파일을 내려 받기 위해서는 다운로드 전에 꼭 저장을 먼저 해 주시기 바랍니다. 스킨 파일은 하나의 html 파일로 되어 있기 때문에 다양한 웹 에디터를 사용해서 편집하셔도 문제가 없습니다. 내려받은 파일을 웹 에디터로 편집하신 후에 스킨 편집창에 붙여넣는 식으로 스킨을 수정하셔도 됩니다.'] = '編集テーマはダウンロードをクリックしてダウンロードができます。最新版本のダウンロードのためには必ず更新事項を保存してください。<br />テーマファイルは1つのhtmlファイルで構成しており、このファイルはDreamweaverなどのエディターからの編集ができます。'; $__text['수집하지 않음'] = '収集中止'; @@ -842,7 +851,7 @@ $__text['올바르지 않은 블로그 주소입니다'] = '正しくない形式のブログアドレスです。'; $__text['올바른 OPML 파일이 아닙니다.'] = '正しくない形式のOPMLファイルです。'; $__text['올바른 XML 파일이 아닙니다.'] = '正しくない形式のXMLファイルです。'; -$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = '正しい形式のテーマフォルダー名称ではありません。\nフォルダーの名称は半角英数と下線(_)、空白文字、ダッシュ(-)のみでご入力ください。'; +$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = '正しい形式のテーマフォルダー名称ではありません。\\nフォルダーの名称は半角英数と下線(_)、空白文字、ダッシュ(-)のみでご入力ください。'; $__text['올바른 피드가 아닙니다.'] = '正しくない形式のフィードです。'; $__text['완료.'] = '完了'; $__text['완료되었습니다.'] = '完了しました。'; @@ -869,7 +878,7 @@ $__text['이 걸린글 목록을 닫습니다.'] = 'このトラックバックリストを閉じます。'; $__text['이 걸린글을 복원합니다.'] = 'トラックバック復元'; $__text['이 걸린글을 삭제합니다.'] = 'トラックバック削除'; -$__text['이 계정의 업로드 허용 용량은 %1 바이트로 백업파일의 크기가 이를 초과하는 경우 FTP 등으로 원하시는 사이트에 업로드하신 후 이 파일의 웹 주소를 입력해서 진행하십시오. 이 경우, 보안을 위해 복원이 끝나면 반드시 그 백업파일을 웹 상에서 지우실 것을 권장합니다.'] = 'このサーバーのアップロード制限値は %1 byteです。バックアップデータが制限値を超過すると、FTP 등으로 원하시는 사이트에 업로드하신 후 이 파일의 웹 주소를 입력해서 진행하십시오. 이 경우, 보안을 위해 복원이 끝나면 반드시 그 백업파일을 웹 상에서 지우실 것을 권장합니다.'] = 'このサーバーのアップロード制限値は <em>%1</em> byteです。バックアップデータが制限値を超過すると、<acronym title="File Transfer Protocol>FTP</acronym> で任意の場所へアップロードしてからそのURLを入力して復元を続けてください。復元が完了するとアップロードしたバックアップデータは必ず削除してください。'; $__text['이 곳에서 스킨을 편집할 수 있습니다. 편집이 끝난 스킨은 저장하기를 눌러 반영할 수 있습니다. 수정 중 원래 스킨으로 되돌리고 싶을 때는 되돌리기 버튼을 눌러 원래대로 되돌릴 수 있습니다.'] = 'テーマの編集ができます。編集後、テーマの更新のために必ず更新事項を保存してください。<br />更新事項を保存せず元に戻したいなら「キャンセル」をクリックしてください。'; $__text['이 글 및 이미지 파일을 완전히 삭제합니다. 계속 하시겠습니까?'] = 'この記事や画像ファイルを完全に削除します、よろしいですか?'; $__text['이 글걸기 기록을 삭제합니다.'] = '削除'; @@ -881,7 +890,7 @@ $__text['이 댓글을 삭제합니다.'] = 'コメント削除'; $__text['이 링크 정보를 수정합니다.'] = 'ブックマーク情報編集'; $__text['이 링크에 연결합니다.'] = 'このページへ進みます。'; -$__text['이 링크의 RSS를 바깥 글 읽기에 추가하시겠습니까?\n추가하면 바깥 글 읽기 메뉴에서 해당 링크의 새 글을 읽을 수 있습니다.'] = '取得RSS情報をRSSフィードへ登録しますか?\nフィードを登録したらRSSリーダーからの購読ができます。'; +$__text['이 링크의 RSS를 바깥 글 읽기에 추가하시겠습니까?\n추가하면 바깥 글 읽기 메뉴에서 해당 링크의 새 글을 읽을 수 있습니다.'] = '取得RSS情報をRSSフィードへ登録しますか?\\nフィードを登録したらRSSリーダーからの購読ができます。'; $__text['이 방명록에 답글을 씁니다'] = '返信コメント作成'; $__text['이 블로그에 다른 필자를 등록하고 권한을 줄 수 있습니다. 필자로 등록된 경우 기본적으로 글쓰기 권한이 주어집니다. 관리자 권한의 경우 블로그의 설정을 변경할 수 있습니다. 글관리 권한의 경우 다른 필자의 글을 교정하거나 공개 정도를 변경할 수 있습니다.'] = 'このブログから新規投稿者の登録と権限付与ができます。投稿者は記事の作成権限を、管理者はブログ設定権限を付与されます。また、記事管理権限を付与したら他人の記事の校正、公開設定の変更ができます。'; $__text['이 블로그에 등록된 필자들의 권한을 설정하고 관리합니다'] = 'ブログメンバー設定'; @@ -954,7 +963,7 @@ $__text['인기도순으로 표시합니다.'] = '人気度順で表示'; $__text['일'] = '日'; $__text['일로서 아는'] = '業務上'; -$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = '一般的では復元時に既存のデータに上書きします。\n上書きせずバックアップの内容を追加するためにはバックアップしたファイルの migrational=false 項目を migrational=trueに転換してください。\nこの事項を確認してから復元を進めてください。'; +$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = '一般的では復元時に既存のデータに上書きします。\\n上書きせずバックアップの内容を追加するためにはバックアップしたファイルの migrational=false 項目を migrational=trueに転換してください。\\nこの事項を確認してから復元を進めてください。'; $__text['일별 통계 정보를 복원하고 있습니다.'] = '日別統計を復元中…'; $__text['읽은 글 감추기'] = '既読記事を非表示'; $__text['읽지 않은 상태로 변경하였습니다.'] = '未読記事に転換しました。'; @@ -1018,11 +1027,11 @@ $__text['정보가져오기'] = '情報取得'; $__text['제목'] = '名称'; $__text['제목을 입력해 주십시오.'] = 'タイトルをご入力ください。'; -//$__text['제어판으로 이동합니다.'] = ''; $__text['제외할 수 없습니다'] = '除名不可'; $__text['제작자'] = '製作者'; $__text['조각보'] = 'ダッシュボード'; $__text['조각보를 봅니다'] = 'ダッシュボード'; +//$__text['존재하지 않은 사용자입니다'] = ''; $__text['종류'] = 'タイプ'; $__text['죄송합니다. 아직 해당 메뉴에 대한 도움말이 준비되지 않았습니다.'] = 'すみません、ヘルプがまだ用意されておりません。'; $__text['주소를 입력해 주십시오.'] = 'アドレスをご入力ください。'; @@ -1053,7 +1062,7 @@ $__text['초기화'] = 'リセット'; //$__text['초대 링크'] = ''; $__text['초대 메시지'] = '招待のメッセージ'; -$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = '招待したい人の名前<メールアドレス>をご入力ください。\nメールアドレスのみ入力してもよろしいです。'; +$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = '招待したい人の名前<メールアドレス>をご入力ください。\\nメールアドレスのみ入力してもよろしいです。'; $__text['초대받을 사람이 사용할 블로그 식별자를 적어 주십시오.'] = '招待したい人のブログの識別子をご入力ください。'; $__text['초대상태'] = '招待現況'; $__text['초대에 응하지 않은 사용자의 계정을 삭제합니다.'] = '招待に応じなかった人のアカウントを削除します。'; @@ -1159,7 +1168,7 @@ $__text['텍스트큐브 홈페이지의 스킨 업로드 게시판으로 연결합니다.'] = '公式テーマページへ進みます。'; $__text['텍스트큐브'] = 'Textcube'; $__text['텍스트큐브는'] = 'Textcubeについて'; -$__text['텍스트큐브의 동작을 위하여 모듈이 필요한 부분마다 최소 하나 이상이 필요합니다.\n현재 해당 모듈이 하나밖에 존재하지 않기 때문에 이 모듈의 동작을 중지시킬 수 없습니다.'] = 'Textcubeの正常的な動作のため、最小1つの利用中のモジュールを必要とします。\n今作動中のモジュールが1つしか存在していないため、このモジュールの動作を中止できません。'; +$__text['텍스트큐브의 동작을 위하여 모듈이 필요한 부분마다 최소 하나 이상이 필요합니다.\n현재 해당 모듈이 하나밖에 존재하지 않기 때문에 이 모듈의 동작을 중지시킬 수 없습니다.'] = 'Textcubeの正常的な動作のため、最小1つの利用中のモジュールを必要とします。\\n今作動中のモジュールが1つしか存在していないため、このモジュールの動作を中止できません。'; $__text['텍스트큐브의 모든 데이터를 삭제합니다.
    첨부파일의 삭제 여부를 선택하실 수 있습니다.
    데이터의 복원은 백업파일을 통해서만 가능하므로 먼저 백업을 하시기 바랍니다.'] = 'Textcubeのデータを完全に削除します。<br />添付ファイルの削除はオプションで、データの復元はバックアップだけでできますので必ずバックアップをしてください。'; $__text['트랙백 리스트'] = 'トラックバック一覧'; $__text['트랙백 영역'] = 'トラックバック'; @@ -1242,7 +1251,7 @@ //$__text['필터를 추가하였습니다.'] = ''; //$__text['필터를 추가하지 못했습니다.'] = ''; $__text['필터링을 삭제하지 못했습니다.'] = '拒否設定の削除に失敗しました。'; -$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '1つのフィードを取り込みました。\nフィードを更新してください。'; +$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '1つのフィードを取り込みました。\\nフィードを更新してください。'; $__text['하위 분류가 있으므로 삭제할 수 없습니다.'] = '下位分類が存在しているので削除できません。'; $__text['한 쪽당 글 수'] = '1ページ毎の記事数'; $__text['한 페이지에 글 %1건 표시'] = '1ページに %1 件の項目を表示'; @@ -1278,7 +1287,7 @@ $__text['확인'] = 'OK'; $__text['확장 지원'] = '拡張タイプ対応'; $__text['환경설정'] = '環境設定'; -$__text['환영합니다. %1님.'] = '%1 さん、ようこそ。'; +$__text['환영합니다. %1님.'] = '<em>%1</em> さん、ようこそ。'; $__text['휴지통 내의 모든 걸린글을 삭제합니다. 계속 하시겠습니까?'] = 'ごみ箱中のトラックバックを全件削除します、よろしいですか?'; $__text['휴지통 내의 모든 댓글 및 방명록을 삭제합니다. 계속 하시겠습니까?'] = 'ごみ箱中のコメントを全件削除します、よろしいですか?'; $__text['휴지통 비우기'] = '全件削除'; diff --git a/resources/locale/owner/ko.php b/resources/locale/owner/ko.php index bf1dd555e..4a1a9f957 100644 --- a/resources/locale/owner/ko.php +++ b/resources/locale/owner/ko.php @@ -34,9 +34,13 @@ //$__text["%1 설정"] = ""; //$__text["%1님께서 블로그의 팀원으로 초대합니다"] = ""; //$__text["BlogAPI를 사용하는 편집기들은 이 블로그로 글을 보내기 위하여 'API 주소'를 사용합니다."] = ""; +//$__text["관리자"] = ""; +//$__text["글관리"] = ""; //$__text["댓글 및 필자 정보에 사용되는 대표 홈페이지 주소를 설정합니다. 로그인 상태에서 댓글을 달 경우 댓글에 출력되는 블로그 아이콘은 이 주소의 정보에 의하여 결정됩니다."] = ""; //$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = ""; +//$__text["소유자"] = ""; //$__text["아래로"] = ""; +//$__text["없음"] = ""; //$__text["오픈아이디를 현재 아이디와 연결합니다."] = ""; //$__text["외부 편집기가 사용할 수 있는 주소를 만들어 주는 도우미입니다."] = ""; //$__text["위로"] = ""; @@ -209,6 +213,7 @@ //$__text['관리 패널 스킨은 로그인한 후 보여지는 패널의 디자인을 다양하게 변경합니다.'] = ''; //$__text['관리 패널 스킨을 추가하기 위해서는 관리 패널 스킨을 내려받아 /skin/admin 디렉토리에 설치하시면 됩니다.'] = ''; //$__text['관리 패널 화면에서 사용할 언어를 설정합니다.'] = ''; +//$__text['관리 패널로 이동합니다.'] = ''; //$__text['관리자 로그인 비밀번호와 동일하게 사용하실 경우 비워두시기 바랍니다.'] = ''; //$__text['관리자 비밀번호를 그대로 사용'] = ''; //$__text['관리자 플러그인'] = ''; @@ -216,6 +221,7 @@ //$__text['관리자'] = ''; //$__text['교정 대상을 확인하고 있습니다.'] = ''; //$__text['권한'] = ''; +//$__text['권한이 없습니다.'] = ''; //$__text['그대로 두기'] = ''; //$__text['그룹 이름을 입력하세요.'] = ''; //$__text['그룹을 삭제하고 있습니다.'] = ''; @@ -238,6 +244,8 @@ //$__text['글 쓰기'] = ''; //$__text['글 작성 환경을 설정합니다'] = ''; //$__text['글 작성'] = ''; +//$__text['글 작성자를 변경하지 못했습니다.'] = ''; +//$__text['글 작성자를 변경합니다.'] = ''; //$__text['글 종류'] = ''; //$__text['글 주소 표기법을 변경할 수 없습니다.'] = ''; //$__text['글 주소'] = ''; @@ -399,6 +407,7 @@ //$__text['링크 추가'] = ''; //$__text['링크 카테고리 수정'] = ''; //$__text['링크 카테고리 정보를 수정합니다'] = ''; +//$__text['링크 카테고리를 복원하고 있습니다.'] = ''; //$__text['링크 카테고리를 수정하고 있습니다.'] = ''; //$__text['링크'] = ''; //$__text['링크가 삭제되었습니다.'] = ''; @@ -1023,11 +1032,11 @@ //$__text['정보가져오기'] = ''; //$__text['제목'] = ''; //$__text['제목을 입력해 주십시오.'] = ''; -//$__text['제어판으로 이동합니다.'] = ''; //$__text['제외할 수 없습니다'] = ''; //$__text['제작자'] = ''; $__text['조각보'] = '알림판 위젯'; $__text['조각보를 봅니다'] = '알림판'; +//$__text['존재하지 않은 사용자입니다'] = ''; //$__text['종류'] = ''; //$__text['죄송합니다. 아직 해당 메뉴에 대한 도움말이 준비되지 않았습니다.'] = ''; //$__text['주소를 입력해 주십시오.'] = ''; diff --git a/resources/locale/owner/vi.php b/resources/locale/owner/vi.php index f0330803f..0bdcd58d3 100644 --- a/resources/locale/owner/vi.php +++ b/resources/locale/owner/vi.php @@ -33,10 +33,13 @@ $__text["%1 설정"] = 'Cài đặt %1'; $__text["%1님께서 블로그의 팀원으로 초대합니다"] = '%1 là thành viên ban quản trị Website đã mời bạn tham gia.'; $__text["BlogAPI를 사용하는 편집기들은 이 블로그로 글을 보내기 위하여 'API 주소'를 사용합니다."] = 'Khi gửi bài ở ngoài Blog như Ecto hay MarsEdit, sẽ sử dụng địa chỉ này.'; +$__text["관리자"] = 'Admin.'; +$__text["글관리"] = 'Bài viết'; $__text["댓글 및 필자 정보에 사용되는 대표 홈페이지 주소를 설정합니다. 로그인 상태에서 댓글을 달 경우 댓글에 출력되는 블로그 아이콘은 이 주소의 정보에 의하여 결정됩니다."] = 'Bạn có thể tạo một địa chỉ thay cho địa chỉ mặc định để hiển thị. Ví dụ: home hoặc trangchu ....'; -$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = "Blog đã sẵn sàng để hoạt động. -Hãy tham gia cùng chúng tôi!"; +$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = "Blog đã sẵn sàng để hoạt động. \nHãy tham gia cùng chúng tôi!"; +//$__text["소유자"] = ""; $__text["아래로"] = 'Chuyễn xuống dưới'; +//$__text["없음"] = ""; $__text["오픈아이디를 현재 아이디와 연결합니다."] = 'Kết hợp đăng nhập với OpenID hiện tại. '; $__text["외부 편집기가 사용할 수 있는 주소를 만들어 주는 도우미입니다."] = 'Bạn có thể làm URL ở đây cho những người biên tập ngoài.'; $__text["위로"] = 'Chuyển lên'; @@ -58,7 +61,7 @@ $__text['%1 테이블을 최적화하고 있습니다.'] = 'Tối ưu hoá %1 Table.'; $__text['%1 파일을 수정하실 수 있는 권한이 없습니다.'] = 'Bạn không có quyền để chỉnh sửa tập tin %1'; //$__text['%1/entry/'] = ''; -$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = 'Đã nhận được %1 Feed mới.\nXin vui lòng cập nhận danh sách.'; +$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = 'Đã nhận được %1 Feed mới.\\nXin vui lòng cập nhận danh sách.'; $__text['%1에 글을 공개합니다.'] = 'Gửi lên %1.'; $__text['%1은 올바른 이메일이 아닙니다.'] = 'Email %1 không hợp lệ.'; //$__text['© 2004 - 2009. 모든 저작권은 개발자 및 공헌자에게 있습니다.
    텍스트큐브는 니들웍스/TNF에서 개발합니다.
    텍스트큐브와 텍스트큐브 로고는 니들웍스의 상표입니다.'] = ''; @@ -160,7 +163,7 @@ $__text['같이 사는'] = 'Sống cùng'; $__text['같이 일하는'] = 'Làm cùng'; $__text['개발자'] = 'Người phát triển'; -$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '\nCó Feed mới được kết nối. Xin hãy cập nhật danh sách!'; +$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '\\nCó Feed mới được kết nối. Xin hãy cập nhật danh sách!'; $__text['개인 정보'] = 'Thông tin cá nhân.'; $__text['갤러리 삽입'] = 'Chèn Thư viện ảnh.'; $__text['갱신'] = 'Cập nhật'; @@ -209,6 +212,7 @@ //$__text['관리 패널 스킨은 로그인한 후 보여지는 패널의 디자인을 다양하게 변경합니다.'] = ''; //$__text['관리 패널 스킨을 추가하기 위해서는 관리 패널 스킨을 내려받아 /skin/admin 디렉토리에 설치하시면 됩니다.'] = ''; $__text['관리 패널 화면에서 사용할 언어를 설정합니다.'] = 'Chọn ngôn ngữ sử dụng cho trang quản lý của Administrator.'; +//$__text['관리 패널로 이동합니다.'] = ''; $__text['관리자 로그인 비밀번호와 동일하게 사용하실 경우 비워두시기 바랍니다.'] = 'Để trống nếu sử dụng mật khẩu đăng nhập của bạn.'; $__text['관리자 비밀번호를 그대로 사용'] = 'Mật khẩu Admin sử dụng'; $__text['관리자 플러그인'] = 'Admin plugin'; @@ -216,6 +220,7 @@ $__text['관리자'] = 'Admin.'; $__text['교정 대상을 확인하고 있습니다.'] = 'Kiểm tra danh sách.'; $__text['권한'] = 'Quyền hạn'; +//$__text['권한이 없습니다.'] = ''; $__text['그대로 두기'] = 'Mặc định'; $__text['그룹 이름을 입력하세요.'] = 'Hãy nhập tên nhóm sử dụng.'; $__text['그룹을 삭제하고 있습니다.'] = 'Đang xoá nhóm sử dung.'; @@ -238,6 +243,8 @@ //$__text['글 쓰기'] = ''; $__text['글 작성 환경을 설정합니다'] = 'Thay đổi tác giả bài viết'; $__text['글 작성'] = 'Kiểu gửi bài'; +//$__text['글 작성자를 변경하지 못했습니다.'] = ''; +//$__text['글 작성자를 변경합니다.'] = ''; $__text['글 종류'] = 'Kiểu bài'; $__text['글 주소 표기법을 변경할 수 없습니다.'] = 'Không thể thay đổi liên kết thường trực.'; $__text['글 주소'] = 'Liên kết thường trực'; @@ -399,6 +406,7 @@ $__text['링크 추가'] = 'Thêm liên kết'; $__text['링크 카테고리 수정'] = 'Chủ đề liên kết'; $__text['링크 카테고리 정보를 수정합니다'] = 'Thay dổi thông tin chuyên mục liên kết'; +//$__text['링크 카테고리를 복원하고 있습니다.'] = ''; $__text['링크 카테고리를 수정하고 있습니다.'] = 'Thay đổi chuyên mục liên kết.'; $__text['링크'] = 'Liên kết'; $__text['링크가 삭제되었습니다.'] = 'Đã xoá liên kết.'; @@ -499,7 +507,7 @@ $__text['변경된 2차 블로그 주소로 이동합니다'] = 'Chuyển đến địa chỉ Blog đã cập nhật lần thứ hai'; $__text['변경된 기본 블로그 도메인으로 이동합니다.'] = 'Chuyển đến địa chỉ Blog đã cập nhật nguyên mẫu.'; $__text['변경된 블로그 주소로 이동합니다'] = 'Chuyển đến địa chỉ Blog đã cập nhật.'; -$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = 'Những thay đổi của giao diện đã không được lưu. \n Bạn có muốn lưu lại thay đổi không?'; +$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = 'Những thay đổi của giao diện đã không được lưu. \\n Bạn có muốn lưu lại thay đổi không?'; $__text['변경하고 있습니다.'] = 'Đang thay đổi'; $__text['변경하지 못했습니다.'] = 'Không thể thay đổi.'; //$__text['변경한 관리 패널 스킨으로 현재 페이지를 다시 불러오시겠습니까?'] = ''; @@ -678,7 +686,7 @@ $__text['새로운 비밀번호'] = 'Mật khẩu mới'; //$__text['새로운 사람을 블로그의 필자로 초대합니다. 초대장은 이메일을 통하여 발송됩니다. 메일 주소가 이미 블로그 서비스에 등록되어 있는 경우, 그 사용자에게 이 블로그의 필진 권한을 추가합니다. 사용자가 존재하지 않는 경우에는 새로운 사용자를 자동으로 등록하고 초대장을 발송합니다. 초대된 사람에게는 기본적으로 글쓰기 권한이 부여됩니다.'] = ''; $__text['새로운 사람을 블로그의 필진으로 초대합니다'] = 'Mời một quản lý mới'; -$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'Nếu bạn chọn giao diện mới, Tất cả những thay đổi thiết lập của trang và Sidebar cho giao diện cũ sẽ bị xóa. \nBạn có muốn áp dụng giao diện mới không?'; +$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'Nếu bạn chọn giao diện mới, Tất cả những thay đổi thiết lập của trang và Sidebar cho giao diện cũ sẽ bị xóa. \\nBạn có muốn áp dụng giao diện mới không?'; $__text['생활반경'] = 'Địa lý'; $__text['서버'] = 'Máy chủ'; $__text['서버에 %1에 백업한 파일이 존재합니다.'] = 'File Backup đã có trên Host. Đã tạo %1'; @@ -755,7 +763,7 @@ $__text['소통'] = 'Thông tin'; $__text['손님이 글쓰기 허용'] = 'Cho phép khách truy cập có thể viết lưu niệm.'; $__text['수정'] = 'Sửa đổi'; -$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'Bạn đã thay đổi giao diện đang sử dụng. Nếu bạn chọn giao diện mới, tất cả những thiết đặt của trang và Sidebar thay đổi cho giao diện cũ sẽ bị xóa. \n Bạn có muốn áp dụng giao diện mới?'; +$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = 'Bạn đã thay đổi giao diện đang sử dụng. Nếu bạn chọn giao diện mới, tất cả những thiết đặt của trang và Sidebar thay đổi cho giao diện cũ sẽ bị xóa. \\n Bạn có muốn áp dụng giao diện mới?'; $__text['수정하기'] = 'Sửa đổi'; //$__text['수정한 파일은 내려받기 링크를 통해 다운로드 할 수 있습니다. 가장 최근에 수정한 파일을 내려 받기 위해서는 다운로드 전에 꼭 저장을 먼저 해 주시기 바랍니다. 스킨 파일은 하나의 html 파일로 되어 있기 때문에 다양한 웹 에디터를 사용해서 편집하셔도 문제가 없습니다. 내려받은 파일을 웹 에디터로 편집하신 후에 스킨 편집창에 붙여넣는 식으로 스킨을 수정하셔도 됩니다.'] = ''; $__text['수집하지 않음'] = 'Không tìm nạp'; @@ -847,7 +855,7 @@ $__text['올바르지 않은 블로그 주소입니다'] = 'Địa chỉ Blog không hợp lệ.'; $__text['올바른 OPML 파일이 아닙니다.'] = 'File OPML không hợp lệ.'; $__text['올바른 XML 파일이 아닙니다.'] = 'File XML không hợp lệ.'; -$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = 'Tên của thư mục giao diện không đúng.\nBạn có thể sử dụng chỉ chữ cái, những chữ số, dấu gạch dưới (_), khoảng trống, hay dấu trừ (-).'; +$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = 'Tên của thư mục giao diện không đúng.\\nBạn có thể sử dụng chỉ chữ cái, những chữ số, dấu gạch dưới (_), khoảng trống, hay dấu trừ (-).'; $__text['올바른 피드가 아닙니다.'] = 'Feed không hợp lệ.'; $__text['완료.'] = 'Kết thúc'; $__text['완료되었습니다.'] = 'Đã kết thúc'; @@ -959,7 +967,7 @@ $__text['인기도순으로 표시합니다.'] = 'Bằng số lần Click chuột.'; $__text['일'] = 'ngày'; $__text['일로서 아는'] = 'Hiểu biết'; -$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = 'Thông thường khi phục hồi dữ liệu, dữ liệu nguyên bản sẽ bị ghi đè. \n Để không bị ghi đè nhưg vẫn thêm nội dung File Backup, hãy mở File Backup và thay đổi migrational=false thành migrational=true. Hãy kiểm tra File. \n Bạn có muốn tiếp tục? '; +$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = 'Thông thường khi phục hồi dữ liệu, dữ liệu nguyên bản sẽ bị ghi đè. \\n Để không bị ghi đè nhưg vẫn thêm nội dung File Backup, hãy mở File Backup và thay đổi migrational=false thành migrational=true. Hãy kiểm tra File. \\n Bạn có muốn tiếp tục? '; $__text['일별 통계 정보를 복원하고 있습니다.'] = 'Khôi phục thống kê hàng ngày...'; $__text['읽은 글 감추기'] = 'Đọc ẩn'; $__text['읽지 않은 상태로 변경하였습니다.'] = 'Đánh dấu là chưa đọc.'; @@ -1023,11 +1031,11 @@ $__text['정보가져오기'] = 'Khôi phục thông tin'; $__text['제목'] = 'Tiêu đề'; $__text['제목을 입력해 주십시오.'] = 'Nhập tiêu đề.'; -//$__text['제어판으로 이동합니다.'] = ''; $__text['제외할 수 없습니다'] = 'Không thể loại trừ.'; $__text['제작자'] = 'Tác giả'; $__text['조각보'] = 'Dashboard'; $__text['조각보를 봅니다'] = 'Dashboard'; +//$__text['존재하지 않은 사용자입니다'] = ''; $__text['종류'] = 'Định dạng'; //$__text['죄송합니다. 아직 해당 메뉴에 대한 도움말이 준비되지 않았습니다.'] = ''; $__text['주소를 입력해 주십시오.'] = 'Nhập địa chỉ'; @@ -1058,7 +1066,7 @@ $__text['초기화'] = 'Thiết lập lại'; //$__text['초대 링크'] = ''; $__text['초대 메시지'] = 'Nội dung thư mời'; -$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = 'Nhập tên người được mời<Email>.\nBạn có thể chỉ nhập Email.'; +$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = 'Nhập tên người được mời<Email>.\\nBạn có thể chỉ nhập Email.'; $__text['초대받을 사람이 사용할 블로그 식별자를 적어 주십시오.'] = 'Nhập tên Blog sẽ sư dụng khi mời.'; $__text['초대상태'] = 'Trạng thái'; $__text['초대에 응하지 않은 사용자의 계정을 삭제합니다.'] = 'Xóa những tài khoản được mời nhưng không tham gia.'; @@ -1164,7 +1172,7 @@ $__text['텍스트큐브 홈페이지의 스킨 업로드 게시판으로 연결합니다.'] = 'Đang kết nối tới giao diện Upload BBS trên trang chủ Textcube chính thức.'; $__text['텍스트큐브'] = 'Textcube'; $__text['텍스트큐브는'] = 'Thông tin Textcube'; -$__text['텍스트큐브의 동작을 위하여 모듈이 필요한 부분마다 최소 하나 이상이 필요합니다.\n현재 해당 모듈이 하나밖에 존재하지 않기 때문에 이 모듈의 동작을 중지시킬 수 없습니다.'] = 'Tại hợp đồng cần một Module để Textcube làm việc.\n Bạn không thể dừng hoạt động Module này bởi vì nó là duy nhất được kích hoạt. '; +$__text['텍스트큐브의 동작을 위하여 모듈이 필요한 부분마다 최소 하나 이상이 필요합니다.\n현재 해당 모듈이 하나밖에 존재하지 않기 때문에 이 모듈의 동작을 중지시킬 수 없습니다.'] = 'Tại hợp đồng cần một Module để Textcube làm việc.\\n Bạn không thể dừng hoạt động Module này bởi vì nó là duy nhất được kích hoạt. '; $__text['텍스트큐브의 모든 데이터를 삭제합니다.
    첨부파일의 삭제 여부를 선택하실 수 있습니다.
    데이터의 복원은 백업파일을 통해서만 가능하므로 먼저 백업을 하시기 바랍니다.'] = 'Xóa bỏ dữ liệu Textcube.<br />Bạn có thể chọn những File đính kèm để xóa bỏ.<br />Việc khôi phục dữ liệu chỉ có thể xảy ra thông qua tùy chọn dữ liệu khôi phục vì vậy xin vui lòng Backup dữ liệu trước.'; $__text['트랙백 리스트'] = 'Danh sách liên kết Web'; $__text['트랙백 영역'] = 'Liên kết Web'; @@ -1247,7 +1255,7 @@ //$__text['필터를 추가하였습니다.'] = ''; //$__text['필터를 추가하지 못했습니다.'] = ''; $__text['필터링을 삭제하지 못했습니다.'] = 'Không thể xóa bộ lọc.'; -$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = 'Đã nhận được một Feed.\nXin vui lòng cập nhật!'; +$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = 'Đã nhận được một Feed.\\nXin vui lòng cập nhật!'; $__text['하위 분류가 있으므로 삭제할 수 없습니다.'] = 'Không thể xóa chuyên mục khi vẫn còn những chuyên mục con trong đó.'; $__text['한 쪽당 글 수'] = 'Bài viết trên trang'; $__text['한 페이지에 글 %1건 표시'] = 'Hiển thị %1 bài viết trên trang.'; @@ -1292,4 +1300,4 @@ $__text['휴지통에 버려진 댓글은 15일이 지나면 자동으로 지워집니다. 광고 댓글의 차단 및 분석을 위하여 휴지통의 데이터를 사용하는 플러그인이 있을 수 있으므로 수동으로 지우지 않는 것을 권장합니다.'] = 'Tất cả những bình luận và lưu niệm đã chuyển vào thùng rác sẽ được tự động xóa sau 15 ngày. Việc xóa các bình luận là không nên, ngoại trừ trường hợp đó là những bình luận Spam. Bạn nên cài đặt những Plugin chống Spam để ngăn chặn việc này.'; $__text['휴지통의 걸린글을 한 번에 삭제합니다.'] = 'Xóa tất cả liên kết Web trong thùng rác ngay bây giờ.'; $__text['휴지통의 댓글을 한 번에 삭제합니다.'] = 'Xóa tất cả bình luận trong thùng rác ngay bây giờ.'; -?> +?> \ No newline at end of file diff --git a/resources/locale/owner/zh-CN.php b/resources/locale/owner/zh-CN.php index ca9e9322a..2612d490a 100644 --- a/resources/locale/owner/zh-CN.php +++ b/resources/locale/owner/zh-CN.php @@ -26,10 +26,13 @@ $__text["%1 설정"] = '%1设定'; $__text["%1님께서 블로그의 팀원으로 초대합니다"] = '%1邀請您一同撰寫博客'; $__text["BlogAPI를 사용하는 편집기들은 이 블로그로 글을 보내기 위하여 'API 주소'를 사용합니다."] = '通过API地址,可以使用支持BlogAPI的编辑器发布文章。'; +$__text["관리자"] = '管理'; +$__text["글관리"] = '文章管理'; $__text["댓글 및 필자 정보에 사용되는 대표 홈페이지 주소를 설정합니다. 로그인 상태에서 댓글을 달 경우 댓글에 출력되는 블로그 아이콘은 이 주소의 정보에 의하여 결정됩니다."] = '用于设定在回复以及作者讯息数据中代表首页的地址。并且在引用传送时传送这个地址。'; -$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = "博客为您准备好了。 - 现在可以入住。"; +$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = "博客为您准备好了。\n 现在可以入住。"; +//$__text["소유자"] = ""; $__text["아래로"] = '向下'; +//$__text["없음"] = ""; $__text["오픈아이디를 현재 아이디와 연결합니다."] = '设定 OpenID 的使用者署名。'; $__text["외부 편집기가 사용할 수 있는 주소를 만들어 주는 도우미입니다."] = '外部编辑器可以使用的 blogAPI 网址。'; $__text["위로"] = '向上'; @@ -51,7 +54,7 @@ $__text['%1 테이블을 최적화하고 있습니다.'] = '%1 优化资料。'; $__text['%1 파일을 수정하실 수 있는 권한이 없습니다.'] = '无权限修改%1 文件。'; //$__text['%1/entry/'] = ''; -$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '读取了%1个FEED。\n请确认更新。'; +$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '读取了%1个FEED。\\n请确认更新。'; $__text['%1에 글을 공개합니다.'] = '在%1公开文章。'; $__text['%1은 올바른 이메일이 아닙니다.'] = '信箱地址%1的格式不正确。'; //$__text['© 2004 - 2009. 모든 저작권은 개발자 및 공헌자에게 있습니다.
    텍스트큐브는 니들웍스/TNF에서 개발합니다.
    텍스트큐브와 텍스트큐브 로고는 니들웍스의 상표입니다.'] = ''; @@ -153,7 +156,7 @@ $__text['같이 사는'] = '同居'; $__text['같이 일하는'] = '朋友'; $__text['개발자'] = '开发者'; -$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '个FEED被读取。\n请确认更新。'; +$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '个FEED被读取。\\n请确认更新。'; $__text['개인 정보'] = '账户'; $__text['갤러리 삽입'] = '插入图片播放'; $__text['갱신'] = '更新'; @@ -202,6 +205,7 @@ //$__text['관리 패널 스킨은 로그인한 후 보여지는 패널의 디자인을 다양하게 변경합니다.'] = ''; //$__text['관리 패널 스킨을 추가하기 위해서는 관리 패널 스킨을 내려받아 /skin/admin 디렉토리에 설치하시면 됩니다.'] = ''; $__text['관리 패널 화면에서 사용할 언어를 설정합니다.'] = '设定管理页面语系。'; +//$__text['관리 패널로 이동합니다.'] = ''; $__text['관리자 로그인 비밀번호와 동일하게 사용하실 경우 비워두시기 바랍니다.'] = '若不设置与管理员相同密码,请保留空白。'; $__text['관리자 비밀번호를 그대로 사용'] = '直接使用管理密码'; $__text['관리자 플러그인'] = '管理员插件'; @@ -209,6 +213,7 @@ $__text['관리자'] = '管理'; $__text['교정 대상을 확인하고 있습니다.'] = '正在确认矫正对象。'; $__text['권한'] = '权限'; +//$__text['권한이 없습니다.'] = ''; $__text['그대로 두기'] = '擱置'; $__text['그룹 이름을 입력하세요.'] = '请输入组名。'; $__text['그룹을 삭제하고 있습니다.'] = '删除群组。'; @@ -231,6 +236,8 @@ //$__text['글 쓰기'] = ''; $__text['글 작성 환경을 설정합니다'] = '設定編輯文章模式'; $__text['글 작성'] = '撰寫文章'; +//$__text['글 작성자를 변경하지 못했습니다.'] = ''; +//$__text['글 작성자를 변경합니다.'] = ''; $__text['글 종류'] = '文章類型'; $__text['글 주소 표기법을 변경할 수 없습니다.'] = '无法修改文章地址表示方式。'; $__text['글 주소'] = '博客地址'; @@ -392,6 +399,7 @@ $__text['링크 추가'] = '新增链接'; $__text['링크 카테고리 수정'] = '链结分类'; $__text['링크 카테고리 정보를 수정합니다'] = '链结分类讯息更新'; +//$__text['링크 카테고리를 복원하고 있습니다.'] = ''; $__text['링크 카테고리를 수정하고 있습니다.'] = '更新链结分类。'; $__text['링크'] = '链接'; $__text['링크가 삭제되었습니다.'] = '成功删除链接。'; @@ -492,7 +500,7 @@ $__text['변경된 2차 블로그 주소로 이동합니다'] = '跳转到新的二级博客地址'; $__text['변경된 기본 블로그 도메인으로 이동합니다.'] = '跳转到新的默认网站地址'; $__text['변경된 블로그 주소로 이동합니다'] = '跳转到新的网站地址'; -$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = '修改的样式未储存。\n现在储存吗?'; +$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = '修改的样式未储存。\\n现在储存吗?'; $__text['변경하고 있습니다.'] = '正在更新设定。'; $__text['변경하지 못했습니다.'] = '未能修改。'; //$__text['변경한 관리 패널 스킨으로 현재 페이지를 다시 불러오시겠습니까?'] = ''; @@ -655,7 +663,7 @@ $__text['삭제하기'] = '刪除'; $__text['삭제하시겠습니까?'] = '确定删除吗?'; $__text['삭제하지 못했습니다.'] = '未能删除。'; -$__text['삭제할 파일을 선택해 주십시오\t'] = '请选择要删除文件\t'; +$__text['삭제할 파일을 선택해 주십시오\t'] = '请选择要删除文件\\t'; $__text['삭제합니다.'] = '删除。'; $__text['상태'] = '状态'; $__text['새 글 쓰기'] = '發表新文章'; @@ -671,7 +679,7 @@ $__text['새로운 비밀번호'] = '新密码'; $__text['새로운 사람을 블로그의 필자로 초대합니다. 초대장은 이메일을 통하여 발송됩니다. 메일 주소가 이미 블로그 서비스에 등록되어 있는 경우, 그 사용자에게 이 블로그의 필진 권한을 추가합니다. 사용자가 존재하지 않는 경우에는 새로운 사용자를 자동으로 등록하고 초대장을 발송합니다. 초대된 사람에게는 기본적으로 글쓰기 권한이 부여됩니다.'] = '填写邀请函,透过电子邮件发给新的成员。并会将成员信息与权限纪录于邮件当中一并传送。成员透过点击邀请函中的网址即可加入团队博客。'; $__text['새로운 사람을 블로그의 필진으로 초대합니다'] = '邀请新的团队博客成员'; -$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '如果选择新的模板会删除以前模板的输出设定和侧栏的变更。\n 要使用该模板吗?'; +$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '如果选择新的模板会删除以前模板的输出设定和侧栏的变更。\\n 要使用该模板吗?'; $__text['생활반경'] = '生活'; $__text['서버'] = '主机'; $__text['서버에 %1에 백업한 파일이 존재합니다.'] = '备份文件储存于 %1 天前的信息'; @@ -748,7 +756,7 @@ $__text['소통'] = '回复'; $__text['손님이 글쓰기 허용'] = '允許訪客留言'; $__text['수정'] = '编辑'; -$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '如果选择新的模板会删除以前模板的输出设定和侧栏的变更。\n 要使用该模板吗?'; +$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '如果选择新的模板会删除以前模板的输出设定和侧栏的变更。\\n 要使用该模板吗?'; $__text['수정하기'] = '編輯'; $__text['수정한 파일은 내려받기 링크를 통해 다운로드 할 수 있습니다. 가장 최근에 수정한 파일을 내려 받기 위해서는 다운로드 전에 꼭 저장을 먼저 해 주시기 바랍니다. 스킨 파일은 하나의 html 파일로 되어 있기 때문에 다양한 웹 에디터를 사용해서 편집하셔도 문제가 없습니다. 내려받은 파일을 웹 에디터로 편집하신 후에 스킨 편집창에 붙여넣는 식으로 스킨을 수정하셔도 됩니다.'] = '若要修改或下载其他的模板,请务必将原来的模板储存。模板所使用的语法为 html 可以使用多种 web 编辑器编辑,但有可能会遇到文件无法被编辑器识别的状况。'; $__text['수집하지 않음'] = '不进行聚合'; @@ -840,7 +848,7 @@ $__text['올바르지 않은 블로그 주소입니다'] = '错误的博客地址'; $__text['올바른 OPML 파일이 아닙니다.'] = '错误的 OPML文件。'; $__text['올바른 XML 파일이 아닙니다.'] = '错误的 XML文件'; -$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = '错误的模板目录.\n目录名只能使用英文字母, 数字, 下划线(_), 空格, 横线(-)'; +$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = '错误的模板目录.\\n目录名只能使用英文字母, 数字, 下划线(_), 空格, 横线(-)'; $__text['올바른 피드가 아닙니다.'] = '错误的FEED'; $__text['완료.'] = '完成。'; $__text['완료되었습니다.'] = '已完成。'; @@ -879,7 +887,7 @@ $__text['이 댓글을 삭제합니다.'] = '删除此回复。'; $__text['이 링크 정보를 수정합니다.'] = '修改此链接讯息。'; $__text['이 링크에 연결합니다.'] = '连接到此链接。'; -$__text['이 링크의 RSS를 바깥 글 읽기에 추가하시겠습니까?\n추가하면 바깥 글 읽기 메뉴에서 해당 링크의 새 글을 읽을 수 있습니다.'] = '确认登录由此 RSS feed 所取得的 RSS 信息吗?\n你将由此订阅取得更多 RSS 讯息。'; +$__text['이 링크의 RSS를 바깥 글 읽기에 추가하시겠습니까?\n추가하면 바깥 글 읽기 메뉴에서 해당 링크의 새 글을 읽을 수 있습니다.'] = '确认登录由此 RSS feed 所取得的 RSS 信息吗?\\n你将由此订阅取得更多 RSS 讯息。'; $__text['이 방명록에 답글을 씁니다'] = '為此篇留言新增回覆'; $__text['이 블로그에 다른 필자를 등록하고 권한을 줄 수 있습니다. 필자로 등록된 경우 기본적으로 글쓰기 권한이 주어집니다. 관리자 권한의 경우 블로그의 설정을 변경할 수 있습니다. 글관리 권한의 경우 다른 필자의 글을 교정하거나 공개 정도를 변경할 수 있습니다.'] = '设定或修改其他团队博客使用者的权限. 也可将成员权限提升为博客管理员,管理者可以随时修改成员权限。'; $__text['이 블로그에 등록된 필자들의 권한을 설정하고 관리합니다'] = '团队部落阁成员权限管理'; @@ -952,7 +960,7 @@ $__text['인기도순으로 표시합니다.'] = '按使用密度排序。'; $__text['일'] = '日'; $__text['일로서 아는'] = '业务上'; -$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = '恢复会覆盖原有的数据。\n如果备份档的migrational=false改成migrational=true的话,不会覆盖原有的数据。请您慎重考虑后继续进行。\n要继续进行吗?'; +$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = '恢复会覆盖原有的数据。\\n如果备份档的migrational=false改成migrational=true的话,不会覆盖原有的数据。请您慎重考虑后继续进行。\\n要继续进行吗?'; $__text['일별 통계 정보를 복원하고 있습니다.'] = '正在恢复每日统计讯息'; $__text['읽은 글 감추기'] = '隱藏已讀文章'; $__text['읽지 않은 상태로 변경하였습니다.'] = '标记为未读。'; @@ -1016,11 +1024,11 @@ $__text['정보가져오기'] = '讀取訊息'; $__text['제목'] = '名称'; $__text['제목을 입력해 주십시오.'] = '请输入标题。'; -//$__text['제어판으로 이동합니다.'] = ''; $__text['제외할 수 없습니다'] = '不能排除'; $__text['제작자'] = '制作者'; $__text['조각보'] = '讯息面板'; $__text['조각보를 봅니다'] = '浏览最新讯息'; +//$__text['존재하지 않은 사용자입니다'] = ''; $__text['종류'] = '类型'; $__text['죄송합니다. 아직 해당 메뉴에 대한 도움말이 준비되지 않았습니다.'] = '对不起,帮助说明尚未准备好。'; $__text['주소를 입력해 주십시오.'] = '请输入地址。'; @@ -1051,7 +1059,7 @@ $__text['초기화'] = '初始化'; //$__text['초대 링크'] = ''; $__text['초대 메시지'] = '邀请函'; -$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = '请输入受邀请人的 名字<信箱>。\n也可以只输入信箱地址。'; +$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = '请输入受邀请人的 名字<信箱>。\\n也可以只输入信箱地址。'; $__text['초대받을 사람이 사용할 블로그 식별자를 적어 주십시오.'] = '请输入受邀请人要使用的识别名称。'; $__text['초대상태'] = '邀请状况'; $__text['초대에 응하지 않은 사용자의 계정을 삭제합니다.'] = '删除没有接受邀请的用户'; @@ -1240,7 +1248,7 @@ //$__text['필터를 추가하였습니다.'] = ''; //$__text['필터를 추가하지 못했습니다.'] = ''; $__text['필터링을 삭제하지 못했습니다.'] = '未能删除过滤选项。'; -$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '1个FEED被读取。\n请确认更新。'; +$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '1个FEED被读取。\\n请确认更新。'; $__text['하위 분류가 있으므로 삭제할 수 없습니다.'] = '因为存在下级分类 不能删除。'; $__text['한 쪽당 글 수'] = '每頁顯示文章數'; $__text['한 페이지에 글 %1건 표시'] = '每頁顯示 %1 篇'; diff --git a/resources/locale/owner/zh-TW.php b/resources/locale/owner/zh-TW.php index 62472073d..9be323d31 100644 --- a/resources/locale/owner/zh-TW.php +++ b/resources/locale/owner/zh-TW.php @@ -26,10 +26,13 @@ $__text["%1 설정"] = '%1設定'; $__text["%1님께서 블로그의 팀원으로 초대합니다"] = '%1邀請您一同撰寫部落格'; $__text["BlogAPI를 사용하는 편집기들은 이 블로그로 글을 보내기 위하여 'API 주소'를 사용합니다."] = '通過API地址,可以使用支持BlogAPI的編輯器發佈文章。'; +$__text["관리자"] = '管理'; +$__text["글관리"] = '文章管理'; $__text["댓글 및 필자 정보에 사용되는 대표 홈페이지 주소를 설정합니다. 로그인 상태에서 댓글을 달 경우 댓글에 출력되는 블로그 아이콘은 이 주소의 정보에 의하여 결정됩니다."] = '用於設定在回覆以及作者訊息資料中代表首頁的位址。並且在引用傳送時傳送這個位址。'; -$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = "部落格為您準備好了。 - 現在可以入住。"; +$__text["블로그를 준비해 두었습니다.\n지금 바로 입주하실 수 있습니다."] = "部落格為您準備好了。\n 現在可以入住。"; +//$__text["소유자"] = ""; $__text["아래로"] = '向下'; +//$__text["없음"] = ""; $__text["오픈아이디를 현재 아이디와 연결합니다."] = '設定 OpenID 的使用者署名。'; $__text["외부 편집기가 사용할 수 있는 주소를 만들어 주는 도우미입니다."] = '外部編輯器可以使用的 blogAPI 網址。'; $__text["위로"] = '向上'; @@ -51,7 +54,7 @@ $__text['%1 테이블을 최적화하고 있습니다.'] = '%1 優化資料。'; $__text['%1 파일을 수정하실 수 있는 권한이 없습니다.'] = '無權限修改%1 文件。'; //$__text['%1/entry/'] = ''; -$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '讀取了%1個FEED。\n請確認更新。'; +$__text['%1개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '讀取了%1個FEED。\\n請確認更新。'; $__text['%1에 글을 공개합니다.'] = '在%1公開文章。'; $__text['%1은 올바른 이메일이 아닙니다.'] = '信箱地址%1的格式不正確。'; //$__text['© 2004 - 2009. 모든 저작권은 개발자 및 공헌자에게 있습니다.
    텍스트큐브는 니들웍스/TNF에서 개발합니다.
    텍스트큐브와 텍스트큐브 로고는 니들웍스의 상표입니다.'] = ''; @@ -153,7 +156,7 @@ $__text['같이 사는'] = '同居'; $__text['같이 일하는'] = '朋友'; $__text['개발자'] = '開發者'; -$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '個FEED被讀取。\n請確認更新。'; +$__text['개의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '個FEED被讀取。\\n請確認更新。'; $__text['개인 정보'] = '帳戶'; $__text['갤러리 삽입'] = '插入圖片播放'; $__text['갱신'] = '更新'; @@ -202,6 +205,7 @@ //$__text['관리 패널 스킨은 로그인한 후 보여지는 패널의 디자인을 다양하게 변경합니다.'] = ''; //$__text['관리 패널 스킨을 추가하기 위해서는 관리 패널 스킨을 내려받아 /skin/admin 디렉토리에 설치하시면 됩니다.'] = ''; $__text['관리 패널 화면에서 사용할 언어를 설정합니다.'] = '設定管理頁面語系。'; +//$__text['관리 패널로 이동합니다.'] = ''; $__text['관리자 로그인 비밀번호와 동일하게 사용하실 경우 비워두시기 바랍니다.'] = '若不設置與管理員相同密碼,請保留空白。'; $__text['관리자 비밀번호를 그대로 사용'] = '直接使用管理密碼'; $__text['관리자 플러그인'] = '管理員插件'; @@ -209,6 +213,7 @@ $__text['관리자'] = '管理'; $__text['교정 대상을 확인하고 있습니다.'] = '正在確認矯正對象。'; $__text['권한'] = '權限'; +//$__text['권한이 없습니다.'] = ''; $__text['그대로 두기'] = '擱置'; $__text['그룹 이름을 입력하세요.'] = '請輸入群組名稱。'; $__text['그룹을 삭제하고 있습니다.'] = '刪除群組。'; @@ -231,6 +236,8 @@ //$__text['글 쓰기'] = ''; $__text['글 작성 환경을 설정합니다'] = '設定編輯文章模式'; $__text['글 작성'] = '撰寫文章'; +//$__text['글 작성자를 변경하지 못했습니다.'] = ''; +//$__text['글 작성자를 변경합니다.'] = ''; $__text['글 종류'] = '文章類型'; $__text['글 주소 표기법을 변경할 수 없습니다.'] = '無法修改文章地址表示方式。'; $__text['글 주소'] = '部落格地址'; @@ -392,6 +399,7 @@ $__text['링크 추가'] = '新增鏈接'; $__text['링크 카테고리 수정'] = '鏈結分類'; $__text['링크 카테고리 정보를 수정합니다'] = '鏈結分類訊息更新'; +//$__text['링크 카테고리를 복원하고 있습니다.'] = ''; $__text['링크 카테고리를 수정하고 있습니다.'] = '更新鏈結分類。'; $__text['링크'] = '鏈接'; $__text['링크가 삭제되었습니다.'] = '成功刪除鏈接。'; @@ -492,7 +500,7 @@ $__text['변경된 2차 블로그 주소로 이동합니다'] = '跳轉到新的二級部落格地址'; $__text['변경된 기본 블로그 도메인으로 이동합니다.'] = '跳轉到新的預設網站地址'; $__text['변경된 블로그 주소로 이동합니다'] = '跳轉到新的網站地址'; -$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = '修改的樣式未儲存。\n現在儲存嗎?'; +$__text['변경된 스타일이 아직 저장되지 않았습니다.\n저장하시겠습니까?'] = '修改的樣式未儲存。\\n現在儲存嗎?'; $__text['변경하고 있습니다.'] = '正在更新設定。'; $__text['변경하지 못했습니다.'] = '未能修改。'; //$__text['변경한 관리 패널 스킨으로 현재 페이지를 다시 불러오시겠습니까?'] = ''; @@ -655,7 +663,7 @@ $__text['삭제하기'] = '刪除'; $__text['삭제하시겠습니까?'] = '確定刪除嗎?'; $__text['삭제하지 못했습니다.'] = '未能刪除。'; -$__text['삭제할 파일을 선택해 주십시오\t'] = '請選擇要刪除文件\t'; +$__text['삭제할 파일을 선택해 주십시오\t'] = '請選擇要刪除文件\\t'; $__text['삭제합니다.'] = '刪除。'; $__text['상태'] = '狀態'; $__text['새 글 쓰기'] = '發表新文章'; @@ -671,7 +679,7 @@ $__text['새로운 비밀번호'] = '新密碼'; $__text['새로운 사람을 블로그의 필자로 초대합니다. 초대장은 이메일을 통하여 발송됩니다. 메일 주소가 이미 블로그 서비스에 등록되어 있는 경우, 그 사용자에게 이 블로그의 필진 권한을 추가합니다. 사용자가 존재하지 않는 경우에는 새로운 사용자를 자동으로 등록하고 초대장을 발송합니다. 초대된 사람에게는 기본적으로 글쓰기 권한이 부여됩니다.'] = '填寫邀請函,透過電子郵件發給新的成員。並會將成員資訊與權限紀錄於郵件當中一併傳送。成員透過點擊邀請函中的網址即可加入團隊部落格。'; $__text['새로운 사람을 블로그의 필진으로 초대합니다'] = '邀請新的團隊部落格成員'; -$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '如果選擇新的模板會刪除以前模板的輸出設定和側欄的變更。\n 要使用該模板嗎?'; +$__text['새로운 스킨을 선택하면 이전 스킨에 적용된 출력 설정들과 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '如果選擇新的模板會刪除以前模板的輸出設定和側欄的變更。\\n 要使用該模板嗎?'; $__text['생활반경'] = '生活'; $__text['서버'] = '主機'; $__text['서버에 %1에 백업한 파일이 존재합니다.'] = '備份檔案儲存於 %1 天前的資訊'; @@ -748,7 +756,7 @@ $__text['소통'] = '回覆'; $__text['손님이 글쓰기 허용'] = '允許訪客留言'; $__text['수정'] = '編輯'; -$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '如果選擇新的模板會刪除以前模板的輸出設定和側欄的變更。\n 要使用該模板嗎?'; +$__text['수정된 스킨을 사용중입니다. 새로운 스킨을 선택하면 수정된 스킨의 내용과 스킨에 적용된 출력 설정, 사이드바의 변경점은 모두 지워집니다.\n스킨을 적용하시겠습니까?'] = '如果選擇新的模板會刪除以前模板的輸出設定和側欄的變更。\\n 要使用該模板嗎?'; $__text['수정하기'] = '編輯'; $__text['수정한 파일은 내려받기 링크를 통해 다운로드 할 수 있습니다. 가장 최근에 수정한 파일을 내려 받기 위해서는 다운로드 전에 꼭 저장을 먼저 해 주시기 바랍니다. 스킨 파일은 하나의 html 파일로 되어 있기 때문에 다양한 웹 에디터를 사용해서 편집하셔도 문제가 없습니다. 내려받은 파일을 웹 에디터로 편집하신 후에 스킨 편집창에 붙여넣는 식으로 스킨을 수정하셔도 됩니다.'] = '若要修改或下載其他的模板,請務必將原來的模板儲存。模板所使用的語法為 html 可以使用多種 web 編輯器編輯,但有可能會遇到文件無法被編輯器識別的狀況。'; $__text['수집하지 않음'] = '不進行聚合'; @@ -840,7 +848,7 @@ $__text['올바르지 않은 블로그 주소입니다'] = '錯誤的部落格地址'; $__text['올바른 OPML 파일이 아닙니다.'] = '錯誤的 OPML文件。'; $__text['올바른 XML 파일이 아닙니다.'] = '錯誤的 XML文件'; -$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = '錯誤的模板目錄.\n目錄名只能使用英文字母, 數字, 下劃線(_), 空格, 橫線(-)'; +$__text['올바른 스킨 디렉토리명이 아닙니다.\n디렉토리명에는 알파벳, 숫자, 언더바(_), 공백문자, 대쉬(-)만 사용하실 수 있습니다.'] = '錯誤的模板目錄.\\n目錄名只能使用英文字母, 數字, 下劃線(_), 空格, 橫線(-)'; $__text['올바른 피드가 아닙니다.'] = '錯誤的FEED'; $__text['완료.'] = '完成。'; $__text['완료되었습니다.'] = '已完成。'; @@ -879,7 +887,7 @@ $__text['이 댓글을 삭제합니다.'] = '刪除此回覆。'; $__text['이 링크 정보를 수정합니다.'] = '修改此鏈接訊息。'; $__text['이 링크에 연결합니다.'] = '連接到此鏈接。'; -$__text['이 링크의 RSS를 바깥 글 읽기에 추가하시겠습니까?\n추가하면 바깥 글 읽기 메뉴에서 해당 링크의 새 글을 읽을 수 있습니다.'] = '確認登錄由此 RSS feed 所取得的 RSS 資訊嗎?\n你將由此訂閱取得更多 RSS 訊息。'; +$__text['이 링크의 RSS를 바깥 글 읽기에 추가하시겠습니까?\n추가하면 바깥 글 읽기 메뉴에서 해당 링크의 새 글을 읽을 수 있습니다.'] = '確認登錄由此 RSS feed 所取得的 RSS 資訊嗎?\\n你將由此訂閱取得更多 RSS 訊息。'; $__text['이 방명록에 답글을 씁니다'] = '為此篇留言新增回覆'; $__text['이 블로그에 다른 필자를 등록하고 권한을 줄 수 있습니다. 필자로 등록된 경우 기본적으로 글쓰기 권한이 주어집니다. 관리자 권한의 경우 블로그의 설정을 변경할 수 있습니다. 글관리 권한의 경우 다른 필자의 글을 교정하거나 공개 정도를 변경할 수 있습니다.'] = '設定或修改其他團隊部落格使用者的權限. 也可將成員權限提升為部落格管理員,管理者可以隨時修改成員權限。'; $__text['이 블로그에 등록된 필자들의 권한을 설정하고 관리합니다'] = '團隊部落閣成員權限管理'; @@ -916,7 +924,7 @@ $__text['이동'] = '轉到'; $__text['이름 변경'] = '修改名字'; $__text['이름 필터링'] = '暱稱過濾'; -$__text['이름<이메일> 혹은 이메일'] = '姓名&lt;電子郵件地址&gt; 或 電子郵件地址'; +$__text['이름<이메일> 혹은 이메일'] = '姓名<電子郵件地址> 或 電子郵件地址'; $__text['이름'] = '名字'; $__text['이름(e-mail)'] = '信箱(e-mail)'; $__text['이름순으로 표시합니다.'] = '按名字排序。'; @@ -952,7 +960,7 @@ $__text['인기도순으로 표시합니다.'] = '按使用密度排序。'; $__text['일'] = '日'; $__text['일로서 아는'] = '業務上'; -$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = '恢復會覆蓋原有的資料。\n如果備份檔的migrational=false改成migrational=true的話,不會覆蓋原有的資料。請您慎重考慮後繼續進行。\n要繼續進行嗎?'; +$__text['일반적으로 복원시 기존의 데이터를 덮어씁니다. \n덮어쓰지 않고 백업파일을 추가하기 위해서는 백업파일을 열어 migrational=false 를 migrational=true로 바꾸셔야 합니다. 확인하신 후에 진행하시기 바랍니다.\n계속 하시겠습니까?'] = '恢復會覆蓋原有的資料。\\n如果備份檔的migrational=false改成migrational=true的話,不會覆蓋原有的資料。請您慎重考慮後繼續進行。\\n要繼續進行嗎?'; $__text['일별 통계 정보를 복원하고 있습니다.'] = '正在恢復每日統計訊息'; $__text['읽은 글 감추기'] = '隱藏已讀文章'; $__text['읽지 않은 상태로 변경하였습니다.'] = '標記為未讀。'; @@ -1016,11 +1024,11 @@ $__text['정보가져오기'] = '讀取訊息'; $__text['제목'] = '名稱'; $__text['제목을 입력해 주십시오.'] = '請輸入標題。'; -//$__text['제어판으로 이동합니다.'] = ''; $__text['제외할 수 없습니다'] = '不能排除'; $__text['제작자'] = '製作者'; $__text['조각보'] = '訊息面板'; $__text['조각보를 봅니다'] = '瀏覽最新訊息'; +//$__text['존재하지 않은 사용자입니다'] = ''; $__text['종류'] = '類型'; $__text['죄송합니다. 아직 해당 메뉴에 대한 도움말이 준비되지 않았습니다.'] = '對不起,幫助說明尚未準備好。'; $__text['주소를 입력해 주십시오.'] = '請輸入地址。'; @@ -1051,7 +1059,7 @@ $__text['초기화'] = '初始化'; //$__text['초대 링크'] = ''; $__text['초대 메시지'] = '邀請函'; -$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = '請輸入受邀請人的 名字<信箱>。\n也可以只輸入信箱地址。'; +$__text['초대받을 사람의 이름<이메일>을 적어 주십시오.\n이메일만 적어도 됩니다.'] = '請輸入受邀請人的 名字<信箱>。\\n也可以只輸入信箱地址。'; $__text['초대받을 사람이 사용할 블로그 식별자를 적어 주십시오.'] = '請輸入受邀請人要使用的識別名稱。'; $__text['초대상태'] = '邀請狀況'; $__text['초대에 응하지 않은 사용자의 계정을 삭제합니다.'] = '刪除沒有接受邀請的用戶'; @@ -1240,7 +1248,7 @@ //$__text['필터를 추가하였습니다.'] = ''; //$__text['필터를 추가하지 못했습니다.'] = ''; $__text['필터링을 삭제하지 못했습니다.'] = '未能刪除過濾選項。'; -$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '1個FEED被讀取。\n請確認更新。'; +$__text['하나의 피드를 가져왔습니다.\n피드를 업데이트 해 주십시오.'] = '1個FEED被讀取。\\n請確認更新。'; $__text['하위 분류가 있으므로 삭제할 수 없습니다.'] = '因為存在下級分類 不能刪除。'; $__text['한 쪽당 글 수'] = '每頁顯示文章數'; $__text['한 페이지에 글 %1건 표시'] = '每頁顯示 %1 篇'; diff --git a/resources/locale/setup/en.php b/resources/locale/setup/en.php index de32a7cf4..564d08a29 100644 --- a/resources/locale/setup/en.php +++ b/resources/locale/setup/en.php @@ -32,7 +32,7 @@ $__text['토요일'] = 'Sat'; -$__text['"%1"에 %2 디렉토리를 생성할 수 없습니다. "%1"의 퍼미션을 %3(으)로 수정해 주십시오.'] = 'Cannot create directory "%2" in "%1". Change \ the permission setting of "%1" to "%3".'; +$__text['"%1"에 %2 디렉토리를 생성할 수 없습니다. "%1"의 퍼미션을 %3(으)로 수정해 주십시오.'] = 'Cannot create directory "%2" in "%1". Change \\ the permission setting of "%1" to "%3".'; $__text['"%1"에 %2 파일을 생성할 수 없습니다. "%1"의 퍼미션을 %3(으)로 수정해 주십시오.'] = 'Cannot create file "%2" in "%1". Change the permission setting of "%1" to "%3"'; $__text['"%1"에 접근할 수 없습니다. 퍼미션을 %2(으)로 수정해 주십시오.'] = 'Cannot access to "%1". Change the permission setting to $2'; //$__text['%1 버전'] = ''; @@ -102,17 +102,17 @@ $__text['스킨 및 트리, 플러그인의 저작권은 각 제작자에게 있습니다.'] = 'Copyrights to the themes, trees, and plugins belong to their respective producers'; $__text['식별자'] = 'Blog name'; $__text['없음'] = 'None'; -$__text['예: AllowOverride All'] = 'e.g. AllowOverride &lt;b&gt;All&lt;/b&gt;'; -$__text['예: AllowOverride FileInfo'] = 'e.g. AllowOverride &lt;b&gt;FileInfo&lt;/b&gt;'; -$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = 'e.g. LoadModule &lt;b&gt;rewrite_module&lt;/b&gt; modules/&lt;b&gt;mod_rewrite&lt;/b&gt;.so'; -$__text['예: Options All'] = 'e.g. Options &lt;b&gt;All&lt;/b&gt;'; -$__text['예: Options FollowSymLinks'] = 'e.g. Options &lt;b&gt;FollowSymLinks&lt;/b&gt;'; +$__text['예: AllowOverride All'] = 'e.g. AllowOverride &amp;lt;b&amp;gt;All&amp;lt;/b&amp;gt;'; +$__text['예: AllowOverride FileInfo'] = 'e.g. AllowOverride &amp;lt;b&amp;gt;FileInfo&amp;lt;/b&amp;gt;'; +$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = 'e.g. LoadModule &amp;lt;b&amp;gt;rewrite_module&amp;lt;/b&amp;gt; modules/&amp;lt;b&amp;gt;mod_rewrite&amp;lt;/b&amp;gt;.so'; +$__text['예: Options All'] = 'e.g. Options &amp;lt;b&amp;gt;All&amp;lt;/b&amp;gt;'; +$__text['예: Options FollowSymLinks'] = 'e.g. Options &amp;lt;b&amp;gt;FollowSymLinks&amp;lt;/b&amp;gt;'; $__text['운영체제'] = 'OS'; $__text['원격 설치 디렉토리'] = 'Remote installation directory'; $__text['웹 설정 파일'] = 'Web configuration'; $__text['웹서버 설정에 mod_rewrite의 로딩이 포함되어야 합니다.'] = 'mod_rewrite loading should be included in the web server settings'; -$__text['웹서버 설정의 이 디렉토리에 대한 AllowOverride 항목에 FileInfo가 포함되거나 All이어야 합니다.'] = 'On the web server settings &lt;em&gt;AllowOverride&lt;/em&gt; must have &lt;b&gt;FileInfo&lt;/b&gt; or &lt;b&gt;All&lt;/b&gt; settings.'; -$__text['웹서버 설정의 이 디렉토리에 대한 Options 항목에 FollowSymLinks가 포함되거나 All이어야 합니다.'] = 'On the web server settings &lt;em&gt;Options&lt;/em&gt; must have &lt;b&gt;FollowSymLinks&lt;/b&gt; or &lt;b&gt;All&lt;/b&gt; settings.'; +$__text['웹서버 설정의 이 디렉토리에 대한 AllowOverride 항목에 FileInfo가 포함되거나 All이어야 합니다.'] = 'On the web server settings &amp;lt;em&amp;gt;AllowOverride&amp;lt;/em&amp;gt; must have &amp;lt;b&amp;gt;FileInfo&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;All&amp;lt;/b&amp;gt; settings.'; +$__text['웹서버 설정의 이 디렉토리에 대한 Options 항목에 FollowSymLinks가 포함되거나 All이어야 합니다.'] = 'On the web server settings &amp;lt;em&amp;gt;Options&amp;lt;/em&amp;gt; must have &amp;lt;b&amp;gt;FollowSymLinks&amp;lt;/b&amp;gt; or &amp;lt;b&amp;gt;All&amp;lt;/b&amp;gt; settings.'; $__text['웹서버'] = 'Web Server'; $__text['위 2와 3의 문제는 아래 내용을 웹서버 설정에 포함시켜 해결할 수 있습니다.'] = 'Case 2 and 3 can be addressed by including the following to the web server settings.'; $__text['이메일'] = 'Email'; @@ -152,4 +152,4 @@ //$__text['현재 IIS에서의 설치는 실험적으로만 지원하고 있으며 별도의 Rewrite 모듈을 사용해야 합니다.'] = ''; $__text['환경'] = 'Configuration'; //$__text['환영합니다'] = ''; -?> +?> \ No newline at end of file diff --git a/resources/locale/setup/ja.php b/resources/locale/setup/ja.php index ce4a4cb5d..2f7d0245f 100644 --- a/resources/locale/setup/ja.php +++ b/resources/locale/setup/ja.php @@ -66,7 +66,7 @@ $__text['데이터베이스를 준비하고 있습니다. 잠시만 기다려 주십시오.'] = 'データベースを作成しております。しばらくお待ちください…'; $__text['데이터베이스에 연결할 수 없습니다.'] = 'データベースに接続できません。'; $__text['데이터베이스에 접근할 수 없습니다.'] = 'データベースにアクセスできません。'; -$__text['도메인네임(DNS)으로 블로그 식별'] = '<acronym title="Domain Name Server">DNS</acronym>でブログを識別'; +$__text['도메인네임(DNS)으로 블로그 식별'] = '&lt;acronym title="Domain Name Server"&gt;DNS&lt;/acronym&gt;でブログを識別'; $__text['만약 rewrite 모듈 설정을 올바르게 했는데도 모듈 사용 여부의 검사에 문제가 있는 경우 rewrite 모듈을 사용하지 않음을 선택하시고 이 부분을 건너 뛰시기 바랍니다.'] = 'rewriteモジュール設定から問題を見つからなかった場合にもエラーが発生し続けるならばrewriteモジュールの利用を解除してインストールを進んでください。'; //$__text['만약 이 페이지를 보고 계시다면 Apache mod_rewrite와 호환되지 않는 Rewrite 모듈을 사용 중이거나 아예 모듈이 없는 경우입니다.'] = ''; $__text['버전'] = '版本'; @@ -96,17 +96,17 @@ $__text['스킨 및 트리, 플러그인의 저작권은 각 제작자에게 있습니다.'] = 'テーマ、分類ツリーやプラグインの著作権はそれぞれの製作者がお持ちしております。'; $__text['식별자'] = '識別子'; $__text['없음'] = 'なし'; -$__text['예: AllowOverride All'] = '例: AllowOverride <strong>All</strong>'; -$__text['예: AllowOverride FileInfo'] = '例: AllowOverride <strong>FileInfo</strong>'; -$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = '例: LoadModule <strong>rewrite_module</strong> modules/<strong>mod_rewrite</strong>.so'; -$__text['예: Options All'] = '例: Options <strong>All</strong>'; -$__text['예: Options FollowSymLinks'] = '例: Options <strong>FollowSymLinks</strong>'; +$__text['예: AllowOverride All'] = '例: AllowOverride &lt;strong&gt;All&lt;/strong&gt;'; +$__text['예: AllowOverride FileInfo'] = '例: AllowOverride &lt;strong&gt;FileInfo&lt;/strong&gt;'; +$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = '例: LoadModule &lt;strong&gt;rewrite_module&lt;/strong&gt; modules/&lt;strong&gt;mod_rewrite&lt;/strong&gt;.so'; +$__text['예: Options All'] = '例: Options &lt;strong&gt;All&lt;/strong&gt;'; +$__text['예: Options FollowSymLinks'] = '例: Options &lt;strong&gt;FollowSymLinks&lt;/strong&gt;'; $__text['운영체제'] = 'OS'; $__text['원격 설치 디렉토리'] = '遠隔インストールフォルダー'; $__text['웹 설정 파일'] = 'ウェブ設定ファイル'; -$__text['웹서버 설정에 mod_rewrite의 로딩이 포함되어야 합니다.'] = 'ウェブサーバーの設定に <strong>mod_rewriteのモジュールのロードを含めてください。'; -$__text['웹서버 설정의 이 디렉토리에 대한 AllowOverride 항목에 FileInfo가 포함되거나 All이어야 합니다.'] = 'このディレクトリに対する<em>AllowOverride</em>項目のウェプサーバーの設定に<strong>FileInfo</strong>を含めるか、<strong>All</strong>に設定してください。'; -$__text['웹서버 설정의 이 디렉토리에 대한 Options 항목에 FollowSymLinks가 포함되거나 All이어야 합니다.'] = 'このディレクトリに対する<em>Options</em>項目のウェプサーバーの設定に</strong>FollowSymLinks</strong>を含めるか、<strong>All</strong>に設定してください。'; +$__text['웹서버 설정에 mod_rewrite의 로딩이 포함되어야 합니다.'] = 'ウェブサーバーの設定に &lt;strong&gt;mod_rewriteのモジュールのロードを含めてください。'; +$__text['웹서버 설정의 이 디렉토리에 대한 AllowOverride 항목에 FileInfo가 포함되거나 All이어야 합니다.'] = 'このディレクトリに対する&lt;em&gt;AllowOverride&lt;/em&gt;項目のウェプサーバーの設定に&lt;strong&gt;FileInfo&lt;/strong&gt;を含めるか、&lt;strong&gt;All&lt;/strong&gt;に設定してください。'; +$__text['웹서버 설정의 이 디렉토리에 대한 Options 항목에 FollowSymLinks가 포함되거나 All이어야 합니다.'] = 'このディレクトリに対する&lt;em&gt;Options&lt;/em&gt;項目のウェプサーバーの設定に&lt;/strong&gt;FollowSymLinks&lt;/strong&gt;を含めるか、&lt;strong&gt;All&lt;/strong&gt;に設定してください。'; $__text['웹서버'] = 'ウェブサーバー'; $__text['위 2와 3의 문제는 아래 내용을 웹서버 설정에 포함시켜 해결할 수 있습니다.'] = '上記の2・3の問題は下の内容をウェブサーバーの設定に含ませて解決できます。'; $__text['이메일'] = 'メール'; @@ -133,7 +133,7 @@ $__text['텍스트큐브 주소'] = 'TextcubeのURL'; $__text['텍스트큐브 테이블을 삭제합니다'] = 'Textcubeのテーブルを削除します。'; $__text['텍스트큐브가 성공적으로 설치되었습니다.'] = 'Textcubeをインストールしました。'; -$__text['텍스트큐브는 GPL 라이선스로 제공되며, 모든 사람이 자유롭게 이용할 수 있습니다.'] = 'Textcubeは <a href="http://www.gnu.org/licenses/gpl.html" title="GNU GPL 文書へと進む">GPL License</a>で提供されており、皆様がご自由に利用できます。'; +$__text['텍스트큐브는 GPL 라이선스로 제공되며, 모든 사람이 자유롭게 이용할 수 있습니다.'] = 'Textcubeは &lt;a href="http://www.gnu.org/licenses/gpl.html" title="GNU GPL 文書へと進む"&gt;GPL License&lt;/a&gt;で提供されており、皆様がご自由に利用できます。'; $__text['텍스트큐브를 다시 설정합니다'] = 'Textcubeをリセットします。'; $__text['텍스트큐브를 이용해 주셔서 감사합니다.'] = 'Textcubeのご利用ありがとうございます。'; $__text['파일 시스템 권한'] = 'ファイルシステム権限'; diff --git a/resources/locale/setup/vi.php b/resources/locale/setup/vi.php index 392b06640..5d7ee9f4f 100644 --- a/resources/locale/setup/vi.php +++ b/resources/locale/setup/vi.php @@ -100,17 +100,17 @@ $__text['스킨 및 트리, 플러그인의 저작권은 각 제작자에게 있습니다.'] = 'Bản quyền của những giao diện, cây thư mục và Plugin thuộc về những người tạo ra nó.'; $__text['식별자'] = 'Tên Blog'; $__text['없음'] = 'Không có'; -$__text['예: AllowOverride All'] = 'Ví dụ: AllowOverride <b>All</b>'; -$__text['예: AllowOverride FileInfo'] = 'Ví dụ: AllowOverride <b>FileInfo</b>'; -$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = 'Ví dụ: LoadModule <b>rewrite_module</b> modules/<b>mod_rewrite</b>.so'; -$__text['예: Options All'] = 'Ví dụ: Options <b>All</b>'; -$__text['예: Options FollowSymLinks'] = 'Ví dụ: Options <b>FollowSymLinks</b>'; +$__text['예: AllowOverride All'] = 'Ví dụ: AllowOverride &lt;b&gt;All&lt;/b&gt;'; +$__text['예: AllowOverride FileInfo'] = 'Ví dụ: AllowOverride &lt;b&gt;FileInfo&lt;/b&gt;'; +$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = 'Ví dụ: LoadModule &lt;b&gt;rewrite_module&lt;/b&gt; modules/&lt;b&gt;mod_rewrite&lt;/b&gt;.so'; +$__text['예: Options All'] = 'Ví dụ: Options &lt;b&gt;All&lt;/b&gt;'; +$__text['예: Options FollowSymLinks'] = 'Ví dụ: Options &lt;b&gt;FollowSymLinks&lt;/b&gt;'; $__text['운영체제'] = 'Hệ điều hành'; $__text['원격 설치 디렉토리'] = 'Thư mục cài đặt từ xa'; $__text['웹 설정 파일'] = 'Thiết lập Website'; $__text['웹서버 설정에 mod_rewrite의 로딩이 포함되어야 합니다.'] = 'mod_rewrite cần phải được bao gồm những thiết đặt của Host.'; -$__text['웹서버 설정의 이 디렉토리에 대한 AllowOverride 항목에 FileInfo가 포함되거나 All이어야 합니다.'] = 'Những thiết đặt trên Host cần phải có những thiết lập <em>AllowOverride</em>, <b>FileInfo</b> hay <b>All</b>.'; -$__text['웹서버 설정의 이 디렉토리에 대한 Options 항목에 FollowSymLinks가 포함되거나 All이어야 합니다.'] = 'Những thiết đặt trên Host cần phải có những thiết lập <em>Options</em> <b>FollowSymLinks</b> hay <b>All</b>.'; +$__text['웹서버 설정의 이 디렉토리에 대한 AllowOverride 항목에 FileInfo가 포함되거나 All이어야 합니다.'] = 'Những thiết đặt trên Host cần phải có những thiết lập &lt;em&gt;AllowOverride&lt;/em&gt;, &lt;b&gt;FileInfo&lt;/b&gt; hay &lt;b&gt;All&lt;/b&gt;.'; +$__text['웹서버 설정의 이 디렉토리에 대한 Options 항목에 FollowSymLinks가 포함되거나 All이어야 합니다.'] = 'Những thiết đặt trên Host cần phải có những thiết lập &lt;em&gt;Options&lt;/em&gt; &lt;b&gt;FollowSymLinks&lt;/b&gt; hay &lt;b&gt;All&lt;/b&gt;.'; $__text['웹서버'] = 'Web Server'; $__text['위 2와 3의 문제는 아래 내용을 웹서버 설정에 포함시켜 해결할 수 있습니다.'] = 'Trường hợp 2 và 3 có thể được gửi bởi việc bao gồm sự theo sau tới những thiết đặt Host.'; $__text['이메일'] = 'Email'; diff --git a/resources/locale/setup/zh-CN.php b/resources/locale/setup/zh-CN.php index 2e0c8f227..3aafbf258 100644 --- a/resources/locale/setup/zh-CN.php +++ b/resources/locale/setup/zh-CN.php @@ -93,11 +93,11 @@ $__text['스킨 및 트리, 플러그인의 저작권은 각 제작자에게 있습니다.'] = '模板和插件的著作权归各作者所有。'; $__text['식별자'] = '识别ID'; $__text['없음'] = '无'; -$__text['예: AllowOverride All'] = '例: AllowOverride <b>All</b>'; -$__text['예: AllowOverride FileInfo'] = '例: AllowOverride <b>FileInfo</b>'; -$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = '例: LoadModule <b>rewrite_module</b> modules/<b>mod_rewrite</b>.so'; -$__text['예: Options All'] = '例: Options <b>All</b>'; -$__text['예: Options FollowSymLinks'] = '例: Options <b>FollowSymLinks</b>'; +$__text['예: AllowOverride All'] = '例: AllowOverride &lt;b&gt;All&lt;/b&gt;'; +$__text['예: AllowOverride FileInfo'] = '例: AllowOverride &lt;b&gt;FileInfo&lt;/b&gt;'; +$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = '例: LoadModule &lt;b&gt;rewrite_module&lt;/b&gt; modules/&lt;b&gt;mod_rewrite&lt;/b&gt;.so'; +$__text['예: Options All'] = '例: Options &lt;b&gt;All&lt;/b&gt;'; +$__text['예: Options FollowSymLinks'] = '例: Options &lt;b&gt;FollowSymLinks&lt;/b&gt;'; $__text['운영체제'] = '系统'; $__text['원격 설치 디렉토리'] = '远程制作文件'; $__text['웹 설정 파일'] = '服务器设定文件'; diff --git a/resources/locale/setup/zh-TW.php b/resources/locale/setup/zh-TW.php index 7892c4d02..fa51e7683 100644 --- a/resources/locale/setup/zh-TW.php +++ b/resources/locale/setup/zh-TW.php @@ -93,11 +93,11 @@ $__text['스킨 및 트리, 플러그인의 저작권은 각 제작자에게 있습니다.'] = '模板和插件的著作權歸各作者所有。'; $__text['식별자'] = '識別ID'; $__text['없음'] = '無'; -$__text['예: AllowOverride All'] = '例: AllowOverride <b>All</b>'; -$__text['예: AllowOverride FileInfo'] = '例: AllowOverride <b>FileInfo</b>'; -$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = '例: LoadModule <b>rewrite_module</b> modules/<b>mod_rewrite</b>.so'; -$__text['예: Options All'] = '例: Options <b>All</b>'; -$__text['예: Options FollowSymLinks'] = '例: Options <b>FollowSymLinks</b>'; +$__text['예: AllowOverride All'] = '例: AllowOverride &lt;b&gt;All&lt;/b&gt;'; +$__text['예: AllowOverride FileInfo'] = '例: AllowOverride &lt;b&gt;FileInfo&lt;/b&gt;'; +$__text['예: LoadModule rewrite_module modules/mod_rewrite.so'] = '例: LoadModule &lt;b&gt;rewrite_module&lt;/b&gt; modules/&lt;b&gt;mod_rewrite&lt;/b&gt;.so'; +$__text['예: Options All'] = '例: Options &lt;b&gt;All&lt;/b&gt;'; +$__text['예: Options FollowSymLinks'] = '例: Options &lt;b&gt;FollowSymLinks&lt;/b&gt;'; $__text['운영체제'] = '系統'; $__text['원격 설치 디렉토리'] = '遠端製作文件'; $__text['웹 설정 파일'] = '伺服器設定文件'; diff --git a/setup.php b/setup.php index 2c0ecc7d0..be0e85fc3 100644 --- a/setup.php +++ b/setup.php @@ -1133,7 +1133,7 @@ function fail($msg) { INSERT INTO {$_POST['dbPrefix']}SkinSettings VALUES (1,'skin','coolant'); INSERT INTO {$_POST['dbPrefix']}FeedSettings (blogid) values(1); INSERT INTO {$_POST['dbPrefix']}FeedGroups (blogid) values(1); -INSERT INTO {$_POST['dbPrefix']}Entries (blogid, userid, id, category, visibility, location, title, slogan, contentformatter, contenteditor, starred, acceptcomment, accepttrackback, published, content) VALUES (1, 1, 1, 0, 2, '/', '".POD::escapeString(_t('환영합니다'))."', 'welcome', 'ttml', 'modern', 0, 1, 1, ".Timestamp::getUNIXtime().", '".POD::escapeString(getDefaultPostContent())."')"; +INSERT INTO {$_POST['dbPrefix']}Entries (blogid, userid, id, category, visibility, location, title, slogan, contentformatter, contenteditor, starred, acceptcomment, accepttrackback, created, published, modified, content) VALUES (1, 1, 1, 0, 2, '/', '".POD::escapeString(_t('환영합니다'))."', 'welcome', 'ttml', 'modern', 0, 1, 1, ".Timestamp::getUNIXtime().", ".Timestamp::getUNIXtime().",".Timestamp::getUNIXtime().",'".POD::escapeString(getDefaultPostContent())."')"; $query = explode(';', trim($schema)); foreach ($query as $sub) { if (!empty($sub) && !POD::query($sub, false)) { diff --git a/skin/admin/canon/basic.css b/skin/admin/canon/basic.css index eda16894e..dab9c4e1c 100644 --- a/skin/admin/canon/basic.css +++ b/skin/admin/canon/basic.css @@ -356,57 +356,30 @@ textarea #main-menu #menu-setting, #main-menu #menu-control { - width : 40px; background-color : #FFFFFF; + background-image : url("./image/bg_menu.png"); } #main-menu #menu-center { + width : 40px; + margin-right : 10px; background-image : url("./image/img_menu_center.png") !important; + background-repeat : no-repeat; } -#main-menu #menu-entry -{ - background-image : url("./image/img_menu_post.png") !important; -} - -#main-menu #menu-communication -{ - background-image : url("./image/img_menu_communication.png") !important; -} - -#main-menu #menu-network -{ - background-image : url("./image/img_menu_network.png") !important; -} - -#main-menu #menu-skin -{ - background-image : url("./image/img_menu_skin.png") !important; -} - -#main-menu #menu-plugin -{ - background-image : url("./image/img_menu_plugin.png") !important; -} - -#main-menu #menu-setting +#main-menu #menu-center a.menu-name span { - background-image : url("./image/img_menu_setting.png") !important; + display:none; } #main-menu a.menu-name { - width : 40px; height : 40px; + padding-right : 10px; display : block !important; } -#main-menu a.menu-name span -{ - display : none; -} - #main-menu li a:link, #main-menu li a:visited { @@ -417,6 +390,7 @@ textarea #main-menu li a:hover, #main-menu li a:active { + color : #ADFF2F; text-decoration : none; } @@ -451,6 +425,14 @@ textarea color : #FAFAA0; } +#main-menu li:hover a.menu-name +{ + -webkit-transition-duration : 300ms; + -webkit-transform : scale(1.1); + -moz-transition-duration : 300ms; + -moz-transform : scale(1.1); +} + #main-menu ul.sub-menu { display : none; @@ -523,6 +505,8 @@ textarea border-radius : 5px; -moz-border-radius : 5px; -webkit-border-radius : 5px; + -webkit-transition-duration : 300ms; + -webkit-transform : translate(0.3em,0); } #main-menu li:hover ul li a:link, @@ -571,8 +555,10 @@ textarea left : 0; top : 40px; width : 150px; - height : 100%; +/* height : 100%;*/ border-right : solid 1px #BBB; + -webkit-box-shadow : 0 0 7px #666; + -moz-box-shadow : 0 0 7px #666; } #sub-menu li @@ -580,7 +566,16 @@ textarea background-color : #DDD !important; background-image : url("./image/bg_submenu_item.gif"); border-bottom : solid 1px #BBB; - margin-bottom : 1px; + border-right : 1px solid #BBB; + margin-top : 1px; +} + +#sub-menu li:hover +{ + -webkit-transition-duration : 300ms; + -webkit-transform : scale(1.1); + -moz-transition-duration : 300ms; + -moz-transform : scale(1.1); } #sub-menu li.selected, @@ -604,6 +599,7 @@ textarea text-decoration : none !important; background-image : url("./image/bg_submenu_item_selected.gif"); -webkit-text-shadow : 0 0 5px #FFE13C !important; + -moz-text-shadow : 0 0 5px #FFE13C !important; /* background-color : #CCC;*/ } @@ -1435,6 +1431,7 @@ table.data-inbox tbody tr td.inactive-class background-image : url("./image/bg_submenu_item_selected.gif"); border : 1px solid #333; -webkit-box-shadow : 0 0 7px #FFE13C; + -moz-box-shadow : 0 0 7px #FFE13C; } .wide-button @@ -1477,7 +1474,7 @@ input.input-text font-weight: normal !important; padding: 27px 25px 13px 25px!important; color: #000 !important; - z-index: 1000; + z-index: 2000; } .ajaxProcessingMessage, .ajaxSuccessMessage diff --git a/skin/admin/canon/center.css b/skin/admin/canon/center.css index fbf86e95e..b5359ec07 100644 --- a/skin/admin/canon/center.css +++ b/skin/admin/canon/center.css @@ -442,7 +442,7 @@ { position : absolute; top : -15px; - left : 350px; + left : 450px; } #widget-button-bottom { diff --git a/skin/admin/canon/editor.css b/skin/admin/canon/editor.css index d5bb3e65b..7be037241 100644 --- a/skin/admin/canon/editor.css +++ b/skin/admin/canon/editor.css @@ -24,36 +24,34 @@ h3 /* title ----------------------------------------------------------------------------------------*/ #title-section { - margin : 0 20px 0 0; - padding : 5px 3px 5px 5px; -/* width : 658px;*/ - width : 100%; + position : fixed; + top : 0; + right : 105px; + height : 40px; + z-index : 1100; + background-color : #ffffff; + background-image : url("./image/bg_menu_round.png"); } - #title-section dl { - border : none; - margin-bottom : 6px; + padding-top:6px; } #title-section dl dt { - color : #666666; - font-weight : bold; - padding : 0 0 3px 0; - width : 70px !important; + color : #eee; + padding : 6px 0 3px 10px; + width : 40px !important; } #title-section dl dd { - margin-left : 80px; -} -#title-section dl dd div.starred -{ - margin-left:10px !important; + margin-left : 45px; } -#title-section dl dd select + +#title-section dl dd select, +#category-section dl dd select { vertical-align : middle; width : 160px; @@ -63,14 +61,18 @@ h3 { border : 1px solid #999999; vertical-align : middle; - width : 500px !important; - margin-left : 8px; + width : 400px !important; + margin-left : 0; } #starred { + position : fixed; + top : 11px; + right : 110px; width : 20px !important; - display : inline; + display : block; + background-color : #ffffff !important; } .star-icon span, @@ -82,25 +84,53 @@ h3 .star-icon a { background-image : url("./image/icon_starred.gif"); + background-color : #ffffff !important; background-position : left bottom; background-repeat : no-repeat; - display : block; + display : block; width : 16px; - height : 20px; + height : 16px; float : left; } .unstar-icon a { background-image : url("./image/icon_unstarred.gif"); + background-color : #ffffff !important; background-position : left bottom; background-repeat : no-repeat; display : block; width : 16px; - height : 20px; + height : 16px; float : left; } +#category-section +{ + margin : 30px 20px 0 0; + padding : 5px 3px 5px 5px; + width : 100%; +} + +#category-section dl +{ + border : none; + margin-bottom : 6px; +} + +#category-section dl dt +{ + color : #666; + font-weight : bold; + padding : 0 0 3px 10px; + width : 70px !important; +} + +#category-section dl dd +{ + margin-left : 80px; +} + #category-line { margin-bottom : 3px !important; @@ -174,6 +204,21 @@ h3 /* editor */ +#formatbox-container +{ + margin : 0 auto; + width : 100%; + position : fixed; + top : 40px; + height : 31px; + z-index : 190; + background-color : #fff; + filter : alpha(opacity=90); + opacity : .90; + color : #fff; + border-bottom :1px solid #BBB; +} + #editWindow { height : 448px; @@ -387,7 +432,7 @@ h3 margin : 0; /*padding : 15px 5px 0 5px;*/ padding : 0; - width : 650px !important; + width : 100% !important; height : 55px; /* float : right !important;*/ border-top : 1px solid #EEEEEE; @@ -464,12 +509,17 @@ h3 /* upload ---------------------------------------------------------------------------------------*/ #upload-section { - background-color : #F5F5F5; - margin : 0 20px 2px 0; + background-color : #FFF; + margin : 10px 20px 2px 0; position : relative; - width : 650px; + width : 100%; /* width : 550px;*/ /* float : left;*/ + border:1px solid #F2F2F2; + -moz-border-radius-topleft : 8px; + -moz-border-radius-topright : 8px; + -webkit-border-top-left-radius : 8px; + -webkit-border-top-right-radius : 8px; } #upload-section h3 @@ -477,6 +527,10 @@ h3 background-color : #F2F2F2; display : block; padding : 10px 10px 3px 10px; + -moz-border-radius-topleft : 8px; + -moz-border-radius-topright : 8px; + -webkit-border-top-left-radius : 8px; + -webkit-border-top-right-radius : 8px; } #upload-detail @@ -582,7 +636,7 @@ h3 { position : absolute; top : 36px; - right : 5px; + left : 550px; width : 100px; } @@ -675,7 +729,7 @@ h3 margin : 0; position : relative; padding : 0 0 8px 0; - width : 650px; + width : 100%; /* float : left;*/ /* display : none;*/ border-left : 1px solid #EEEEEE; @@ -871,18 +925,33 @@ dl#power-line #templateDialog dl dt { - margin: 10px 0 3px 0; - font-weight: bold !important; + margin : 10px 0 3px 0; + font-weight : bold !important; } #templateDialog dl dd.noItem { - border: 1px dotted #DBDBDB; - text-align: center; - padding: 10px; + border : 1px dotted #DBDBDB; + text-align : center; + padding : 10px; } #templateDialog .button-box { - padding: 10px 0 5px 0 !important; + padding : 10px 0 5px 0 !important; +} + +/** Specified for xquared editor **/ +.xquared .toolbar { + border-bottom : 1px solid #c2c2c2 !important; +} +.xquared .editor { + border-top : 1px solid #c2c2c2 !important; +} + +.xquared div.toolbar { + position : fixed !important; + top : 40px !important; + height : 30px !important; + z-index : 190; } diff --git a/skin/admin/modern/basic.css b/skin/admin/modern/basic.css index 735c1206c..b08d38c8d 100644 --- a/skin/admin/modern/basic.css +++ b/skin/admin/modern/basic.css @@ -436,6 +436,11 @@ textarea padding : 0 16px !important; } +#custom-sub-menu +{ + display : none; +} + /* pseudo box */ #pseudo-box { diff --git a/skin/admin/modern/editor.css b/skin/admin/modern/editor.css index f35a611c0..800639c70 100644 --- a/skin/admin/modern/editor.css +++ b/skin/admin/modern/editor.css @@ -16,20 +16,23 @@ h3 } /* title ----------------------------------------------------------------------------------------*/ -#title-section +#title-section, +#category-section { margin : 0 20px 0 0; padding : 5px 3px 5px 5px; width : 658px; } -#title-section dl +#title-section dl, +#category-section dl { border : none; margin-bottom : 6px; } -#title-section dl dt +#title-section dl dt, +#category-section dl dt { color : #666666; font-weight : bold; @@ -37,16 +40,19 @@ h3 width : 70px !important; } -#title-section dl dd +#title-section dl dd, +#category-section dl dd { margin-left : 80px; } + #title-section dl dd div.starred { margin-left:10px !important; } -#title-section dl dd select +#title-section dl dd select, +#category-section dl dd select { vertical-align : middle; width : 160px; diff --git a/skin/admin/retro-celebrate/basic.css b/skin/admin/retro-celebrate/basic.css index 3e371b603..f2fb5f51b 100644 --- a/skin/admin/retro-celebrate/basic.css +++ b/skin/admin/retro-celebrate/basic.css @@ -567,6 +567,11 @@ textarea font-weight : normal; } +#custom-sub-menu +{ + display : none; +} + /* Data Box **************************************************************************************/ /* pseudo box -----------------------------------------------------------------------------------*/ diff --git a/skin/admin/retro-celebrate/editor.css b/skin/admin/retro-celebrate/editor.css index f35a611c0..800639c70 100644 --- a/skin/admin/retro-celebrate/editor.css +++ b/skin/admin/retro-celebrate/editor.css @@ -16,20 +16,23 @@ h3 } /* title ----------------------------------------------------------------------------------------*/ -#title-section +#title-section, +#category-section { margin : 0 20px 0 0; padding : 5px 3px 5px 5px; width : 658px; } -#title-section dl +#title-section dl, +#category-section dl { border : none; margin-bottom : 6px; } -#title-section dl dt +#title-section dl dt, +#category-section dl dt { color : #666666; font-weight : bold; @@ -37,16 +40,19 @@ h3 width : 70px !important; } -#title-section dl dd +#title-section dl dd, +#category-section dl dd { margin-left : 80px; } + #title-section dl dd div.starred { margin-left:10px !important; } -#title-section dl dd select +#title-section dl dd select, +#category-section dl dd select { vertical-align : middle; width : 160px; diff --git a/skin/admin/swallow/basic.css b/skin/admin/swallow/basic.css index 769039157..ff32315de 100644 --- a/skin/admin/swallow/basic.css +++ b/skin/admin/swallow/basic.css @@ -434,6 +434,11 @@ textarea padding : 0 16px !important; } +#custom-sub-menu +{ + display : none; +} + /* pseudo box */ #pseudo-box { diff --git a/skin/admin/swallow/editor.css b/skin/admin/swallow/editor.css index f35a611c0..800639c70 100644 --- a/skin/admin/swallow/editor.css +++ b/skin/admin/swallow/editor.css @@ -16,20 +16,23 @@ h3 } /* title ----------------------------------------------------------------------------------------*/ -#title-section +#title-section, +#category-section { margin : 0 20px 0 0; padding : 5px 3px 5px 5px; width : 658px; } -#title-section dl +#title-section dl, +#category-section dl { border : none; margin-bottom : 6px; } -#title-section dl dt +#title-section dl dt, +#category-section dl dt { color : #666666; font-weight : bold; @@ -37,16 +40,19 @@ h3 width : 70px !important; } -#title-section dl dd +#title-section dl dd, +#category-section dl dd { margin-left : 80px; } + #title-section dl dd div.starred { margin-left:10px !important; } -#title-section dl dd select +#title-section dl dd select, +#category-section dl dd select { vertical-align : middle; width : 160px; diff --git a/skin/admin/whitedream/basic.css b/skin/admin/whitedream/basic.css index 20146b46b..820ad79a3 100644 --- a/skin/admin/whitedream/basic.css +++ b/skin/admin/whitedream/basic.css @@ -478,6 +478,10 @@ textarea { display : none; } +#custom-sub-menu +{ + display : none; +} /* pseudo box */ #pseudo-box diff --git a/skin/admin/whitedream/editor.css b/skin/admin/whitedream/editor.css index 820f4fbfe..4f42e22b4 100644 --- a/skin/admin/whitedream/editor.css +++ b/skin/admin/whitedream/editor.css @@ -16,20 +16,23 @@ h3 } /* title ----------------------------------------------------------------------------------------*/ -#title-section +#title-section, +#category-section { margin : 0 20px 0 0; padding : 5px 3px 5px 5px; width : 658px; } -#title-section dl +#title-section dl, +#category-section dl { border : none; margin-bottom : 6px; } -#title-section dl dt +#title-section dl dt, +#category-section dl dt { color : #666666; font-weight : bold; @@ -37,16 +40,19 @@ h3 width : 70px !important; } -#title-section dl dd +#title-section dl dd, +#category-section dl dd { margin-left : 80px; } + #title-section dl dd div.starred { margin-left:10px !important; } -#title-section dl dd select +#title-section dl dd select, +#category-section dl dd select { vertical-align : middle; width : 160px;