当前位置: 首页>>代码示例>>PHP>>正文


PHP QApplication::Translate方法代码示例

本文整理汇总了PHP中QApplication::Translate方法的典型用法代码示例。如果您正苦于以下问题:PHP QApplication::Translate方法的具体用法?PHP QApplication::Translate怎么用?PHP QApplication::Translate使用的例子?那么, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在QApplication的用法示例。


在下文中一共展示了QApplication::Translate方法的15个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。

示例1: Form_Create

 protected function Form_Create()
 {
     parent::Form_Create();
     // Use the CreateFromPathInfo shortcut (this can also be done manually using the NarroContextCommentMetaControl constructor)
     // MAKE SURE we specify "$this" as the MetaControl's (and thus all subsequent controls') parent
     $this->mctNarroContextComment = NarroContextCommentMetaControl::CreateFromPathInfo($this);
     // Call MetaControl's methods to create qcontrols based on NarroContextComment's data fields
     $this->lblCommentId = $this->mctNarroContextComment->lblCommentId_Create();
     $this->lstContext = $this->mctNarroContextComment->lstContext_Create();
     $this->calCreated = $this->mctNarroContextComment->calCreated_Create();
     $this->calModified = $this->mctNarroContextComment->calModified_Create();
     $this->txtCommentText = $this->mctNarroContextComment->txtCommentText_Create();
     $this->txtCommentTextMd5 = $this->mctNarroContextComment->txtCommentTextMd5_Create();
     // Create Buttons and Actions on this Form
     $this->btnSave = new QButton($this);
     $this->btnSave->Text = QApplication::Translate('Save');
     $this->btnSave->AddAction(new QClickEvent(), new QAjaxAction('btnSave_Click'));
     $this->btnSave->CausesValidation = true;
     $this->btnCancel = new QButton($this);
     $this->btnCancel->Text = QApplication::Translate('Cancel');
     $this->btnCancel->AddAction(new QClickEvent(), new QAjaxAction('btnCancel_Click'));
     $this->btnDelete = new QButton($this);
     $this->btnDelete->Text = QApplication::Translate('Delete');
     $this->btnDelete->AddAction(new QClickEvent(), new QConfirmAction(sprintf(QApplication::Translate('Are you SURE you want to DELETE this %s?'), QApplication::Translate('NarroContextComment'))));
     $this->btnDelete->AddAction(new QClickEvent(), new QAjaxAction('btnDelete_Click'));
     $this->btnDelete->Visible = $this->mctNarroContextComment->EditMode;
 }
开发者ID:Jobava,项目名称:narro,代码行数:27,代码来源:NarroContextCommentEditFormBase.class.php

示例2: Form_Create

 protected function Form_Create()
 {
     if (!QApplication::$Login) {
         QApplication::Redirect('/');
     }
     $this->objQcodoClass = QcodoClass::Load(QApplication::PathInfo(0));
     if (!$this->objQcodoClass) {
         throw new Exception('Invalid QcodoClass Id: ' . QApplication::PathInfo(0));
     }
     $this->lblName = new QLabel($this);
     $this->lblName->Text = $this->objQcodoClass->Name;
     $this->lstClassGroup = new QListBox($this);
     $this->lstClassGroup->Name = 'Class Group/Classification';
     foreach (ClassGroup::LoadAll(QQ::Clause(QQ::OrderBy(QQN::ClassGroup()->OrderNumber))) as $objClassGroup) {
         $this->lstClassGroup->AddItem($objClassGroup->Name, $objClassGroup->Id, $objClassGroup->Id == $this->objQcodoClass->ClassGroupId);
     }
     $this->chkEnumerationFlag = new QCheckBox($this);
     $this->chkEnumerationFlag->Checked = $this->objQcodoClass->EnumerationFlag;
     $this->chkEnumerationFlag->Name = 'Enumeration Class Flag';
     $this->txtShortDescription = new QTextBox($this);
     $this->txtShortDescription->Name = QApplication::Translate('Short Description');
     $this->txtShortDescription->Text = $this->objQcodoClass->ShortDescription;
     $this->txtShortDescription->TextMode = QTextMode::MultiLine;
     $this->txtExtendedDescription = new QWriteBox($this);
     $this->txtExtendedDescription->Name = QApplication::Translate('Extended Description');
     $this->txtExtendedDescription->Text = $this->objQcodoClass->ExtendedDescription;
     $this->btnSave = new QButton($this);
     $this->btnSave->Text = 'Save';
     $this->btnSave->AddAction(new QClickEvent(), new QServerAction('btnSave_Click'));
     $this->btnSave->CausesValidation = true;
     $this->btnCancel = new QButton($this);
     $this->btnCancel->Text = 'Cancel';
     $this->btnCancel->AddAction(new QClickEvent(), new QServerAction('btnCancel_Click'));
     $this->btnCancel->CausesValidation = false;
 }
开发者ID:qcodo,项目名称:qcodo-api,代码行数:35,代码来源:edit_class.php

示例3: Form_Create

 protected function Form_Create()
 {
     // Define our Label
     $this->txtBasic = new QTextBox($this);
     $this->txtBasic->Name = QApplication::Translate("Basic");
     $this->txtBasic = new QTextBox($this);
     $this->txtBasic->MaxLength = 5;
     $this->txtInt = new QIntegerTextBox($this);
     $this->txtInt->Maximum = 10;
     $this->txtFlt = new QFloatTextBox($this);
     $this->txtList = new QCsvTextBox($this);
     $this->txtList->MinItemCount = 2;
     $this->txtList->MaxItemCount = 5;
     $this->txtEmail = new QEmailTextBox($this);
     $this->txtUrl = new QUrlTextBox($this);
     $this->txtCustom = new QTextBox($this);
     // These parameters are fed into filter_var. See PHP doc on filter_var() for more info.
     $this->txtCustom->ValidateFilter = FILTER_VALIDATE_REGEXP;
     $this->txtCustom->ValidateFilterOptions = array('options' => array('regexp' => '/^(0x)?[0-9A-F]*$/i'));
     // must be a hex decimal, optional leading 0x
     $this->txtCustom->LabelForInvalid = 'Hex value required.';
     $this->btnValidate = new QButton($this);
     $this->btnValidate->Text = "Filter and Validate";
     $this->btnValidate->AddAction(new QClickEvent(), new QServerAction());
     // just validates
     $this->btnValidate->CausesValidation = true;
 }
开发者ID:vaibhav-kaushal,项目名称:qc-framework,代码行数:27,代码来源:textbox.php

示例4: GetResetButtonHtml

 /**
  * Creates the reset button html for use with multiple select boxes.
  * 
  */
 protected function GetResetButtonHtml()
 {
     $strJavaScriptOnClick = sprintf('$j("#%s").val(null);$j("#%s").trigger("change"); return false;', $this->strControlId, $this->strControlId);
     $strToReturn = sprintf(' <a id="reset_ctl_%s" href="#" class="listboxReset">%s</a>', $this->strControlId, QApplication::Translate('Reset'));
     QApplication::ExecuteJavaScript(sprintf('$j("#reset_ctl_%s").on("%s", function(){ %s });', $this->strControlId, "click", $strJavaScriptOnClick));
     return $strToReturn;
 }
开发者ID:hiptc,项目名称:dle2wordpress,代码行数:11,代码来源:QListBox.class.php

示例5: __construct

 /**
  * Constructor
  *
  * @param QControl|QForm $objParentObject Parent of this textbox
  * @param null|string    $strControlId    Desired control ID for the textbox
  */
 public function __construct($objParentObject, $strControlId = null)
 {
     parent::__construct($objParentObject, $strControlId);
     // borrows too short and too long labels from super class
     $this->strLabelForTooShort = QApplication::Translate('Enter at least %s items.');
     $this->strLabelForTooLong = QApplication::Translate('Enter no more than %s items.');
 }
开发者ID:vaibhav-kaushal,项目名称:qc-framework,代码行数:13,代码来源:QCsvTextBox.class.php

示例6: Form_Create

 protected function Form_Create()
 {
     if (!QApplication::$User) {
         $this->RedirectToListPage();
     }
     // Use the CreateFromPathInfo shortcut (this can also be done manually using the WordMetaControl constructor)
     // MAKE SURE we specify "$this" as the MetaControl's (and thus all subsequent controls') parent
     $this->mctWord = WordMetaControl::CreateFromPathInfo($this);
     // Call MetaControl's methods to create qcontrols based on Word's data fields
     $this->lblWordId = $this->mctWord->lblWordId_Create();
     $this->lblWordId->Name = 'Id';
     $this->txtWord = $this->mctWord->txtWord_Create();
     $this->txtWord->Name = 'Cuvânt';
     $this->lstStatusType = $this->mctWord->lstStatusType_Create();
     $this->lstStatusType->Name = 'Stare';
     $this->txtProposalCount = $this->mctWord->txtProposalCount_Create();
     $this->txtProposalCount->Enabled = false;
     $this->txtProposalCount->Name = 'Propuneri';
     $this->calLastSent = $this->mctWord->calLastSent_Create();
     $this->calLastSent->Name = 'Ultima propunere';
     $this->calLastSent->Enabled = false;
     // Create Buttons and Actions on this Form
     $this->btnSave = new QButton($this);
     $this->btnSave->Text = QApplication::Translate('Save');
     $this->btnSave->AddAction(new QClickEvent(), new QAjaxAction('btnSave_Click'));
     $this->btnSave->CausesValidation = true;
     $this->btnCancel = new QButton($this);
     $this->btnCancel->Text = QApplication::Translate('Cancel');
     $this->btnCancel->AddAction(new QClickEvent(), new QAjaxAction('btnCancel_Click'));
     $this->btnDelete = new QButton($this);
     $this->btnDelete->Text = QApplication::Translate('Delete');
     $this->btnDelete->AddAction(new QClickEvent(), new QConfirmAction(QApplication::Translate('Are you SURE you want to DELETE this') . ' ' . QApplication::Translate('Word') . '?'));
     $this->btnDelete->AddAction(new QClickEvent(), new QAjaxAction('btnDelete_Click'));
     $this->btnDelete->Visible = $this->mctWord->EditMode;
 }
开发者ID:Jobava,项目名称:diacritice-meta-repo,代码行数:35,代码来源:word_edit.php

示例7: __construct

 public function __construct($objParentObject, $strClosePanelMethod, $intId = null, $strControlId = null)
 {
     // Call the Parent
     try {
         parent::__construct($objParentObject, $strControlId);
     } catch (QCallerException $objExc) {
         $objExc->IncrementOffset();
         throw $objExc;
     }
     // Setup Callback and Template
     $this->strTemplate = 'PeopledetailsEditPanel.tpl.php';
     $this->strClosePanelMethod = $strClosePanelMethod;
     // Construct the PeopledetailsMetaControl
     // MAKE SURE we specify "$this" as the MetaControl's (and thus all subsequent controls') parent
     $this->mctPeopledetails = PeopledetailsMetaControl::Create($this, $intId);
     // Call MetaControl's methods to create qcontrols based on Peopledetails's data fields
     $this->lblId = $this->mctPeopledetails->lblId_Create();
     $this->txtFullName = $this->mctPeopledetails->txtFullName_Create();
     $this->txtAddress = $this->mctPeopledetails->txtAddress_Create();
     $this->txtPhone = $this->mctPeopledetails->txtPhone_Create();
     $this->txtEmail = $this->mctPeopledetails->txtEmail_Create();
     // Create Buttons and Actions on this Form
     $this->btnSave = new QButton($this);
     $this->btnSave->Text = QApplication::Translate('Save');
     $this->btnSave->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'btnSave_Click'));
     $this->btnSave->CausesValidation = $this;
     $this->btnCancel = new QButton($this);
     $this->btnCancel->Text = QApplication::Translate('Cancel');
     $this->btnCancel->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'btnCancel_Click'));
     $this->btnDelete = new QButton($this);
     $this->btnDelete->Text = QApplication::Translate('Delete');
     $this->btnDelete->AddAction(new QClickEvent(), new QConfirmAction(QApplication::Translate('Are you SURE you want to DELETE this') . ' ' . QApplication::Translate('Peopledetails') . '?'));
     $this->btnDelete->AddAction(new QClickEvent(), new QAjaxControlAction($this, 'btnDelete_Click'));
     $this->btnDelete->Visible = $this->mctPeopledetails->EditMode;
 }
开发者ID:sarapsg,项目名称:prayuj,代码行数:35,代码来源:PeopledetailsEditPanel.class.php

示例8: __construct

 public function __construct($objParentObject, $strControlId = null)
 {
     parent::__construct($objParentObject, $strControlId);
     $this->strNoun = QApplication::Translate('item');
     $this->strNounPlural = QApplication::Translate('items');
     $this->prxDatagridSorting = new QControlProxy($this);
 }
开发者ID:tomVertuoz,项目名称:framework,代码行数:7,代码来源:QPaginatedControl.class.php

示例9: Form_Create

 protected function Form_Create()
 {
     // Setup DataGrid Columns
     // Note that although we are using "Beta 2" style of SortBy and LimitInfo, QDataGrid does have support to "convert" QQ::OrderBy to SortBy strings.
     $this->colId = new QDataGridColumn(QApplication::Translate('Id'), '<?= $_ITEM->Id; ?>', array('OrderByClause' => QQ::OrderBy(QQN::Person()->Id), 'ReverseOrderByClause' => QQ::OrderBy(QQN::Person()->Id, false)));
     /*			$this->colId = new QDataGridColumn(QApplication::Translate('Id'), '<?= $_ITEM->Id; ?>', 'SortByCommand="id ASC"', 'ReverseSortByCommand="id DESC"');*/
     $this->colFirstName = new QDataGridColumn(QApplication::Translate('First Name'), '<?= $_ITEM->FirstName; ?>', 'SortByCommand="first_name ASC"', 'ReverseSortByCommand="first_name DESC"');
     $this->colLastName = new QDataGridColumn(QApplication::Translate('Last Name'), '<?= $_ITEM->LastName; ?>', 'SortByCommand="last_name ASC"', 'ReverseSortByCommand="last_name DESC"');
     // Setup DataGrid
     $this->dtgPerson = new QDataGrid($this);
     $this->dtgPerson->CellSpacing = 0;
     $this->dtgPerson->CellPadding = 4;
     $this->dtgPerson->BorderStyle = QBorderStyle::Solid;
     $this->dtgPerson->BorderWidth = 1;
     $this->dtgPerson->GridLines = QGridLines::Both;
     $this->dtgPerson->SortColumnIndex = 0;
     // Datagrid Paginator
     $this->dtgPerson->Paginator = new QPaginator($this->dtgPerson);
     $this->dtgPerson->ItemsPerPage = 5;
     // Specify Whether or Not to Refresh using Ajax
     $this->dtgPerson->UseAjax = true;
     // Add the Columns to the DataGrid
     $this->dtgPerson->AddColumn($this->colId);
     $this->dtgPerson->AddColumn($this->colFirstName);
     $this->dtgPerson->AddColumn($this->colLastName);
 }
开发者ID:qcodo,项目名称:qcodo,代码行数:26,代码来源:migrating.php

示例10: Validate

 /**
  * This function tests whether everything was as needed or not
  * (uploaded image was within the range specified)
  * @return bool
  */
 public function Validate()
 {
     $blnToReturn = parent::Validate();
     if ($blnToReturn) {
         if ($this->blnRequired) {
             list($width, $height) = getimagesize($this->File);
             if (isset($this->intMinWidth) and $this->intMinWidth > $width) {
                 $blnToReturn = false;
                 $this->ValidationError = $this->strName . QApplication::Translate(' is too short the min width is ') . $this->intMinWidth;
             }
             if (isset($this->intMaxWidth) and $this->intMaxWidth < $width) {
                 $blnToReturn = false;
                 $this->ValidationError = $this->strName . QApplication::Translate(' is too big the max width is ') . $this->intMaxWidth;
             }
             if (isset($this->intMinHeight) and $this->intMinHeight > $height) {
                 $blnToReturn = false;
                 $this->ValidationError = $this->strName . QApplication::Translate(' is too short the min height is ') . $this->intMinHeight;
             }
             if (isset($this->intMaxHeight) and $this->intMaxHeight < $height) {
                 $blnToReturn = false;
                 $this->ValidationError = $this->strName . QApplication::Translate(' is too big the max height is ') . $this->intMaxHeight;
             }
         }
     }
     return $blnToReturn;
 }
开发者ID:vaibhav-kaushal,项目名称:qc-framework,代码行数:31,代码来源:QImageFileAsset.class.php

示例11: Form_Create

 protected function Form_Create()
 {
     // Use the CreateFromPathInfo shortcut (this can also be done manually using the GrowthGroupLocationMetaControl constructor)
     // MAKE SURE we specify "$this" as the MetaControl's (and thus all subsequent controls') parent
     $this->mctGrowthGroupLocation = GrowthGroupLocationMetaControl::CreateFromPathInfo($this);
     $this->strPageTitle = 'Growth Groups - Edit Region';
     // Call MetaControl's methods to create qcontrols based on GrowthGroupLocation's data fields
     $this->lblId = $this->mctGrowthGroupLocation->lblId_Create();
     $this->txtLocation = $this->mctGrowthGroupLocation->txtLocation_Create();
     $this->txtLongitude = $this->mctGrowthGroupLocation->txtLongitude_Create();
     $this->txtLatitude = $this->mctGrowthGroupLocation->txtLatitude_Create();
     $this->txtZoom = $this->mctGrowthGroupLocation->txtZoom_Create();
     // Create Buttons and Actions on this Form
     $this->btnSave = new QButton($this);
     $this->btnSave->Text = QApplication::Translate('Save');
     $this->btnSave->AddAction(new QClickEvent(), new QAjaxAction('btnSave_Click'));
     $this->btnSave->CausesValidation = true;
     $this->btnCancel = new QButton($this);
     $this->btnCancel->Text = QApplication::Translate('Cancel');
     $this->btnCancel->AddAction(new QClickEvent(), new QAjaxAction('btnCancel_Click'));
     $this->btnDelete = new QButton($this);
     $this->btnDelete->Text = QApplication::Translate('Delete');
     $this->btnDelete->AddAction(new QClickEvent(), new QConfirmAction(QApplication::Translate('Are you SURE you want to DELETE this') . ' ' . QApplication::Translate('GrowthGroupLocation') . '?'));
     $this->btnDelete->AddAction(new QClickEvent(), new QAjaxAction('btnDelete_Click'));
     $this->btnDelete->Visible = false;
 }
开发者ID:alcf,项目名称:chms,代码行数:26,代码来源:region.php

示例12: Validate

 /**
  * Validate the control.
  * @return bool
  */
 public function Validate()
 {
     if (!parent::Validate()) {
         return false;
     }
     if ($this->strText != '') {
         $dttDateTime = new QDateTime($this->strText, null, QDateTime::DateOnlyType);
         if ($dttDateTime->IsDateNull()) {
             $this->ValidationError = QApplication::Translate("Invalid date");
             return false;
         }
         if (!is_null($this->Minimum)) {
             if ($dttDateTime->IsEarlierThan($this->Minimum)) {
                 if ($this->strMinDateErrorMsg) {
                     $this->ValidationError = $this->strMinDateErrorMsg;
                 } else {
                     $this->ValidationError = QApplication::Translate("Date is earlier than minimum allowed");
                 }
                 return false;
             }
         }
         if (!is_null($this->Maximum)) {
             if ($dttDateTime->IsLaterThan($this->Maximum)) {
                 if ($this->strMaxDateErrorMsg) {
                     $this->ValidationError = $this->strMaxDateErrorMsg;
                 } else {
                     $this->ValidationError = QApplication::Translate("Date is later than maximum allowed");
                 }
                 return false;
             }
         }
     }
     return true;
 }
开发者ID:vaibhav-kaushal,项目名称:qc-framework,代码行数:38,代码来源:QDatepickerBoxBase.class.php

示例13: lblPriorLastNames_Create

 /**
  * Override QLabel lblPriorLastNames
  * @param string $strControlId optional ControlId to use
  * @return QLabel
  */
 public function lblPriorLastNames_Create($strControlId = null)
 {
     $this->lblPriorLastNames = new QLabel($this->objParentObject, $strControlId);
     $this->lblPriorLastNames->Name = QApplication::Translate('Alternative Last Names');
     $this->lblPriorLastNames->Text = $this->objPerson->PriorLastNames;
     return $this->lblPriorLastNames;
 }
开发者ID:alcf,项目名称:chms,代码行数:12,代码来源:PersonMetaControl.class.php

示例14: lstParentGroup_Create

 /**
  * Create and setup QListBox lstParentGroup
  * Overrides code-generated version by providing full hierarchy and NOT allowing for "looped families"
  * @param string $strControlId optional ControlId to use
  * @param QQCondition $objConditions not used
  * @param QQClause[] $objOptionalClauses not used
  * @return QListBox
  */
 public function lstParentGroup_Create($strControlId = null, QQCondition $objCondition = null, $objOptionalClauses = null)
 {
     $this->lstParentGroup = new QListBox($this->objParentObject, $strControlId);
     $this->lstParentGroup->Name = QApplication::Translate('Parent Group');
     $this->lstParentGroup->AddItem(QApplication::Translate('- None -'), null);
     $this->lstParentGroup->HtmlEntities = false;
     // Setup and perform the Query
     if (is_null($objCondition)) {
         $objCondition = QQ::All();
     }
     $objParentGroupCursor = Group::QueryCursor($objCondition, $objOptionalClauses);
     $intLevelToSkipUntil = null;
     foreach (Group::LoadOrderedArrayByMinistryIdAndConfidentiality($this->objGroup->MinistryId, false) as $objGroup) {
         if ($objGroup->Id == $this->objGroup->Id) {
             $intLevelToSkipUntil = $objGroup->HierarchyLevel;
         } else {
             if (!is_null($intLevelToSkipUntil) && $objGroup->HierarchyLevel <= $intLevelToSkipUntil) {
                 $intLevelToSkipUntil = null;
             }
         }
         if (is_null($intLevelToSkipUntil) && $objGroup->GroupTypeId == GroupType::GroupCategory) {
             $strName = $objGroup->Name;
             if ($objGroup->HierarchyLevel) {
                 $strName = str_repeat('&nbsp;', $objGroup->HierarchyLevel * 3) . '&gt; ' . QApplication::HtmlEntities($strName);
             }
             $objListItem = new QListItem($strName, $objGroup->Id);
             if ($this->objGroup->ParentGroup && $this->objGroup->ParentGroup->Id == $objGroup->Id) {
                 $objListItem->Selected = true;
             }
             $this->lstParentGroup->AddItem($objListItem);
         }
     }
     // Return the QListBox
     return $this->lstParentGroup;
 }
开发者ID:alcf,项目名称:chms,代码行数:43,代码来源:GroupMetaControl.class.php

示例15: Form_Create

 protected function Form_Create()
 {
     $this->pnlTitle = new QPanel($this);
     $this->pnlTitle->Text = QApplication::Translate('AJAX Dashboard');
     $this->pnlList = new QPanel($this, 'pnlList');
     $this->pnlList->AutoRenderChildren = true;
     $this->pnlEdit = new QPanel($this, 'pnlEdit');
     $this->pnlEdit->AutoRenderChildren = true;
     $this->pnlEdit->Visible = false;
     $this->lstClassNames = new QListBox($this);
     $this->lstClassNames->AddItem(QApplication::Translate('- Select One -'), null);
     // Use the strClassNameArray as magically determined above to aggregate the listbox of classes
     // Obviously, this should be modified if you want to make a custom dashboard
     global $strClassNameArray;
     foreach ($strClassNameArray as $strKey => $strValue) {
         $this->lstClassNames->AddItem($strKey, $strValue);
     }
     $this->lstClassNames->AddAction(new QChangeEvent(), new QAjaxAction('lstClassNames_Change'));
     // Create spinner which will be displayed during the every call unless specified otherwise
     $this->objDefaultWaitIcon = new QWaitIcon($this);
     $this->objDefaultWaitIcon->Text = sprintf('<img src="%s/spinner_20.gif" width="20" height="20" alt="Please Wait..."/>', __VIRTUAL_DIRECTORY__ . __IMAGE_ASSETS__);
     $this->objDefaultWaitIcon->Position = QPosition::Absolute;
     $this->objDefaultWaitIcon->Top = 230;
     $this->objDefaultWaitIcon->Left = 140;
 }
开发者ID:klucznik,项目名称:qcodo,代码行数:25,代码来源:index.php


注:本文中的QApplication::Translate方法示例由纯净天空整理自Github/MSDocs等开源代码及文档管理平台,相关代码片段筛选自各路编程大神贡献的开源项目,源码版权归原作者所有,传播和使用请参考对应项目的License;未经允许,请勿转载。