if (Ext.form.VTypes) {

	Ext.override(Ext.form.VTypes, {

		// sonia.config.js
		pluginurlText: '请输入URL地址，例如: \n\
	  "http://plugins.scm-manager.org/scm-plugin-backend/api/{version}/plugins?os={os}&arch={arch}&snapshot=false"',

		passwordText: '密码不正确',
		nameTest: '用户名不存在',
		usernameText: '用户名无效',
		repositoryNameText: '库的名字无效.'
	});

}

// sonia.util.js

if (Ext.util.Format) {

	Ext.apply(Ext.util.Format, {
		timeAgoJustNow: '刚刚',
		timeAgoOneMinuteAgo: '1分钟前',
		timeAgoOneMinuteFromNow: '1分钟内',
		timeAgoMinutes: '分钟',
		timeAgoOneHourAgo: '1小时前',
		timeAgoOneHourFromNow: '1小时内',
		timeAgoHours: '小时',
		timeAgoYesterday: '昨天',
		timeAgoTomorrow: '明天',
		timeAgoDays: '天',
		timeAgoLastWeek: '上个星期',
		timeAgoNextWeek: '下个星期',
		timeAgoWeeks: '星期',
		timeAgoLastMonth: '上个月',
		timeAgoNextMonth: '下个月',
		timeAgoMonths: '月',
		timeAgoLastYear: '去年',
		timeAgoNextYear: '明年',
		timeAgoYears: '年',
		timeAgoLastCentury: '上个世纪',
		timeAgoNextCentury: '下个世纪',
		timeAgoCenturies: '世纪'
	});

}

// sonia.login.js

if (Sonia.login.Form) {

	Ext.override(Sonia.login.Form, {
		usernameText: '用户名',
		passwordText: '密码',
		loginText: '登录',
		cancelText: '取消',
		waitTitleText: '登录',
		WaitMsgText: '登录中...',
		failedMsgText: '登录失败 :-(',
		failedDescriptionText: '不正确的用户名或密码，或没有足够的权限。',
		accountLockedText: '账户已经被锁定',
		accountTemporaryLockedText: '该帐户当前被锁定。 \ n请稍后再试。',
		rememberMeText: '记住登录'
	});

}

if (Sonia.login.Window) {

	Ext.override(Sonia.login.Window, {
		titleText: '登录'
	});

}

// sonia.rest.js

if (Sonia.rest.JsonStore) {

	Ext.override(Sonia.rest.JsonStore, {
		errorTitleText: '错误',
		errorMsgText: '加载数据失败。服务器状态：{0}'
	});
}
Sonia.rest.exceptionTitleText = '错误';
Sonia.rest.exceptionMsgText = '加载数据失败。服务器状态：{0}';

if (Sonia.rest.Grid) {

	Ext.override(Sonia.rest.Grid, {
		emptyText: '没有任何数据'
	});

}

if (Sonia.rest.FormPanel) {

	Ext.override(Sonia.rest.FormPanel, {
		okText: '确定',
		cancelText: '取消',
		addText: '增加',
		removeText: '移除'
	});

}

if (Sonia.repository.ChangesetPanel) {
	Ext.apply(Sonia.repository.ChangesetPanel, {
		diffLabel: '变更',
		rawDiffLabel: '源比较'
	});
}
// sonia.repository.js

if (Sonia.repository.DefaultPanel) {

	Ext.apply(Sonia.repository.DefaultPanel, {
		title: '源码仓',
		html: '添加或选择一个源码仓'
	});

}

if (Sonia.repository.Grid) {

	Ext.override(Sonia.repository.Grid, {
		colNameText: '名称',
		colTypeText: '类型',
		colContactText: '联系人',
		colDescriptionText: '描述',
		colCreationDateText: '创建时间',
		colLastModifiedText: '修改时间',
		colUrlText: '地址',
		colArchiveText: '存档',
		emptyText: '这不是一个源码仓',
		formTitleText: '源码仓',
		unknownType: '未知'
	});

}

if (Sonia.repository.FormPanel) {

	Ext.override(Sonia.repository.FormPanel, {
		colGroupPermissionText: '权限组',
		colNameText: '名称',
		colTypeText: '权限',
		formTitleText: '设置',
		nameText: '名称',
		typeText: '类型',
		contactText: '联系人',
		descriptionText: '描述',
		publicText: '公开',
		permissionText: '权限',
		errorTitleText: '错误',
		updateErrorMsgText: '源码仓更新失败',
		createErrorMsgText: '源码仓创建失败',

		// help
		nameHelpText: '源码仓的名字，这将会是地址中的一部分',
		typeHelpText: '源代码托管的类型，如Mercurial，Git或Subversion',
		contactHelpText: '负责管理此源码仓的联系人电子邮件地址',
		descriptionHelpText: '源码仓的简单描述',
		publicHelpText: '开放时，任何人都具有可读权限',
		permissionHelpText: '设置用户或用户组的管理权限<br />\n\
		解释:<br /><b>READ</b> = 读<br /><b>WRITE</b> = 克隆和提交<br />\n\
		<b>OWNER</b> = 克隆，提交和管理.'
	});

}

if (Sonia.repository.Panel) {

	Ext.override(Sonia.repository.Panel, {
		titleText: '源码仓',

		archiveText: '存档',
		unarchiveText: '取消存档',
		archiveTitleText: '存档选定的源码仓',
		unarchiveTitleText: '取消存档选定的源码仓',
		archiveMsgText: '将源码仓 "{0}" 存档?',
		unarchiveMsgText: '将源码仓 "{0}" 取消存档?',
		errorArchiveMsgText: '存档源码仓失败。',
		errorUnarchiveMsgText: '取消存档源码仓失败。',
		errorUnarchiveMsgText: '取消存档失败',
		displayArchivedRepositoriesText: '已存档',

		emptyText: '添加或选择一个源码仓',
		removeTitleText: '移除源码仓',
		removeMsgText: '确定移除源码仓 "{0}"?',
		errorTitleText: '错误',
		errorMsgText: '源码仓移除失败'
	});

}

if (Sonia.repository.PermissionFormPanel) {

	Ext.override(Sonia.repository.PermissionFormPanel, {
		titleText: '权限'
	});

}

if (Sonia.repository.ChangesetViewerPanel) {

	Ext.override(Sonia.repository.ChangesetViewerPanel, {
		// german ??
		changesetViewerTitleText: '提交 {0}'
	});

}

if (Sonia.repository.InfoPanel) {

	Ext.override(Sonia.repository.InfoPanel, {
		nameText: '名称: ',
		typeText: '类型: ',
		contactText: '联系人: ',
		urlText: '地址: ',
		changesetViewerText: '提交记录',
		accessText: '权限:',
		accessReadOnly: '只读',
		accessReadWrite: '完全控制'
	});

}

if (Sonia.repository.ExtendedInfoPanel) {

	Ext.override(Sonia.repository.ExtendedInfoPanel, {
		// german ??
		checkoutText: '签出: ',
		repositoryBrowserText: '源码'
	});

}

if (Sonia.repository.RepositoryBrowser) {

	Ext.override(Sonia.repository.RepositoryBrowser, {
		// german ??
		repositoryBrowserTitleText: '源码 {0}',
		emptyText: '目录为空',
		colNameText: '名称',
		colLengthText: '大小',
		colLastModifiedText: '修改时间',
		colDescriptionText: '描述'
	});

}

if (Sonia.repository.ChangesetViewerGrid) {

	Ext.override(Sonia.repository.ChangesetViewerGrid, {
		emptyText: '没有提交记录'
	});

}

if (Sonia.repository.ImportWindow) {

	Ext.override(Sonia.repository.ImportWindow, {
		titleText: '导入源码仓',
		okText: '确定',
		closeText: '关闭'
	});

}

// sonia.config.js

if (Sonia.config.ScmConfigPanel) {

	Ext.override(Sonia.config.ScmConfigPanel, {
		titleText: '常规设置',
		servnameText: '服务器名',
		realmDescriptionText: '身份验证描述',
		dateFormatText: '日期格式',
		enableForwardingText: '启用转发(mod_proxy)',
		forwardPortText: '转发端口',
		pluginRepositoryText: '插件仓库',
		allowAnonymousAccessText: '启用匿名访问',
		enableSSLText: '启用SSL',
		sslPortText: 'SSL端口',
		adminGroupsText: '管理员组',
		adminUsersText: '管理员',

		enableProxyText: '启用代理服务器',
		proxyServerText: '地址',
		proxyPortText: '端口',
		proxyUserText: '用户名',
		proxyPasswordText: '密码',
		proxyExcludesText: '排除地址',
		baseUrlText: '基础地址',
		forceBaseUrlText: '强制基础地址',
		disableGroupingGridText: '禁用源码仓分组',
		enableRepositoryArchiveText: '启用源码仓存档',

		submitText: '提交中 ...',
		loadingText: '加载中 ...',
		errorTitleText: '失败',
		errorMsgText: '配置无法加载.',
		errorSubmitMsgText: '配置无法保存.',

		// help
		servernameHelpText: '服务器名，将会是地址中的一部分',
		realmDescriptionHelpText: '输入身份验证提示',
		// TODO
		dateFormatHelpText: '日期格式化格式，请参见 \n\
					  <a href="http://momentjs.com/docs/#/displaying/format/" target="_blank">http://momentjs.com/docs/#/displaying/format/</a>.<br />\n\
					  <b>注意:</b><br />\n\
					  {0} - 将会被友好显示 (如“2小时前”).',
		pluginRepositoryHelpText: '插件源码仓的地址.<br /> {占位符} 的解释:\n\
  <br /><b>版本</b> = SCM-Manager 版本<br /><b>os</b> = 操作系统<br /><b>arch</b> = 处理器架构',
		enableForwardingHelpText: '启用 mod_proxy 端口转发.',
		forwardPortHelpText: '转发端口',
		allowAnonymousAccessHelpText: '匿名用户将具有对公开仓库的只读权限',
		enableSSLHelpText: '启用HTTPS上的安全连接',
		sslPortHelpText: 'SSL端口',
		adminGroupsHelpText: '逗号分割的具有管理员权限的用户组',
		adminUsersHelpText: '逗号分割的具有管理员权限的用户',

		skipFailedAuthenticatorsText: '跳过认证失败',
		skipFailedAuthenticatorsHelpText: '继续认证链,即使已经找到用户但是无法验证',
		loginAttemptLimitText: '尝试登陆次数限制',
		loginAttemptLimitTimeoutText: '登录尝试超时',
		loginAttemptLimitHelpText: '最大尝试登录次数限制. 设为-1则无限制。',
		loginAttemptLimitTimeoutHelpText: '登录失败超过指定次数后的限制时间（单位秒）',

		enableProxyHelpText: '启用代理',
		proxyServerHelpText: '服务器地址',
		proxyPortHelpText: '服务器端口',
		proxyUserHelpText: '服务器验证的用户名',
		proxyPasswordHelpText: '服务器验证的密码',
		proxyExcludesHelpText: '逗号分割的主机名，用于将其中代理服务器列表中排除。',
		baseUrlHelpText: '应用程序地址 (包括应用路径) 例如 http://localhost:8080/scm',
		forceBaseUrlHelpText: '如果是外部链接，那么强制跳回基础地址',
		disableGroupingGridHelpText: '禁止源码仓分组。设置后需要刷新整个页面。',
		enableRepositoryArchiveHelpText: '启用源码仓存档。设置后需要刷新整个页面。'
	});

}

if (Sonia.config.ConfigForm) {

	Ext.override(Sonia.config.ConfigForm, {
		title: '设置',
		saveButtonText: '保存',
		resetButtontext: '重设',

		submitText: '保存中 ...',
		loadingText: '加载中 ...',
		failedText: '发生了未知错误'
	});

}

// sonia.user.js

if (Sonia.user.DefaultPanel) {

	Ext.apply(Sonia.user.DefaultPanel, {
		title: '用户',
		html: '没有选中用户'
	});

}

if (Sonia.user.Grid) {

	Ext.override(Sonia.user.Grid, {
		titleText: '用户列表',
		colNameText: '登录名',
		colDisplayNameText: '显示名',
		colMailText: '电子邮件',
		colActiveText: '已启用',
		colAdminText: '管理员',
		colCreationDateText: '创建时间',
		colLastModifiedText: '最后修改',
		colTypeText: '类型'
	});

}

if (Sonia.user.FormPanel) {

	Ext.override(Sonia.user.FormPanel, {
		nameText: '登录名',
		displayNameText: '显示名',
		mailText: '电子邮件',
		passwordText: '登录密码',
		adminText: '管理员',
		activeText: '已启用',
		errorTitleText: '错误',
		updateErrorMsgText: '更新用户资料失败',
		createErrorMsgText: '创建用户失败',
		passwordMinLengthText: '密码最短要求6位',

		// help
		usernameHelpText: '登录名是唯一标记',
		displayNameHelpText: '显示用户名',
		mailHelpText: '用户的电子邮件地址',
		passwordHelpText: '用户密码',
		passwordConfirmHelpText: '确认用户密码',
		adminHelpText: '管理员具有创建，删除源码仓以及对用户和用户组的管理权限',
		activeHelpText: '启用或禁用一个用户'
	});

}

if (Sonia.user.Panel) {

	Ext.override(Sonia.user.Panel, {
		titleText: '用户',
		emptyText: '没有选择用户',
		removeTitleText: '删除用户',
		removeMsgText: '确定删除用户 "{0}"?',
		showOnlyActiveText: '仅显示已启用用户',
		errorTitleText: '错误',
		errorMsgText: '发生了一个错误'
	});

}


// sonia.group.js

if (Sonia.group.DefaultPanel) {

	Ext.apply(Sonia.group.DefaultPanel, {
		title: '用户组',
		html: '没有选择用户组'
	});

}

if (Sonia.group.Grid) {

	Ext.override(Sonia.group.Grid, {
		colNameText: '组名',
		colDescriptionText: '描述',
		colMembersText: '成员',
		colCreationDateText: '创建时间',
		colTypeText: '类型',
		emptyGroupStoreText: '没有用户组',
		groupFormTitleText: '用户组列表'
	});

}

if (Sonia.group.FormPanel) {

	Ext.override(Sonia.group.FormPanel, {
		colMemberText: '成员',
		titleText: '设置',
		nameText: '组名',
		descriptionText: '描述',
		membersText: '成员',
		errorTitleText: '错误',
		updateErrorMsgText: '更新用户组失败',
		createErrorMsgText: '创建用户组失败',

		// help
		nameHelpText: '唯一的用户组名',
		descriptionHelpText: '用户组的简单描述',
		membersHelpText: '包含的成员名'
	});

}

if (Sonia.group.Panel) {

	Ext.override(Sonia.group.Panel, {
		titleText: '用户组',
		emptyText: '没有选择用户组',
		removeTitleText: '删除用户组',
		removeMsgText: '确定删除用户组 "{0}"?',
		errorTitleText: '错误',
		errorMsgText: '发生了错误'
	});

}

// sonia.action.js

if (Sonia.action.ChangePasswordWindow) {

	Ext.override(Sonia.action.ChangePasswordWindow, {
		titleText: '修改密码',
		oldPasswordText: '原始密码',
		newPasswordText: '新 密 码',
		confirmPasswordText: '确认密码',
		okText: '确定',
		cancelText: '取消',
		connectingText: '连接中',
		failedText: '密码修改失败',
		waitMsgText: '请稍等...'
	});

}

if (Sonia.action.ExceptionWindow) {

	// ??
	Ext.override(Sonia.action.ExceptionWindow, {
		okText: '确定',
		detailsText: '详细信息',
		exceptionText: '异常'
	});

}

// sonia.plugin.js

if (Sonia.plugin.Center) {

	Ext.override(Sonia.plugin.Center, {
		waitTitleText: '请稍等',
		errorTitleText: '错误',
		restartText: '重新启动服务器以启用指定插件',

		installWaitMsgText: '插件安装中...',
		installSuccessText: '插件安装成功',
		installFailedText: '插件安装失败',

		uninstallWaitMsgText: '插件卸载中...',
		uninstallSuccessText: '插件卸载成功',
		uninstallFailedText: '插件卸载失败',

		updateWaitMsgText: '插件更新中...',
		updateSuccessText: '插件更新成功',
		updateFailedText: '插件更新失败'
	});

}

if (Sonia.plugin.Grid) {

	Ext.override(Sonia.plugin.Grid, {
		colNameText: '插件名',
		colAuthorText: '作者',
		colDescriptionText: '描述',
		colVersionText: '版本',
		colActionText: '操作',
		colUrlText: '地址',
		colCategoryText: '类别',
		emptyText: '选择一个插件',
		emptyText: '无可用插件',
		btnReload: '重新加载',
		btnInstallPackage: '安装插件包',
		uploadWindowTitle: '上传插件包'
	});

}

if (Sonia.plugin.UploadForm) {
	Ext.override(Sonia.plugin.UploadForm, {
		emptyText: '选择一个插件包',
		uploadFieldLabel: '插件包',
		waitMsg: '正在上传插件包 ...',
		btnUpload: '上传',
		btnReset: '重置'
	});
}
// sonia.scm.js

if (Sonia.scm.Main) {

	Ext.override(Sonia.scm.Main, {
		tabRepositoriesText: '源码仓',
		navChangePasswordText: '修改密码',
		sectionMainText: '主要功能区',
		sectionSecurityText: '安全',
		navRepositoriesText: '源码仓',
		sectionConfigText: '配置',
		navGeneralConfigText: '常规配置',
		tabGeneralConfigText: 'SCM 配置',
		navRepositoryTypesText: '源码仓类型',
		navImportRepositoriesText: '源码仓导入',
		tabRepositoryTypesText: '源码仓配置',
		navPluginsText: '插件',
		tabPluginsText: '插件',
		navUsersText: '用户',
		tabUsersText: '用户',
		navGroupsText: '用户组',
		tabGroupsText: '用户组',

		sectionLoginText: '登录',
		navLoginText: '登录',

		sectionLogoutText: '注销',
		navLogoutText: '注销',

		logoutFailedText: '注销失败',

		errorTitle: '错误',
		errorMessage: '发色好难过了错误',

		errorSessionExpiredTitle: '会话过期',
		errorSessionExpiredMessage: '您的会话已过期，请重新登录',

		errorNoPermissionsTitle: '没有权限',
		errorNoPermissionsMessage: '您没有执行指定操作的权限',

		errorNotFoundTitle: '未找到',
		errorNotFoundMessage: '资源未找到',

		loggedInTextTemplate: '已登录为 <a id="scm-userinfo-tip">{state.user.name}</a> - ',
		userInfoMailText: '电子邮件',
		userInfoGroupsText: '用户组'
	});

}

if (Sonia.panel.SyntaxHighlighterPanel) {

	Ext.override(Sonia.panel.SyntaxHighlighterPanel, {
		loadErrorTitleText: '失败',
		loadErrorMsgText: '加载失败'
	});

}


if (Sonia.rest.Panel) {

	Ext.override(Sonia.rest.Panel, {

		addText: '添加',
		removeText: '删除',
		reloadText: '刷新'

	});

}

if (Sonia.svn.ConfigPanel) {
	Ext.override(Sonia.svn.ConfigPanel, {
		titleText: "Subversion 配置",
		repositoryDirectoryText: "仓库目录",
		noneCompatibility: "无兼容性设置",
		pre14CompatibleText: "1.4之前版本兼容",
		pre15CompatibleText: "1.5之前版本兼容",
		pre16CompatibleText: "1.6之前版本兼容",
		pre17CompatibleText: "1.7之前版本兼容",
		with17CompatibleText: "1.7版本兼容",
		enableGZipText: "启用GZIP",
		disabledText: "禁用",
		repositoryDirectoryHelpText: "Location of the Suberversion repositories.",
		disabledHelpText: "启用或禁用Subversion仓库。请注意修改设置后，需要重载页面。",
		enableGZipHelpText: "启用SVN的GZIP"
	});
}
if (Sonia.hg && Sonia.hg.ConfigPanel) {
	Ext.override(Sonia.hg.ConfigPanel, {
		titleText: "Mercurial 设置",
		hgBinaryText: "HG 可执行文件",
		pythonBinaryText: "Python 可执行文件",
		pythonPathText: "Python 模块搜索路径",
		repositoryDirectoryText: "仓库目录",
		useOptimizedBytecodeText: "优化字节码 (.pyo)",
		configWizardText: "启动配置向导",
		configWizardLabelText: "启动配置向导",
		encodingText: "编码",
		disabledText: "禁用",
		showRevisionInIdText: "显示版本",
		hgBinaryHelpText: "Mercurial的可执行文件路径.",
		pythonBinaryHelpText: "Python的可执行文件路径.",
		pythonPathHelpText: "Python 的模块搜索路径 (PYTHONPATH).",
		repositoryDirectoryHelpText: "保存Mercurial仓库的目录.",
		useOptimizedBytecodeHelpText: '使用 Python "-O" 开关.',
		encodingHelpText: "仓库编码.",
		disabledHelpText: "启用或禁用Mercurial仓库。请注意此项修改后需要重载页面。",
		showRevisionInIdHelpText: "将版本作为节点ID的一部分显示。注意：此选项修改需要重启服务才可生效。"
	});
}

if (Sonia.hg) {
	if (Sonia.hg.ConfigWizard) {
		Ext.override(Sonia.hg.ConfigWizard, { title: "Mercurial 配置向导" });
	}
	if (Sonia.hg.ConfigWizardPanel) {
		Ext.override(Sonia.hg.ConfigWizardPanel, {
			backText: "返回", nextText: "继续",
			finishText: "完成",
			configureLocalText: "配置本地安装",
			configureRemoteText: "下载并安装",
			loadingText: "加载中 ...",
			hgInstallationText: "Mercurial 安装",
			pythonInstallationText: "Python 安装",
			hgPackageText: "Mercurial 包",
			errorTitleText: "错误",
			packageInstallationFailedText: "包安装失败",
			installPackageText: "安装包 {0}",
			titleText: "HG仓库设置"
		});
	}
}
if (Sonia.git && Sonia.git.ConfigPanel) {
	Ext.override(Sonia.git.ConfigPanel, {
		repositoryDirectoryText: "仓库目录",
		disabledText: "禁用",
		repositoryDirectoryHelpText: "Git仓库路径.",
		disabledHelpText: "启用或禁用Git功能。请注意修改设置后，需要重载页面。",
		titleText: "GIT仓库设置"
	});
}

if (Sonia.webhook) {
	Ext.override(Sonia.webhook.I18n,
		Sonia.webhook.I18n = {
			formTitleText: "WEB钩子",
			colUrlText: "URL模型",
			colEveryCommitText: "每次提交时都执行",
			colSendCommitData: "发送提交数据",
			addText: "添加",
			removeText: "删除",
			webhookGridHelpText: '添加或移除您源码仓中的WEB钩子.\n' +
				'    "URL模型" 定义了远程网站的网址. \n' +
				'    地址中可以使用例如 ${repository.name} 的占位符.\n' +
				'    如果你启用了“每次提交时都执行”，那么这个地址每个提交中都会被执行。 \n' +
				'    如果不勾选，则每次推送只会执行一次。',
			addIcon: "resources/images/add.gif",
			removeIcon: "resources/images/delete.gif",
			helpIcon: "resources/images/help.gif"
		});
}


if (Sonia.userrepo && Sonia.userrepo.ConfigPanel) {
	Ext.override(Sonia.userrepo.ConfigPanel, {
		titleText: "用户仓库配置",
		namePatternText: "名称规则",
		namePatternHelpText: "名称规则可以用来修改行仓库的名称。 \n                        可以使用下列占位符:<br />\n                        <strong>{0}</strong> - 用户输入的仓库名<br />\n                        <strong>{1}</strong> - 当前用户名<br />\n                        <strong>{2}</strong> - 当前用户邮件地址",
		groupsText: "分组",
		groupsHelpText: "逗号分割的可以创建仓库的用户组. \n  \t\t\t\t   如果为空，则每个用户都可以创建仓库。",
		typeText: "类型",
		typeHelpText: "创建仓库时用户的权限类型"
	});
}

if (Sonia.user && Sonia.user.Panel) {
	Ext.override(Sonia.user.Panel, {
		renameText: "重命名",
		newUsernameTitle: "用户名",
		newUsernameText: "请输入新的用户名:",
		renameErrorText: "重命名失败."
	});
}

if (Sonia.statistic) {

}

if (Sonia.hgnested) {
	if (Sonia.hgnested.ConfigPanel) {
		Ext.override(Sonia.hgnested.ConfigPanel, {
			formTitleText: "子仓库",
			colNameText: "路径",
			colUriText: "地址",
			addText: "添加",
			removeTest: "移除",
			hgnestedGridHelpText: "添加子仓库重定向。路径列是子仓库的地址。地址列是一个跳转地址或一个Mercurial仓库的名字。"
		});
	}
}

if (typeof (Triology) != 'undefined' && Triology.groupmanager) {
	Triology.groupmanager.I18n = {
		groupManagerText: '用户组管理',
		emptyText: '选择一个用户组.',
		removeTitleText: '删除用户组',
		removeMsgText: '删除用户组 "{0}"?',
		errorTitleText: '错误',
		errorMsgText: '用户组删除失败',
		colNameText: '名称',
		colDescriptionText: '描述',
		colMembersText: '成员',
		colGroupManagerText: '用户组管理',
		colCreationDateText: '创建日期',
		colTypeText: '类型',
		emptygroupManagerStoreText: '当前并没有配置任何用户组.',
		groupFormTitleText: '用户组表单',
		settingsText: '设置',
		updateErrorMsgText: '用户组更新失败',
		createErrorMsgText: '用户组创建失败',
		groupManagerHelpText: '源码库中的用户名.',
		groupManagerFormTitleText: '用户组管理表单',
		sectionSecurityText: '安全'
	};
	Ext.override(Triology.groupmanager.GroupManagerFormPanel, {
		errorTitleText: '失败',
		updateErrorMsgText: '用户组更新失败',
		createErrorMsgText: '用户组创建失败',

		// help
		nameHelpText: '用户组的唯一名称.',
		descriptionHelpText: '用户组的简短描述.',
		membersHelpText: '用户组成员的用户名.'
	});

	Ext.override(Triology.groupmanager.DefaultPanel, {
		title: Triology.groupmanager.I18n.groupManagerFormTitleText,
		html: Triology.groupmanager.I18n.emptyText
	});

	Ext.override(Triology.groupmanager.GroupManagerFormPanel, {
		colMemberText: Triology.groupmanager.I18n.groupManagerText,
		membersText: Triology.groupmanager.I18n.groupManagerText,
		titleText: Triology.groupmanager.I18n.groupManagerFormTitleText,
		emptyText: Triology.groupmanager.I18n.emptyText,
		removeTitleText: Triology.groupmanager.I18n.removeTitleText,
		removeMsgText: Triology.groupmanager.I18n.removeMsgText,
		errorTitleText: Triology.groupmanager.I18n.errorTitleText,
		errorMsgText: Triology.groupmanager.I18n.errorMsgText

	});
}

if (Sonia.login && Sonia.login.Form) {
	Ext.override(Sonia.login.Form, {
		usernameText: "用户名",
		passwordText: "密码",
		loginText: "登录",
		cancelText: "取消",
		waitTitleText: "连接中",
		WaitMsgText: "发送数据中...",
		failedMsgText: "登录失败!",
		failedDescriptionText: "用户名/密码不正确，或权限不足。",
		accountLockedText: "用户未激活。",
		accountTemporaryLockedText: "用户已经被暂时锁定，请稍后重试。",
		rememberMeText: "记住我"
	});
}

if (Sonia.repository && Sonia.repository.Panel) {
	Ext.override(Sonia.repository.Panel, {
		titleText: "仓库表单", emptyText: "选择或添加一个仓库", filterText: "过滤器: ",
		searchText: "搜索: ", archiveText: "存档", unarchiveText: "取消存档", archiveTitleText: "存档仓库", unarchiveTitleText: "取消存档仓库",
		archiveMsgText: '将仓库 "{0}" 存档？', unarchiveMsgText: '将仓库 "{0}" 取消存档？',
		errorArchiveMsgText: "存档失败", errorUnarchiveMsgText: "取消存档失败", displayArchivedRepositoriesText: "显示已存档仓库",
		removeTitleText: "移除仓库", removeMsgText: '移除仓库 "{0}"?', errorTitleText: "错误", errorMsgText: "仓库移除失败！"
	});
}

if (Sonia.security.PermissionsPanel) {
	Ext.override(Sonia.security.PermissionsPanel, {
		addText: '添加',
		removeText: '删除',
		reloadText: '刷新',
		titleText: '权限'
	});
}

if (Sonia.bzr) {
	Ext.override(Sonia.bzr.ConfigPanel, {
		titleText: "Bazaar配置", bzrBinaryText: "Bzr二进制文件", pythonBinary: "Python二进制文件", pythonPath: "Python路径",
		repositoryDirectoryText: "仓库目录", bzrBinaryHelpText: "Bzr二进制文件路径.", pythonBinaryHelpText: "Python二进制文件路径.",
		pythonPathHelpText: "Python 路径.", repositoryDirectoryHelpText: "Bazaar仓库路径."
	});
}

if (Sonia.youtrack) {
	Ext.override(Sonia.youtrack.GlobalConfigPanel, {
		errorBoxTitle: "失败",
		errorOnSubmitText: "保存配置失败.",
		errorOnLoadText: "加载配置失败."
	});
	Sonia.youtrack.I18n = {
		titleText: "YouTrack配置",
		formTitleText: "YouTrack",
		urlText: "地址",
		urlHelpText: "完整的YouTrack安装地址.",
		repositoryConfigurationText: "禁用仓库配置",
		repositoryConfigurationHelpText: "禁止仓库管理员配置独立的配置. \n    此更改需要重启服务器才可生效.",
		changeStateText: "启用更改状态",
		changeStateHelpText: "启用更改状态功能. SCM管理器在提交中搜索问题键和关键字，如果同时找到，SCM管理器将会更改在YouTrack中的状态。",
		updateIssuesText: "更新YouTrack问题",
		updateIssuesHelpText: "启用自动更新功能. SCM管理器在提交中搜索问题键. 如果找到，SCM管理器将会更改在YouTrack中的状态.",
		usernameText: "用户名",
		usernameHelpText: "连接YouTrack的用户名. 留空则使用当前登录的用户名.",
		passwordText: "密码",
		passwordHelpText: "连接YouTrack的密码."
	};
}

if (Sonia.mail) {
	Ext.override(Sonia.mail.GlobalConfigPanel, {
		titleText: "邮件地址配置",
		hostText: "主机",
		portText: "端口",
		usernameText: "用户名",
		passwordText: "密码",
		fromText: "发送方",
		transportStrategyText: "发送策略",
		subjectPrefixText: "主题前缀",
		testConfigurationText: "测试配置",
		hostHelpText: "SMTP服务器地址",
		portHelpText: "SMTP服务器端口",
		usernameHelpText: "访问SMTP服务器的用户名",
		passwordHelpText: "访问SMTP服务器的密码",
		fromHelpText: "邮件的发送方",
		transportStrategyHelpText: "设置发送的邮件的策略",
		subjectPrefixHelpText: "发送邮件标题的前缀",
		testConfigurationHelpText: "测试SMTP设置",
		testMailConfigurationTitle: "测试邮件配置",
		testMailConfigurationLable: "地址",
		errorBoxTitle: "错误",
		errorOnSubmitText: "保存设置时发生错误",
		errorOnLoadText: "加载设置时发生错误",
		errorOnTestText: "发送测试邮件失败"
	});
}
if(Sonia.notify){
	Ext.override(Sonia.notify.ConfigPanel, {
		titleText: "通知",
		notifyRepositoryContactText: "通知仓库联系人",
		notifyUseAuthorText: "使用提交者邮件作为发件人",
		notifyEmailPerPushText: "每次提交都发邮件",
		notifyMaxDiffLinesText: "最大变更内容行数",
		notifyRepositoryContactHelpText: "通知仓库联系人",
		notifyUseAuthorHelpText: "将变更集提交者的邮件组哦I为发件人？",
		notifyEmailPerPushHelpText: "按提交发送邮件，还是按变更发送邮件？",
		notifyMaxDiffLinesHelpText: "包含在邮件中的最大差异行数，以便于限制邮件大小。",
		contactGridHelpText: "额外通知的邮件地址"
	});
}
if(Sonia.fork){
	Ext.override(Sonia.fork.PullRequestFormPanel, {
		titleText:"标题",
		titleHelpText:"合并请求的标题",
		descriptionText:"描述",
		descriptionHelpText:"合并请求的描述.",
		cancelText:"取消",
		okText:"确定",
		errorAlreadyOpenTitleText:"已经打开合并请求",
		errorAlreadyOpenMsgText:"已经有一个从仓库的合并请求已经被打开",
		errorNoOutgoingChangesTitleText:"没有变更",
		errorNoOutgoingChangesMsgText:"仓库克隆后并没有出现任何变更。"
	});
	Ext.override(Sonia.fork.PullRequestGrid, {
		linkTemplate:'\x3ca class\x3d"scm-link fork-pr-id" rel\x3d"{0}"\x3e{0}\x3c/a\x3e'
	});
	Ext.override(Sonia.fork.PullRequestPanel,{
		loadingText:"加载中 ...",
		templatePullRequest:'\x3cdiv class\x3d"pull-request"\x3e\n                          \x3ch1\x3e{title}\x3c/h1\x3e\n                          \x3cp\x3eId: {id}\x3c/p\x3e\n                          \x3cp\x3e状态: {status}\x3c/p\x3e\n                          \x3cp\x3e作者: {author}\x3c/p\x3e\n                          \x3cp\x3e创建时间: {creationDate:formatTimestamp}\x3c/p\x3e\n                          \x3cpre\x3e{description}\x3c/pre\x3e\n                        \x3c/div\x3e\n                        \x3cp\x3e\x26nbsp;\x3c/p\x3e'
	});
	Ext.override(Sonia.repository.Panel, {
		forkButtonText:"克隆",
		pullRequestButtonText:"合并请求"
	});
}
if(Sonia.fvp&&Sonia.fvp.ViewEditPanel){
	Ext.override(Sonia.fvp.ViewEditPanel, {
		regexLabel:"正则表达式判断: ",regexViewHelpText:"输入一个用来根据仓库名称判断的正则表达式"
	});
}