Skip to content
This repository was archived by the owner on Jun 21, 2023. It is now read-only.

Commit c1f15e1

Browse files
authored
Merge pull request #1888 from github/internationalization
I18n pull request restore with CrowdIn support
2 parents 0e64838 + 2baef97 commit c1f15e1

27 files changed

+1706
-690
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,8 @@ Most of the extension UI lives in the Team Explorer pane, which is available fro
1717

1818
Official builds of this extension are available at [the official website](https://visualstudio.github.com).
1919

20-
2120
[![Build status](https://ci.appveyor.com/api/projects/status/dl8is5iqwt9qf3t7/branch/master?svg=true)](https://ci.appveyor.com/project/github-windows/visualstudio/branch/master)
21+
[![Crowdin](https://d322cqt584bo4o.cloudfront.net/github-visual-studio/localized.svg)](https://crowdin.com/project/github-visual-studio)
2222
[![codecov](https://codecov.io/gh/GitHub/VisualStudio/branch/master/graph/badge.svg)](https://codecov.io/gh/GitHub/VisualStudio)
2323

2424
[![Join the chat at freenode:github-vs](https://img.shields.io/badge/irc-freenode:%20%23github--vs-blue.svg)](http://webchat.freenode.net/?channels=%23github-vs) [![Join the chat at https://gitter.im/github/VisualStudio](https://badges.gitter.im/Join%20Chat.svg)](https://gitter.im/github/VisualStudio?utm_source=badge&utm_medium=badge&utm_campaign=pr-badge&utm_content=badge)

crowdin.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
files:
2+
- source: /src/**/Resources.resx
3+
translation: /%original_path%/Resources.%locale%.resx

scripts/modules.ps1

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,9 @@ New-Module -ScriptBlock {
105105
elseif (Test-Path "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe") {
106106
$msbuild = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Enterprise\MSBuild\15.0\Bin\MSBuild.exe"
107107
}
108+
elseif (Test-Path "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe") {
109+
$msbuild = "C:\Program Files (x86)\Microsoft Visual Studio\2017\Professional\MSBuild\15.0\Bin\MSBuild.exe"
110+
}
108111
else {
109112
Die("No suitable msbuild.exe found.")
110113
}

src/GitHub.App/GitHub.App.csproj

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@
3030
<LastGenOutput>Resources.Designer.cs</LastGenOutput>
3131
</EmbeddedResource>
3232
</ItemGroup>
33-
33+
3434
<ItemGroup>
3535
<ProjectReference Include="..\..\submodules\akavache\Akavache.Sqlite3\Akavache.Sqlite3.csproj" />
3636
<ProjectReference Include="..\..\submodules\akavache\Akavache\Akavache_Net45.csproj" />
@@ -67,4 +67,4 @@
6767
<PackageReference Include="SQLitePCL.raw_basic" Version="0.7.3.0-vs2012" targetFramework="net45" />
6868
<PackageReference Include="Stateless" Version="2.5.56.0" targetFramework="net45" />
6969
</ItemGroup>
70-
</Project>
70+
</Project>

src/GitHub.App/Resources.zh-CN.resx

Lines changed: 329 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,329 @@
1+
<?xml version="1.0" encoding="utf-8"?>
2+
<root>
3+
<!--
4+
Microsoft ResX Schema
5+
6+
Version 2.0
7+
8+
The primary goals of this format is to allow a simple XML format
9+
that is mostly human readable. The generation and parsing of the
10+
various data types are done through the TypeConverter classes
11+
associated with the data types.
12+
13+
Example:
14+
15+
... ado.net/XML headers & schema ...
16+
<resheader name="resmimetype">text/microsoft-resx</resheader>
17+
<resheader name="version">2.0</resheader>
18+
<resheader name="reader">System.Resources.ResXResourceReader, System.Windows.Forms, ...</resheader>
19+
<resheader name="writer">System.Resources.ResXResourceWriter, System.Windows.Forms, ...</resheader>
20+
<data name="Name1"><value>this is my long string</value><comment>this is a comment</comment></data>
21+
<data name="Color1" type="System.Drawing.Color, System.Drawing">Blue</data>
22+
<data name="Bitmap1" mimetype="application/x-microsoft.net.object.binary.base64">
23+
<value>[base64 mime encoded serialized .NET Framework object]</value>
24+
</data>
25+
<data name="Icon1" type="System.Drawing.Icon, System.Drawing" mimetype="application/x-microsoft.net.object.bytearray.base64">
26+
<value>[base64 mime encoded string representing a byte array form of the .NET Framework object]</value>
27+
<comment>This is a comment</comment>
28+
</data>
29+
30+
There are any number of "resheader" rows that contain simple
31+
name/value pairs.
32+
33+
Each data row contains a name, and value. The row also contains a
34+
type or mimetype. Type corresponds to a .NET class that support
35+
text/value conversion through the TypeConverter architecture.
36+
Classes that don't support this are serialized and stored with the
37+
mimetype set.
38+
39+
The mimetype is used for serialized objects, and tells the
40+
ResXResourceReader how to depersist the object. This is currently not
41+
extensible. For a given mimetype the value must be set accordingly:
42+
43+
Note - application/x-microsoft.net.object.binary.base64 is the format
44+
that the ResXResourceWriter will generate, however the reader can
45+
read any of the formats listed below.
46+
47+
mimetype: application/x-microsoft.net.object.binary.base64
48+
value : The object must be serialized with
49+
: System.Runtime.Serialization.Formatters.Binary.BinaryFormatter
50+
: and then encoded with base64 encoding.
51+
52+
mimetype: application/x-microsoft.net.object.soap.base64
53+
value : The object must be serialized with
54+
: System.Runtime.Serialization.Formatters.Soap.SoapFormatter
55+
: and then encoded with base64 encoding.
56+
57+
mimetype: application/x-microsoft.net.object.bytearray.base64
58+
value : The object must be serialized into a byte array
59+
: using a System.ComponentModel.TypeConverter
60+
: and then encoded with base64 encoding.
61+
-->
62+
<xsd:schema xmlns="" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:msdata="urn:schemas-microsoft-com:xml-msdata" id="root">
63+
<xsd:import namespace="http://www.w3.org/XML/1998/namespace"/>
64+
<xsd:element name="root" msdata:IsDataSet="true">
65+
<xsd:complexType>
66+
<xsd:choice maxOccurs="unbounded">
67+
<xsd:element name="metadata">
68+
<xsd:complexType>
69+
<xsd:sequence>
70+
<xsd:element name="value" type="xsd:string" minOccurs="0"/>
71+
</xsd:sequence>
72+
<xsd:attribute name="name" use="required" type="xsd:string"/>
73+
<xsd:attribute name="type" type="xsd:string"/>
74+
<xsd:attribute name="mimetype" type="xsd:string"/>
75+
<xsd:attribute ref="xml:space"/>
76+
</xsd:complexType>
77+
</xsd:element>
78+
<xsd:element name="assembly">
79+
<xsd:complexType>
80+
<xsd:attribute name="alias" type="xsd:string"/>
81+
<xsd:attribute name="name" type="xsd:string"/>
82+
</xsd:complexType>
83+
</xsd:element>
84+
<xsd:element name="data">
85+
<xsd:complexType>
86+
<xsd:sequence>
87+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
88+
<xsd:element name="comment" type="xsd:string" minOccurs="0" msdata:Ordinal="2"/>
89+
</xsd:sequence>
90+
<xsd:attribute name="name" type="xsd:string" use="required" msdata:Ordinal="1"/>
91+
<xsd:attribute name="type" type="xsd:string" msdata:Ordinal="3"/>
92+
<xsd:attribute name="mimetype" type="xsd:string" msdata:Ordinal="4"/>
93+
<xsd:attribute ref="xml:space"/>
94+
</xsd:complexType>
95+
</xsd:element>
96+
<xsd:element name="resheader">
97+
<xsd:complexType>
98+
<xsd:sequence>
99+
<xsd:element name="value" type="xsd:string" minOccurs="0" msdata:Ordinal="1"/>
100+
</xsd:sequence>
101+
<xsd:attribute name="name" type="xsd:string" use="required"/>
102+
</xsd:complexType>
103+
</xsd:element>
104+
</xsd:choice>
105+
</xsd:complexType>
106+
</xsd:element>
107+
</xsd:schema>
108+
<resheader name="resmimetype">
109+
<value>text/microsoft-resx</value>
110+
</resheader>
111+
<resheader name="version">
112+
<value>2.0</value>
113+
</resheader>
114+
<resheader name="reader">
115+
<value>System.Resources.ResXResourceReader, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
116+
</resheader>
117+
<resheader name="writer">
118+
<value>System.Resources.ResXResourceWriter, System.Windows.Forms, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</value>
119+
</resheader>
120+
<data name="BrowseForDirectory" xml:space="preserve">
121+
<value>为新版本库选择文件夹。</value>
122+
</data>
123+
<data name="CloneTitle" xml:space="preserve">
124+
<value>克隆一个 {0} 版本库</value>
125+
</data>
126+
<data name="CouldNotConnectToGitHub" xml:space="preserve">
127+
<value>无法连接到github.com</value>
128+
</data>
129+
<data name="CreateGistTitle" xml:space="preserve">
130+
<value>创建一个GitHub Gist</value>
131+
</data>
132+
<data name="CreateTitle" xml:space="preserve">
133+
<value>创建一个{0}存储库</value>
134+
</data>
135+
<data name="DefaultGistFileName" xml:space="preserve">
136+
<value>GistFromVisualStudio.cs</value>
137+
</data>
138+
<data name="EnterpriseUrlValidatorEmpty" xml:space="preserve">
139+
<value>请输入企业网址</value>
140+
</data>
141+
<data name="EnterpriseUrlValidatorInvalid" xml:space="preserve">
142+
<value>请输入有效的企业网址</value>
143+
</data>
144+
<data name="EnterpriseUrlValidatorNotAGitHubHost" xml:space="preserve">
145+
<value>不是企业服务器。请输入企业服务器 URL</value>
146+
</data>
147+
<data name="ForgotPasswordLink" xml:space="preserve">
148+
<value>(是否忘记了您的密码?)</value>
149+
</data>
150+
<data name="LoginFailedForbiddenMessage" xml:space="preserve">
151+
<value>请确保使用您的密码而不是登录的个人访问令牌。</value>
152+
</data>
153+
<data name="LoginFailedMessage" xml:space="preserve">
154+
<value>检查您的用户名和密码然后重试</value>
155+
</data>
156+
<data name="LoginFailedText" xml:space="preserve">
157+
<value>登录失败。</value>
158+
</data>
159+
<data name="LoginTitle" xml:space="preserve">
160+
<value>连接到 GitHub</value>
161+
</data>
162+
<data name="PasswordValidatorEmpty" xml:space="preserve">
163+
<value>请输入您的密码</value>
164+
</data>
165+
<data name="PRCreatedUpstream" xml:space="preserve">
166+
<value>在 [{1}] ({2}) 上成功创建分支 ** {0} ** 拉取请求</value>
167+
</data>
168+
<data name="PublishTitle" xml:space="preserve">
169+
<value>发布版本库</value>
170+
</data>
171+
<data name="PublishToTitle" xml:space="preserve">
172+
<value>发布版本库至 {0}</value>
173+
</data>
174+
<data name="PullRequestCreationTitleValidatorEmpty" xml:space="preserve">
175+
<value>请输入请求的标题!</value>
176+
</data>
177+
<data name="PullRequestSourceAndTargetBranchTheSame" xml:space="preserve">
178+
<value>源和目标分支不能相同</value>
179+
</data>
180+
<data name="PullRequestSourceBranchDoesNotExist" xml:space="preserve">
181+
<value>远程不存在源分支, 你有没有推送它?</value>
182+
</data>
183+
<data name="RepositoryCloneFailedNoSelectedRepo" xml:space="preserve">
184+
<value>没有选定的存储库。</value>
185+
</data>
186+
<data name="RepositoryCreationClonePathEmpty" xml:space="preserve">
187+
<value>请输入名称</value>
188+
</data>
189+
<data name="RepositoryCreationClonePathInvalid" xml:space="preserve">
190+
<value>请输入有效路径</value>
191+
</data>
192+
<data name="RepositoryCreationClonePathInvalidCharacters" xml:space="preserve">
193+
<value>路径包含无效字符</value>
194+
</data>
195+
<data name="RepositoryCreationClonePathTooLong" xml:space="preserve">
196+
<value>路径太长</value>
197+
</data>
198+
<data name="RepositoryCreationFailedAlreadyExists" xml:space="preserve">
199+
<value>版本库 '{0}/{1}'已存在。</value>
200+
</data>
201+
<data name="RepositoryCreationFailedAlreadyExistsMessage" xml:space="preserve">
202+
<value>请更改存储库名称或选择其他帐户, 然后重试。</value>
203+
</data>
204+
<data name="RepositoryCreationFailedQuota" xml:space="preserve">
205+
<value>私密文档</value>
206+
</data>
207+
<data name="RepositoryNameValidatorAlreadyExists" xml:space="preserve">
208+
<value>同名的广告活动已存在</value>
209+
</data>
210+
<data name="RepositoryNameValidatorEmpty" xml:space="preserve">
211+
<value>请输入姓名</value>
212+
</data>
213+
<data name="RepositoryNameValidatorTooLong" xml:space="preserve">
214+
<value>这个名字不能超过100个字符</value>
215+
</data>
216+
<data name="SafeRepositoryNameWarning" xml:space="preserve">
217+
<value>将要创建为 {0}</value>
218+
</data>
219+
<data name="TwoFactorApp" xml:space="preserve">
220+
<value>在您的手机上安装双重验证程序:Google Authenticator</value>
221+
</data>
222+
<data name="TwoFactorSms" xml:space="preserve">
223+
<value>我们将发送一条验证码短信到您的手机。</value>
224+
</data>
225+
<data name="TwoFactorTitle" xml:space="preserve">
226+
<value>双重身份认证</value>
227+
</data>
228+
<data name="TwoFactorUnknown" xml:space="preserve">
229+
<value>在此处输入身份验证代码中的符号</value>
230+
</data>
231+
<data name="UsernameOrEmailValidatorEmpty" xml:space="preserve">
232+
<value>请输入您的用户名或邮箱地址.</value>
233+
</data>
234+
<data name="UsernameOrEmailValidatorSpaces" xml:space="preserve">
235+
<value>用户名或电子邮件地址不能有空格</value>
236+
</data>
237+
<data name="PullRequestsNavigationItemText" xml:space="preserve">
238+
<value>拉取请求</value>
239+
</data>
240+
<data name="PullRequestNavigationItemText" xml:space="preserve">
241+
<value>推送请求</value>
242+
</data>
243+
<data name="AddedFileStatus" xml:space="preserve">
244+
<value>添加</value>
245+
</data>
246+
<data name="Fork" xml:space="preserve">
247+
<value>fork</value>
248+
</data>
249+
<data name="InvalidBranchName" xml:space="preserve">
250+
<value>[无效]</value>
251+
</data>
252+
<data name="MustPullBeforePush" xml:space="preserve">
253+
<value>你必须先拉取再推送</value>
254+
</data>
255+
<data name="NoCommitsToPull" xml:space="preserve">
256+
<value>没有需要拉取的提交</value>
257+
</data>
258+
<data name="NoCommitsToPush" xml:space="preserve">
259+
<value>没有需要推送的提交</value>
260+
</data>
261+
<data name="NoDescriptionProvidedMarkdown" xml:space="preserve">
262+
<value>* 未提供说明。*</value>
263+
</data>
264+
<data name="PullRequestDetailsCheckout" xml:space="preserve">
265+
<value>签出 {0}</value>
266+
</data>
267+
<data name="PullRequestDetailsCheckoutTo" xml:space="preserve">
268+
<value>签出到 {0}</value>
269+
</data>
270+
<data name="PullRequestDetailsPullToolTip" xml:space="preserve">
271+
<value>从 {0} 分支 {1} 拉取</value>
272+
</data>
273+
<data name="PullRequestDetailsPushToolTip" xml:space="preserve">
274+
<value>推至 {0} 分支 {1}</value>
275+
</data>
276+
<data name="Remote" xml:space="preserve">
277+
<value>远程</value>
278+
</data>
279+
<data name="RenamedFileStatus" xml:space="preserve">
280+
<value>重命名</value>
281+
</data>
282+
<data name="SourceRepositoryNoLongerAvailable" xml:space="preserve">
283+
<value>源存版本库不再可用。</value>
284+
</data>
285+
<data name="WorkingDirectoryHasUncommittedCHanges" xml:space="preserve">
286+
<value>无法签出, 因为您的工作目录有未提交的更改。</value>
287+
</data>
288+
<data name="SyncSubmodules" xml:space="preserve">
289+
<value>同步 {0} 子模块</value>
290+
</data>
291+
<data name="CouldntFindGitOnPath" xml:space="preserve">
292+
<value>在PATH 找不到 Git.exe。
293+
294+
请安装 Git for Windows : https://git-scm.com/download/win</value>
295+
</data>
296+
<data name="Approved" xml:space="preserve">
297+
<value>批准</value>
298+
</data>
299+
<data name="ChangesRequested" xml:space="preserve">
300+
<value>更改需求</value>
301+
</data>
302+
<data name="Commented" xml:space="preserve">
303+
<value>已评论</value>
304+
</data>
305+
<data name="InProgress" xml:space="preserve">
306+
<value>进行中</value>
307+
</data>
308+
<data name="NavigateToEditorStatusMessage" xml:space="preserve">
309+
<value>按回车键导航到编辑器</value>
310+
</data>
311+
<data name="NavigateToEditorNotCheckedOutInfoMessage" xml:space="preserve">
312+
<value>在导航到编辑器之前签出 PR 分支</value>
313+
</data>
314+
<data name="NavigateToEditorNotCheckedOutStatusMessage" xml:space="preserve">
315+
<value>按回车键导航到编辑器 (PR 分支必须签出)</value>
316+
</data>
317+
<data name="ForkRepositoryTitle" xml:space="preserve">
318+
<value>Fork存储库</value>
319+
</data>
320+
<data name="SwitchOriginTitle" xml:space="preserve">
321+
<value>开关原点</value>
322+
</data>
323+
<data name="CancelPendingReviewConfirmation" xml:space="preserve">
324+
<value>您确定要取消此评审吗?您将丢失所有待处理的评论。</value>
325+
</data>
326+
<data name="CancelPendingReviewConfirmationCaption" xml:space="preserve">
327+
<value>取消评审</value>
328+
</data>
329+
</root>

src/GitHub.InlineReviews/Views/CommentView.xaml

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@
6767
CornerRadius="3"
6868
Padding="2 1"
6969
Visibility="{Binding IsPending, Converter={ui:BooleanToVisibilityConverter}, FallbackValue=Collapsed}">
70-
<TextBlock FontSize="10">Pending</TextBlock>
70+
<TextBlock FontSize="10" Text="{x:Static prop:Resources.Pending}" />
7171
</Border>
7272
</StackPanel>
7373

@@ -216,10 +216,9 @@
216216
<Button Command="{Binding CommitEdit}" Content="{Binding CommitCaption}"/>
217217
<Button Margin="4 0 0 0"
218218
Command="{Binding StartReview}"
219-
Visibility="{Binding CanStartReview, Converter={ui:BooleanToVisibilityConverter}}">
220-
Start a review
221-
</Button>
222-
<Button Margin="4 0 0 0" Command="{Binding CancelEdit}">Cancel</Button>
219+
Content="{x:Static prop:Resources.StartAReview}"
220+
Visibility="{Binding CanStartReview, Converter={ui:BooleanToVisibilityConverter}}"/>
221+
<Button Margin="4 0 0 0" Command="{Binding CancelEdit}" Content="{x:Static prop:Resources.Cancel}"/>
223222
</StackPanel>
224223
</Grid>
225224
</Grid>

0 commit comments

Comments
 (0)