Skip to content

Commit f217fe4

Browse files
committed
feat: 同步翻译 Golang SDK 文档并添加翻译管理工具
- 为所有语言添加 Golang SDK 使用指南文档 - 更新所有语言的 SDK 索引页面,添加 Golang SDK 链接 - 更新所有语言的 sidebar.ts,添加 Golang SDK 菜单项 - 修复 TypeScript SDK 文档中的小错误 - 添加翻译状态管理工具和文档 - 创建 .last-translated-commit 文件记录翻译进度 - 更新 AGENTS.md 添加翻译工具使用说明
1 parent 09b6927 commit f217fe4

File tree

32 files changed

+1496
-35
lines changed

32 files changed

+1496
-35
lines changed

.last-translated-commit

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
09b6927107171dc247413361a4005cba870e4c15

AGENTS.md

Lines changed: 40 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,20 @@
66

77
请你帮我翻译文档为各个语言,这个项目是一个分布式文件存储系统的文档,你要做的事情你根据中文(docs/zh)下的内容,一对一翻译为英文,请你严格按照下列步骤操作:
88

9+
### 翻译前检查
10+
11+
在开始翻译前,请先检查是否有新的提交需要翻译:
12+
13+
```bash
14+
node scripts/check-translation.js check
15+
```
16+
17+
如果有新提交需要翻译,请按照以下步骤进行翻译。翻译完成后,更新翻译记录:
18+
19+
```bash
20+
node scripts/check-translation.js update
21+
```
22+
923
1. 所有翻译都以中文作为源语言。
1024
1. 选择目标语言,比如按照 docs/ 下的顺序,先选中目标为 de,并创建此语言专用特性分支(切分支前确保主分支是最新的)。
1125
1. 使用 npm run sync:de 命令同步到目标语言。
@@ -45,4 +59,30 @@
4559

4660
- 输出即为译文;除非用户用开关指定其他模式,不要添加解释、吐槽、道歉、模板语或免责声明。
4761

62+
## 翻译工具说明
63+
64+
### 翻译状态管理
65+
66+
项目使用 `.last-translated-commit` 文件记录上次翻译完成的提交,避免重复翻译。
67+
68+
**检查需要翻译的提交:**
69+
70+
```bash
71+
node scripts/check-translation.js check
72+
```
73+
74+
**翻译完成后更新记录:**
75+
76+
```bash
77+
node scripts/check-translation.js update
78+
```
79+
80+
### 工作流程
81+
82+
1. 运行 `check` 命令查看是否有新提交需要翻译
83+
2. 如果有新提交,进行翻译工作
84+
3. 翻译完成后运行 `update` 命令更新记录
85+
86+
这样可以确保不会重复翻译已经处理过的提交,提高工作效率。
87+
4888
</translate-rules>

docs/de/developer/sdk/go.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
---
2+
title: "RustFS Golang SDK Benutzerhandbuch"
3+
description: "Verwenden Sie das Golang SDK, um RustFS-Instanzen zu verwalten, einschließlich der Erstellung und Löschung von Buckets und Objekten."
4+
---
5+
6+
# Golang SDK
7+
8+
Da RustFS ein vollständig S3-kompatibles Objektspeichersystem ist, können Sie durch das Wrapping des S3 TypeScript SDK ein für RustFS geeignetes Golang SDK erstellen. Über das SDK können Sie RustFS verwalten, einschließlich der Erstellung und Löschung von Buckets/Objekten, dem Hoch- und Herunterladen von Dateien usw.
9+
10+
## Voraussetzungen
11+
12+
- Eine funktionierende RustFS-Instanz (siehe [Installationsanleitung](../../installation/index.md) für die Installation).
13+
- Zugriffsschlüssel (siehe [Zugriffsschlüssel-Verwaltung](../../administration/iam/access-token.md) für die Erstellung).
14+
15+
## RustFS Golang SDK Konstruktion
16+
17+
Verwenden Sie `RUSTFS_ACCESS_KEY_ID`, `RUSTFS_SECRET_ACCESS_KEY`, `RUSTFS_ENDPOINT_URL`, `RUSTFS_REGION`, um eine `aws.Config` zu erstellen, und verwenden Sie dann `s3.NewFromConfig` aus dem Golang S3 SDK, um einen RustFS Client zu erstellen:
18+
19+
```
20+
region := os.Getenv("RUSTFS_REGION")
21+
access_key_id := os.Getenv("RUSTFS_ACCESS_KEY_ID")
22+
secret_access_key := os.Getenv("RUSTFS_SECRET_ACCESS_KEY")
23+
endpoint := os.Getenv("RUSTFS_ENDPOINT_URL")
24+
// usePathStyle := strings.ToLower(os.Getenv("AWS_S3_USE_PATH_STYLE")) == "true"
25+
26+
if access_key_id == "" || secret_access_key == "" || region == "" || endpoint == "" {
27+
log.Fatal("missing the env: RUSTFS_ACCESS_KEY_ID / RUSTFS_SECRET_ACCESS_KEY / RUSTFS_REGION / RUSTFS_ENDPOINT_URL")
28+
}
29+
30+
// build aws.Config
31+
cfg := aws.Config{
32+
Region: region,
33+
EndpointResolver: aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
34+
return aws.Endpoint{
35+
URL: endpoint,
36+
}, nil
37+
}),
38+
Credentials: aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(access_key_id, secret_access_key, "")),
39+
}
40+
41+
// build S3 client
42+
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
43+
o.UsePathStyle = true
44+
})
45+
```
46+
47+
Dann können Sie den erstellten RustFS Client für Bucket- und Objektoperationen verwenden.
48+
49+
## Bucket erstellen
50+
51+
```
52+
_, err = client.CreateBucket(ctx, &s3.CreateBucketInput{
53+
Bucket: aws.String("go-sdk-rustfs"),
54+
})
55+
if err != nil {
56+
log.Fatalf("create bucket failed: %v", err)
57+
}
58+
```
59+
60+
## Buckets auflisten
61+
62+
```
63+
resp, err := client.ListBuckets(ctx, &s3.ListBucketsInput{})
64+
if err != nil {
65+
log.Fatalf("list buckets failed: %v", err)
66+
}
67+
68+
fmt.Println("Buckets:")
69+
for _, b := range resp.Buckets {
70+
fmt.Println(" -", *b.Name)
71+
}
72+
```
73+
74+
## Bucket löschen
75+
76+
```
77+
_, err = client.DeleteBucket(ctx, &s3.DeleteBucketInput{
78+
Bucket: aws.String("go-sdk-rustfs"),
79+
})
80+
if err != nil {
81+
log.Fatalf("delete bucket failed: %v", err)
82+
}
83+
```
84+
85+
## Objekte auflisten
86+
87+
```
88+
resp, err := client.ListObjectsV2(ctx, &s3.ListObjectsV2Input{
89+
Bucket: aws.String("bucket-target"),
90+
})
91+
if err != nil {
92+
log.Fatalf("list object failed: %v", err)
93+
}
94+
for _, obj := range resp.Contents {
95+
fmt.Println(" -", *obj.Key)
96+
}
97+
```
98+
99+
## Objekt hochladen
100+
101+
```
102+
_, err = client.PutObject(ctx, &s3.PutObjectInput{
103+
Bucket: aws.String("bucket-target"),
104+
Key: aws.String("test.txt"),
105+
Body: strings.NewReader("hello rustfs"),
106+
})
107+
if err != nil {
108+
log.Fatalf("upload object failed: %v", err)
109+
}
110+
```
111+
112+
## Objekt herunterladen
113+
114+
```
115+
resp, err := client.GetObject(ctx, &s3.GetObjectInput{
116+
Bucket: aws.String("bucket-target"),
117+
Key: aws.String("1.txt"),
118+
})
119+
if err != nil {
120+
log.Fatalf("download object fail: %v", err)
121+
}
122+
defer resp.Body.Close()
123+
124+
// read object content
125+
data, err := io.ReadAll(resp.Body)
126+
if err != nil {
127+
log.Fatalf("read object content fail: %v", err)
128+
}
129+
fmt.Println("content is :", string(data))
130+
```
131+
132+
Für andere Verwendungen können Sie selbst erkunden. Mit Vibe Coding wird es noch einfacher!

docs/de/developer/sdk/index.md

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Derzeit bietet RustFS folgende SDKs:
1818
- [Python SDK](./python.md)
1919
- [Rust SDK](./rust.md)
2020
- [TypeScript SDK](./typescript.md)
21+
- [Golang SDK](./go.md)
2122

2223
## Begriffserklärungen vor dem Lesen
2324

docs/de/sidebar.ts

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -303,7 +303,7 @@ export const sidebar = [
303303
{
304304
text: '升级',
305305
link: '/de/upgrade-scale/upgrade',
306-
},
306+
},
307307
// {
308308
// text: '扩容',
309309
// link: '/de/upgrade-scale/scale',
@@ -471,6 +471,10 @@ export const sidebar = [
471471
text: 'TypeScript',
472472
link: '/de/developer/sdk/typescript'
473473
},
474+
{
475+
text: 'Golang',
476+
link: '/de/developer/sdk/go'
477+
},
474478
{
475479
text: '其他 SDK',
476480
link: '/de/developer/sdk/other'

docs/en/developer/sdk/go.md

Lines changed: 132 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,132 @@
1+
---
2+
title: "RustFS Golang SDK Usage Guide"
3+
description: "Use the Golang SDK to operate on RustFS instances, including creating and deleting buckets and objects."
4+
---
5+
6+
# Golang SDK
7+
8+
Since RustFS is a fully S3-compatible object storage system, you can build a Golang SDK suitable for RustFS by wrapping the S3 TypeScript SDK. Through the SDK, you can operate on RustFS, including creating and deleting buckets/objects, uploading and downloading files, etc.
9+
10+
## Prerequisites
11+
12+
- A working RustFS instance (refer to [Installation Guide](../../installation/index.md) for installation).
13+
- Access keys (refer to [Access Key Management](../../administration/iam/access-token.md) for creation).
14+
15+
## RustFS Golang SDK Construction
16+
17+
Use `RUSTFS_ACCESS_KEY_ID`, `RUSTFS_SECRET_ACCESS_KEY`, `RUSTFS_ENDPOINT_URL`, `RUSTFS_REGION` to construct an `aws.Config`, then use `s3.NewFromConfig` from the Golang S3 SDK to build a RustFS Client:
18+
19+
```
20+
region := os.Getenv("RUSTFS_REGION")
21+
access_key_id := os.Getenv("RUSTFS_ACCESS_KEY_ID")
22+
secret_access_key := os.Getenv("RUSTFS_SECRET_ACCESS_KEY")
23+
endpoint := os.Getenv("RUSTFS_ENDPOINT_URL")
24+
// usePathStyle := strings.ToLower(os.Getenv("AWS_S3_USE_PATH_STYLE")) == "true"
25+
26+
if access_key_id == "" || secret_access_key == "" || region == "" || endpoint == "" {
27+
log.Fatal("missing the env: RUSTFS_ACCESS_KEY_ID / RUSTFS_SECRET_ACCESS_KEY / RUSTFS_REGION / RUSTFS_ENDPOINT_URL")
28+
}
29+
30+
// build aws.Config
31+
cfg := aws.Config{
32+
Region: region,
33+
EndpointResolver: aws.EndpointResolverFunc(func(service, region string) (aws.Endpoint, error) {
34+
return aws.Endpoint{
35+
URL: endpoint,
36+
}, nil
37+
}),
38+
Credentials: aws.NewCredentialsCache(credentials.NewStaticCredentialsProvider(access_key_id, secret_access_key, "")),
39+
}
40+
41+
// build S3 client
42+
client := s3.NewFromConfig(cfg, func(o *s3.Options) {
43+
o.UsePathStyle = true
44+
})
45+
```
46+
47+
Then you can use the constructed RustFS Client to perform bucket and object operations.
48+
49+
## Create Bucket
50+
51+
```
52+
_, err = client.CreateBucket(ctx, &s3.CreateBucketInput{
53+
Bucket: aws.String("go-sdk-rustfs"),
54+
})
55+
if err != nil {
56+
log.Fatalf("create bucket failed: %v", err)
57+
}
58+
```
59+
60+
## List Buckets
61+
62+
```
63+
resp, err := client.ListBuckets(ctx, &s3.ListBucketsInput{})
64+
if err != nil {
65+
log.Fatalf("list buckets failed: %v", err)
66+
}
67+
68+
fmt.Println("Buckets:")
69+
for _, b := range resp.Buckets {
70+
fmt.Println(" -", *b.Name)
71+
}
72+
```
73+
74+
## Delete Bucket
75+
76+
```
77+
_, err = client.DeleteBucket(ctx, &s3.DeleteBucketInput{
78+
Bucket: aws.String("go-sdk-rustfs"),
79+
})
80+
if err != nil {
81+
log.Fatalf("delete bucket failed: %v", err)
82+
}
83+
```
84+
85+
## List Objects
86+
87+
```
88+
resp, err := client.ListObjectsV2(ctx, &s3.ListObjectsV2Input{
89+
Bucket: aws.String("bucket-target"),
90+
})
91+
if err != nil {
92+
log.Fatalf("list object failed: %v", err)
93+
}
94+
for _, obj := range resp.Contents {
95+
fmt.Println(" -", *obj.Key)
96+
}
97+
```
98+
99+
## Upload Object
100+
101+
```
102+
_, err = client.PutObject(ctx, &s3.PutObjectInput{
103+
Bucket: aws.String("bucket-target"),
104+
Key: aws.String("test.txt"),
105+
Body: strings.NewReader("hello rustfs"),
106+
})
107+
if err != nil {
108+
log.Fatalf("upload object failed: %v", err)
109+
}
110+
```
111+
112+
## Download Object
113+
114+
```
115+
resp, err := client.GetObject(ctx, &s3.GetObjectInput{
116+
Bucket: aws.String("bucket-target"),
117+
Key: aws.String("1.txt"),
118+
})
119+
if err != nil {
120+
log.Fatalf("download object fail: %v", err)
121+
}
122+
defer resp.Body.Close()
123+
124+
// read object content
125+
data, err := io.ReadAll(resp.Body)
126+
if err != nil {
127+
log.Fatalf("read object content fail: %v", err)
128+
}
129+
fmt.Println("content is :", string(data))
130+
```
131+
132+
For other usage, you can explore on your own. It's even simpler with Vibe Coding!

docs/en/developer/sdk/index.md

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ Currently, the SDKs provided by RustFS include:
1818
- [Python SDK](./python.md)
1919
- [Rust SDK](./rust.md)
2020
- [TypeScript SDK](./typescript.md)
21+
- [Golang SDK](./go.md)
2122

2223
## Terminology Explanation Before Reading
2324

@@ -42,4 +43,4 @@ If you are using MinIO SDKs, you can modify the Endpoint, AK, and SK to be direc
4243
## 3. What to do if there are other incompatible SDKs?
4344

4445
If we use an SDK from a cloud provider that does not support the latest S3, MinIO, or RustFS, how should we handle it?
45-
Please replace the SDK as soon as possible and re-match and upgrade on the business side.
46+
Please replace the SDK as soon as possible and re-match and upgrade on the business side.

docs/en/sidebar.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -245,6 +245,10 @@ export const sidebar = [
245245
text: 'TypeScript',
246246
link: '/developer/sdk/typescript'
247247
},
248+
{
249+
text: 'Golang',
250+
link: '/developer/sdk/go'
251+
},
248252
{
249253
text: 'Other SDKs',
250254
link: '/developer/sdk/other'

0 commit comments

Comments
 (0)