# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS HEADER.
#
# Copyright 2010 Oracle and/or its affiliates. All rights reserved.
#
# Oracle and Java are registered trademarks of Oracle and/or its affiliates.
# Other names may be trademarks of their respective owners.
#
# The contents of this file are subject to the terms of either the GNU
# General Public License Version 2 only ("GPL") or the Common
# Development and Distribution License("CDDL") (collectively, the
# "License"). You may not use this file except in compliance with the
# License. You can obtain a copy of the License at
# http://www.netbeans.org/cddl-gplv2.html
# or nbbuild/licenses/CDDL-GPL-2-CP. See the License for the
# specific language governing permissions and limitations under the
# License.  When distributing the software, include this License Header
# Notice in each file and include the License file at
# nbbuild/licenses/CDDL-GPL-2-CP.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the GPL Version 2 section of the License file that
# accompanied this code. If applicable, add the following below the
# License Header, with the fields enclosed by brackets [] replaced by
# your own identifying information:
# "Portions Copyrighted [year] [name of copyright owner]"
#
# If you wish your version of this file to be governed by only the CDDL
# or only the GPL Version 2, indicate your decision by adding
# "[Contributor] elects to include this software in this distribution
# under the [CDDL or GPL Version 2] license." If you do not indicate a
# single choice of license, a recipient has the option to distribute
# your version of this file under either the CDDL, the GPL Version 2 or
# to extend the choice of license to its licensees as provided above.
# However, if you add GPL Version 2 code and therefore, elected the GPL
# Version 2 license, then the option applies only if the new code is
# made subject to such option by the copyright holder.
#
# Contributor(s):
#
# Portions Copyrighted 2010 Sun Microsystems, Inc.

LBL_InitAction.popupName=\u521d\u59cb\u5316 Git \u8d44\u6e90\u5e93(&G)...
LBL_InitAction_Name=\u521d\u59cb\u5316\u8d44\u6e90\u5e93(&N)...
MSG_Init_Progress=\u6b63\u5728\u521d\u59cb\u5316...
MSG_Init_Add_Progress=\u6b63\u5728\u6dfb\u52a0...

MSG_ImportNotAllowed=\u4e0d\u5141\u8bb8\u5bfc\u5165
MSG_AlreadyVersioned=\u9009\u5b9a\u7684\u6587\u4ef6\u5df2\u662f Git \u8d44\u6e90\u5e93\u7684\u4e00\u90e8\u5206\u3002

MSG_INIT=\u6b63\u5728\u521d\u59cb\u5316\u8d44\u6e90\u5e93\n\u6b63\u5728\u521b\u5efa git {0}/.git \u76ee\u5f55
ACSD_BrowseFolder=\u7528\u4e8e\u6d4f\u89c8\u76ee\u6807\u76ee\u5f55\u3002
Browse_title=\u6d4f\u89c8\u7236\u76ee\u5f55
OK_Button=\u786e\u5b9a
Folders=\u6587\u4ef6\u5939
LBL_Init_Panel_Label=\u521d\u59cb\u5316 Git \u8d44\u6e90\u5e93
LBL_Init_Panel_Error_Directory=\u60a8\u5fc5\u987b\u9009\u62e9\u4e00\u4e2a\u73b0\u6709\u76ee\u5f55
LBL_Init_Panel_Error_Versioned=\u9009\u5b9a\u7684\u76ee\u5f55\u5df2\u5305\u542b git \u8d44\u6e90\u5e93
LBL_Init_Panel_Warning_Under_Project=\u60a8\u6b63\u5728\u5c1d\u8bd5\u4e3a\u9879\u76ee\u7684\u5b50\u6587\u4ef6\u5939\u521b\u5efa\u8d44\u6e90\u5e93
InitPanel.btnBrowse.text=\u6d4f\u89c8(&B)

InitPanel.jLabel1.text=\u9009\u62e9\u4e00\u4e2a\u5c06\u521b\u5efa\u8d44\u6e90\u5e93\u7684\u76ee\u5f55\u3002
InitPanel.lblPath.text=\u6839\u8def\u5f84(&R):


