Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
232 commits
Select commit Hold shift + click to select a range
eeb0267
Add translation checklist for _content
tamnd Mar 29, 2026
1d6f702
Translate AUTHORS.md
tamnd Mar 29, 2026
bdb1d08
Refine translation checklist and add CONTRIBUTORS.md
tamnd Mar 29, 2026
6581cc2
Add translation glossary
tamnd Mar 29, 2026
02df870
Translate about.md
tamnd Mar 29, 2026
94eb827
Translate article.tmpl
tamnd Mar 29, 2026
f6fcfac
Translate blog/10years.md
tamnd Mar 29, 2026
9717591
Refine Vietnamese translations with diacritics
tamnd Mar 29, 2026
8981322
Translate blog/11years.md
tamnd Mar 29, 2026
c89555b
Translate blog/12years.md
tamnd Mar 29, 2026
59e4f90
Translate blog/13years.md
tamnd Mar 29, 2026
b63d9cb
Add 30-page translation checklist
tamnd Mar 29, 2026
3680631
Translate blog/14years.md
tamnd Mar 29, 2026
7711aaa
Translate blog/15years.md
tamnd Mar 29, 2026
a593c78
Translate blog/16years.md
tamnd Mar 29, 2026
5393d26
Translate blog/1year.md
tamnd Mar 29, 2026
3a8f90a
Translate blog/2years.md
tamnd Mar 29, 2026
229f41e
Translate blog/3years.md
tamnd Mar 29, 2026
f261fe9
Translate blog/4years.md
tamnd Mar 29, 2026
fb2a96d
Translate blog/5years.md
tamnd Mar 29, 2026
e32db37
Translate blog/6years.md
tamnd Mar 29, 2026
79b0168
Translate blog/7years.md
tamnd Mar 29, 2026
9f13f1f
Translate blog/8years.md
tamnd Mar 29, 2026
8f54134
Translate blog/9years.md
tamnd Mar 29, 2026
3161e60
Translate blog README
tamnd Mar 29, 2026
8b9e070
Translate a-conversation-with-the-go-team
tamnd Mar 29, 2026
4339213
Translate a-new-go-api-for-protocol-buffers
tamnd Mar 29, 2026
0fdcb7d
Translate advanced-go-concurrency-patterns
tamnd Mar 29, 2026
300ce70
Translate alias-names
tamnd Mar 29, 2026
c2510d5
Translate blog all
tamnd Mar 29, 2026
9e64e36
Translate allocation-optimizations
tamnd Mar 29, 2026
857be51
Translate appengine-155
tamnd Mar 29, 2026
5f127a7
Translate appengine-171
tamnd Mar 29, 2026
088cce8
Translate appengine-dec2013
tamnd Mar 29, 2026
cc00322
Translate appengine-ga
tamnd Mar 29, 2026
ed19281
Translate appengine-go111
tamnd Mar 29, 2026
8d3df7e
Translate appengine-gopath
tamnd Mar 29, 2026
6c16749
Translate appengine-scalable
tamnd Mar 29, 2026
f7d6a09
Translate appengine
tamnd Mar 29, 2026
eb159b4
Translate bossie
tamnd Mar 29, 2026
5f282ad
Translate building-stathat-with-go
tamnd Mar 29, 2026
5bfd2aa
Translate c-go-cgo
tamnd Mar 29, 2026
b5b51d2
Translate cgo
tamnd Mar 29, 2026
2a1d036
Translate chacha8rand
tamnd Mar 29, 2026
f752501
Translate cleanups-and-weak
tamnd Mar 29, 2026
2b5be8e
Translate codelab-share
tamnd Mar 29, 2026
9690ee8
Translate community-outreach-working-group
tamnd Mar 29, 2026
8a336bd
Translate company-questionnaire2018
tamnd Mar 29, 2026
81cdbe3
Translate concurrency-is-not-parallelism
tamnd Mar 29, 2026
3b49942
Translate concurrency-timeouts
tamnd Mar 29, 2026
41dd0fa
Translate conduct-2018
tamnd Mar 29, 2026
7c2bb28
Translate conduct-2021
tamnd Mar 29, 2026
26aee62
Translate comparable
tamnd Mar 29, 2026
cf54e93
Translate compat
tamnd Mar 29, 2026
98899ca
Translate constants
tamnd Mar 29, 2026
0f4cb29
Translate container-aware-gomaxprocs
tamnd Mar 29, 2026
14df00a
Translate context-and-structs
tamnd Mar 29, 2026
e258250
Translate context
tamnd Mar 29, 2026
7b211ff
Translate cwg
tamnd Mar 29, 2026
469e728
Translate deadcode
tamnd Mar 29, 2026
ab2b59f
Translate contributor-workshop
tamnd Mar 29, 2026
b9e189e
Translate contributors-summit-2019
tamnd Mar 29, 2026
450df1a
Translate contributors-summit
tamnd Mar 29, 2026
501d304
Translate coretypes
tamnd Mar 29, 2026
3884461
Translate cover
tamnd Mar 29, 2026
3de8258
Translate blog/debug-gdb.md
tamnd Mar 29, 2026
f18af75
Translate blog/debug-opt.md
tamnd Mar 29, 2026
8a142c4
Translate blog/debug-status.md
tamnd Mar 29, 2026
0fe3e7b
Translate blog/debugging-go-code-status-report.md
tamnd Mar 29, 2026
e957aed
Translate blog/debugging-go-programs-with-gnu-debugger.md
tamnd Mar 29, 2026
a1b81d4
Translate blog/debugging-what-you-deploy.md
tamnd Mar 29, 2026
a8be1e2
Translate blog/declaration-syntax.md
tamnd Mar 29, 2026
a8b1980
Translate blog/deconstructing-type-parameters.md
tamnd Mar 29, 2026
6081c16
Translate blog/default.tmpl
tamnd Mar 29, 2026
85bc610
Translate blog/defer-panic-and-recover.md
tamnd Mar 29, 2026
1219122
Translate blog/developer-experience.md
tamnd Mar 29, 2026
1a32bc0
Translate blog/first-class-functions-in-go-and-new-go.md
tamnd Mar 29, 2026
e7c553f
Translate blog/external-libraries.md
tamnd Mar 29, 2026
af3e330
Translate blog/examples.md
tamnd Mar 29, 2026
efe7745
Translate blog/execution-traces-2024.md
tamnd Mar 29, 2026
be4ffeb
Translate blog/from-zero-to-go-launching-on-google.md
tamnd Mar 29, 2026
c08193b
Translate blog/go-at-google-io-2011-videos.md
tamnd Mar 29, 2026
7842433
Translate blog/functions-codewalk.md
tamnd Mar 29, 2026
5c2a98f
Translate blog/fosdem14.md
tamnd Mar 29, 2026
0932540
Translate blog/gccgo-in-gcc-471.md
tamnd Mar 29, 2026
6c37000
Translate blog/first-go-program.md
tamnd Mar 29, 2026
35ad8f0
Translate blog/gcdk-whats-new-in-march-2019.md
tamnd Mar 29, 2026
6553078
Translate blog/fuzz-beta.md
tamnd Mar 29, 2026
c08c0fc
Translate blog/generate.md
tamnd Mar 29, 2026
81a3b76
Translate blog/docker.md
tamnd Mar 29, 2026
87c7f8a
Translate blog/errors-are-values.md
tamnd Mar 29, 2026
aa4634a
Translate blog/fips140.md
tamnd Mar 29, 2026
e7f948a
Translate blog/flight-recorder.md
tamnd Mar 29, 2026
36c365f
Translate blog/error-handling-and-go.md
tamnd Mar 29, 2026
f3091b6
Translate blog/error-syntax.md
tamnd Mar 29, 2026
09df81f
Translate blog/getthee-to-go-meetup.md
tamnd Mar 29, 2026
68e3ffb
Translate blog/getting-to-know-go-community.md
tamnd Mar 29, 2026
84d2ae7
Translate blog/gif-decoder-exercise-in-go-interfaces.md
tamnd Mar 29, 2026
98edcdf
Translate blog/go-11-is-released.md
tamnd Mar 29, 2026
7a7c77e
Translate blog/generics-proposal.md
tamnd Mar 29, 2026
461d040
Translate blog/generics-next-step.md
tamnd Mar 29, 2026
325f789
Translate blog/generic-slice-functions.md
tamnd Mar 29, 2026
486097e
Translate blog/get-familiar-with-workspaces.md
tamnd Mar 29, 2026
3305f49
Translate blog/gif-decoder.md
tamnd Mar 29, 2026
736dda9
Translate blog/generic-interfaces.md
tamnd Mar 29, 2026
ba01174
Translate blog/experiment.md
tamnd Mar 29, 2026
c21b403
Translate blog/experiment.md
tamnd Mar 29, 2026
db843c4
Remove outdated CHECKLIST-30.md
tamnd Mar 29, 2026
68285b2
Add AGENT.md with PR guideline
tamnd Mar 29, 2026
0de9c21
Add redirect stubs for 21 old blog URLs
tamnd Mar 29, 2026
93b8daf
Translate blog/go-brand.md
tamnd Mar 29, 2026
b1a6a1e
Translate blog/go-cloud.md, go-cloud2019.md, go-developer-network.md
tamnd Mar 29, 2026
24b2e82
Translate blog/go-fonts.md
tamnd Mar 29, 2026
3d88935
Translate blog/go.dev.md, go1-path.md, go1-preview.md
tamnd Mar 29, 2026
141a3aa
Translate blog/go1.1.md, go1.10.md, go1.11.md, go1.12.md
tamnd Mar 29, 2026
1d45bea
Translate blog/go1.13.md through go1.18.md
tamnd Mar 29, 2026
a53b39a
Translate blog/go1.18beta1.md and go1.18beta2.md
tamnd Mar 29, 2026
610852d
Translate blog/go1.19.md, go1.2.md, go1.20.md
tamnd Mar 29, 2026
0f490f1
Translate blog/go1.21.md, go1.21rc.md, go1.22.md
tamnd Mar 29, 2026
a6614a1
Translate blog/go1.23.md and go1.24.md
tamnd Mar 29, 2026
7366f01
Translate blog/go1.25.md, go1.26.md, go1.3.md, go1.4.md
tamnd Mar 29, 2026
b3028b2
Translate blog/go1.5.md through go1.8.md
tamnd Mar 29, 2026
4f1f6f6
Translate blog/go1.9.md and blog/go1.md
tamnd Mar 29, 2026
8f69a31
Translate blog/go1.13-errors.md
tamnd Mar 29, 2026
59e66cb
Translate blog/go1.15-proposals.md
tamnd Mar 29, 2026
0a6678a
Translate go1.7-binary-size, go2draft and redirect stubs
tamnd Mar 29, 2026
b3ee168
Translate go15gc, go116-module-changes, go119runtime, go2 proposals
tamnd Mar 29, 2026
635ad50
Translate gob, godoc, godoc.org-redirect
tamnd Mar 29, 2026
9af915a
Translate gofix - go fix modernizer article
tamnd Mar 29, 2026
daae343
Translate gofmt article
tamnd Mar 29, 2026
32a7355
Translate gonew, gopher, gopherchina, gophercon, gophercon2015, gophe…
tamnd Mar 30, 2026
b80d402
Translate gopls-scalability and gopls-vscode-go
tamnd Mar 30, 2026
d4d5bfa
Translate gos-declaration-syntax (redirect), gothamgo, gouk15
tamnd Mar 30, 2026
9a93327
Translate gotelemetry, govulncheck, greenteagc, h2push, hello-china, …
tamnd Mar 30, 2026
c58228f
Translate blog/io2010 series through blog/io2014
tamnd Mar 30, 2026
2e5b165
Translate blog/http-tracing through blog/introducing-gofix
tamnd Mar 30, 2026
f81f739
Translate 21 blog posts: normalization, organizing-go-code, oscon, os…
tamnd Mar 30, 2026
5cbc0e5
Translate blog/loopvar-preview through blog/new-talk-and-tutorials
tamnd Mar 30, 2026
d39b78d
Translate blog/ismmkeynote through blog/llmpowered
tamnd Mar 30, 2026
57bd198
Translate blog/pgo-preview.md and blog/pgo.md
tamnd Mar 30, 2026
c05238b
Translate blog/pipelines.md
tamnd Mar 30, 2026
f3f766a
Translate blog posts: spotlight, stable-releases, stackoverflow, stat…
tamnd Mar 30, 2026
f2fcd5b
Translate blog posts: survey2011, survey2016, survey2017, survey2018
tamnd Mar 30, 2026
09a9db2
Translate blog posts: preview-of-go-version-1, profiling-go-programs,…
tamnd Mar 30, 2026
5bd75ac
Translate blog posts: pkg.go.dev-2020, pkgsite-redesign, pkgsite-sear…
tamnd Mar 30, 2026
2666338
Translate blog/tour, waza-talk, routing-enhancements, upcoming-google…
tamnd Mar 30, 2026
304172f
Translate blog posts: open-source, randv2, range-functions, real-go-p…
tamnd Mar 30, 2026
19268cc
Translate blog posts: sydney-gtug, synctest, testing, the-*, tidy, tl…
tamnd Mar 30, 2026
047dd15
Translate blog/matchlang/tags.html and blog/normalization/table1,tabl…
tamnd Mar 30, 2026
37e8320
Translate solutions/index, clis, cloud
tamnd Mar 30, 2026
6bdd4c2
Translate blog/share-memory-by-communicating, slices-intro, slices
tamnd Mar 30, 2026
f811eac
Translate blog/toolchain, why-generics, wire
tamnd Mar 30, 2026
b965a8b
Translate solutions/devops and solutions/webdev
tamnd Mar 30, 2026
0752489
Translate solutions case study pages (allegro, armut, bitly, bytedanc…
tamnd Mar 30, 2026
85b464b
Translate solutions/americanexpress
tamnd Mar 30, 2026
cd0d7df
Translate blog/slog, smarttwitter, survey2024-h1-results
tamnd Mar 30, 2026
24f310a
Translate blog/survey2024-h2-results, survey2025, swisstable
tamnd Mar 30, 2026
ee6da04
Translate solutions/mercadolibre and solutions/paypal
tamnd Mar 30, 2026
c48ca91
Translate solutions/case-studies, use-cases, sitereliability, google/…
tamnd Mar 30, 2026
d46704c
Translate solutions/google/{chrome,coredata,firebase,sitereliability}.md
tamnd Mar 30, 2026
9d8da2d
Translate index.md and ref/index.md
tamnd Mar 30, 2026
a5f4656
Translate learn/, gopls/doc/, and misc root md files
tamnd Mar 30, 2026
b89a094
Translate doc/database/*.md
tamnd Mar 30, 2026
04310ac
Translate doc/tutorial/*.html
tamnd Mar 30, 2026
3eeb9e6
Translate wiki/ and tour/*.article files
tamnd Mar 30, 2026
261d311
Translate resources.yaml, testimonials.yaml, menus.yaml, project.html
tamnd Mar 30, 2026
881ef9e
Translate copyright.md and conduct.html
tamnd Mar 30, 2026
82724cf
Translate doc/security/*.md
tamnd Mar 30, 2026
f412975
Translate doc/modules/*.md
tamnd Mar 30, 2026
2f458e4
Translate doc/tutorial/*.md
tamnd Mar 30, 2026
d26c046
Translate root template files: blogfeed, codewalk, dir, dl
tamnd Mar 30, 2026
0498ea3
Translate doc/copyright.md (redirect) and doc/default.tmpl
tamnd Mar 30, 2026
de06966
Translate doc/install/ and doc/devel/ html files
tamnd Mar 30, 2026
83e23b6
Translate small template/redirect files: error, texthtml, ref/default…
tamnd Mar 30, 2026
803b84f
Translate doc/*.html misc files
tamnd Mar 30, 2026
8244aeb
Translate play.tmpl and rebuild.html
tamnd Mar 30, 2026
398c95d
Mark survey2016/2017 SVG charts and benchmark txt files as skipped
tamnd Mar 30, 2026
f3a7ddb
Mark assembly, Markov data, and App Engine config files as skipped
tamnd Mar 30, 2026
655e4cd
Translate doc/code.html and doc/contribute.html
tamnd Mar 30, 2026
938fc93
Translate pkg.tmpl, pkgroot.tmpl, site.tmpl, solutions/default.tmpl, …
tamnd Mar 30, 2026
06070d4
Translate talks templates and remaining talks HTML/text files
tamnd Mar 30, 2026
ea9c3d7
Translate doc/ misc md files and gopls/doc/default.tmpl
tamnd Mar 30, 2026
a00930e
Translate doc/go1.x release notes (1.0-1.3, 1.6-1.9, 1.13-1.16, 1.20-…
tamnd Mar 30, 2026
396a49a
Translate talks/ slide files (2010-2015)
tamnd Mar 30, 2026
15321ec
Translate doc/go1.4.md and additional talks slides
tamnd Mar 30, 2026
c269574
Update TRANSLATE.md: mark 64 translated files as done
tamnd Mar 30, 2026
5d3823f
Translate doc/go1.10.md, go1.17.md, talks 2012-2016 slides and refact…
tamnd Mar 30, 2026
1009de8
Translate go1.5/1.11/1.18/1.24-1.25.md, talks 2012-2016 slides and re…
tamnd Mar 30, 2026
b898ef3
Update TRANSLATE.md: mark 38 more files as done
tamnd Mar 30, 2026
a32bb16
Translate talks/2014 remaining slides
tamnd Mar 30, 2026
781e4ef
Translate doc/go1.12.md, go1.19.md, go1.26.md
tamnd Mar 30, 2026
4f922ec
Translate go1.12/1.19.md, talks 2012-2016 slides and splash article
tamnd Mar 30, 2026
71f0929
Update TRANSLATE.md: mark 25 more files as done
tamnd Mar 30, 2026
ac1441b
Translate talks/2013/go4python.slide
tamnd Mar 30, 2026
55ccd1d
Update TRANSLATE.md: mark go4python.slide as done
tamnd Mar 30, 2026
9e3c7be
Translate talks 2012-2013 remaining slides and article
tamnd Mar 30, 2026
0685c92
Translate talks/2016/token, 2017 and 2019 slides
tamnd Mar 30, 2026
645212d
Update TRANSLATE.md: mark 6 more slides as done
tamnd Mar 30, 2026
e37b64e
Translate talks/2015-2019 remaining slides
tamnd Mar 30, 2026
6308486
Translate doc/gc-guide.html
tamnd Mar 30, 2026
d316557
Update TRANSLATE.md: mark gc-guide.html done
tamnd Mar 30, 2026
4bff16d
Translate doc/effective_go.html
tamnd Mar 30, 2026
40ad47d
Update TRANSLATE.md: mark effective_go.html done
tamnd Mar 30, 2026
96cdf2b
Translate doc/faq.md
tamnd Mar 30, 2026
de4a984
Update TRANSLATE.md: mark faq.md done
tamnd Mar 30, 2026
43acb6e
Translate doc/faq.md
tamnd Mar 30, 2026
9ed2782
Translate ref/mod.md
tamnd Mar 30, 2026
5641ee0
Update TRANSLATE.md: mark ref/mod.md done - translation complete
tamnd Mar 30, 2026
de53d0e
Start glossary review: track GLOSSARY.md consistency pass across all …
tamnd Mar 31, 2026
f43231f
Glossary review: enforce consistent GLOSSARY.md terms across all tran…
tamnd Mar 31, 2026
5d3a81e
Revert contributor/repository: keep as English; update GLOSSARY.md
tamnd Mar 31, 2026
6f4fe2e
Translate upstream changes: go tool docs and -u flag fix
tamnd Mar 31, 2026
b11b925
Fix YAML syntax error in flight-recorder.md
tamnd Mar 31, 2026
70b5dd3
Translate Go language specification to Vietnamese
tamnd Mar 31, 2026
23972c3
Merge pull request #5 from tamnd/fix/content-vi-yaml
tamnd Mar 31, 2026
2610273
Serve _content_vi with English fallback for missing assets
tamnd Mar 31, 2026
734c720
Fix tour VI overlay: TourOnly() now uses _content_vi overlay
tamnd Mar 31, 2026
b11818d
Add INDEX.md: curated guide to all go.dev learning resources
tamnd Mar 31, 2026
8cadfa8
Merge pull request #4 from tamnd/serve-content-vi
tamnd Mar 31, 2026
12c4c9f
Translate remaining Go Tour UI to Vietnamese
tamnd Apr 14, 2026
7951ac4
Merge pull request #7 from tamnd/translate-tour-ui
tamnd Apr 14, 2026
4e806cb
Sync upstream and translate updated content
tamnd Apr 14, 2026
365a362
Merge pull request #8 from tamnd/sync-upstream-clean
tamnd Apr 14, 2026
1dbf010
Merge remote-tracking branch 'upstream/master' into sync/upstream-2154
tamnd Sep 2, 2026
1516de3
Merge pull request #9 from tamnd/sync/upstream-2154
tamnd Sep 2, 2026
9363383
_content_vi/blog: translate go1.27
tamnd Sep 2, 2026
f44c48d
Merge pull request #10 from tamnd/translate/blog-go1.27
tamnd Sep 2, 2026
bccfef5
AGENT.md: rewrite for the renamed repo and the audit
tamnd Sep 2, 2026
d587ef6
Merge pull request #11 from tamnd/docs/agent-guidelines
tamnd Sep 2, 2026
7603d5c
translations.json: record what the 557 older translations were made f…
tamnd Sep 2, 2026
20d1653
website: GODEV_CONTENT=en turns the overlay off
tamnd Sep 2, 2026
7cc9c55
all: CI on Go 1.27, with the quality audit as a required check
tamnd Sep 2, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
101 changes: 101 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,101 @@
name: ci

on:
push:
branches: [master]
pull_request:

permissions:
contents: read

env:
# The Go the site is built and tested with. go.mod stays on upstream's
# version on purpose: it is a minimum language version, changing it in the
# fork puts a seventh file into the divergence and makes every upstream sync
# conflict on go.mod, and it says nothing about what CI runs. This does.
GO_VERSION: '1.27.0'

jobs:
test:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

Check failure on line 22 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 22 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:22: unpinned action reference: action is not pinned to a hash (required by blanket policy)
- uses: actions/setup-go@v7

Check failure on line 23 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 23 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:23: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
go-version: ${{ env.GO_VERSION }}
cache: true

- name: vet
run: go vet ./...

- name: build
run: go build ./...

# GODEV_CONTENT=en turns the Vietnamese overlay off.
#
# This suite is upstream's and it asserts English strings: cmd/golangorg
# checks that every release notes page carries its release date, and
# internal/tour checks for `>A Tour of Go<`. Neither goes through the
# server's -content flag, so with the overlay on they get Vietnamese and
# fail, and they are not wrong to. What they are testing is the renderer,
# and the fork has to not break the renderer.
#
# Whether the translation is any good is a different question with a
# different answer, and that is the audit job below.
#
# cmd/screentest is excluded because it dials Google Cloud Storage for
# screenshot baselines and cannot pass without credentials. That is true
# upstream too.
- name: test
env:
GODEV_CONTENT: en
run: go test $(go list ./... | grep -v /cmd/screentest)

# The overlay is the fork, so it is tested with the overlay on.
- name: test the overlay
run: go test -run 'TestOverlay|TestGODEVCONTENT' -v .

# The quality gates, from tamnd/godev-vn-translator, run against this
# checkout. Fourteen deterministic rules over every English and Vietnamese
# pair: dropped links, invented heading anchors, edited code blocks,
# translated template actions, front matter that moved, and whether each
# translation still matches the English it was made from.
#
# -max is a ratchet and not a target. The corpus has 227 refusals today, so a
# gate demanding zero would be red on every pull request including the ones
# fixing it, and a check that is always red is a check somebody turns off.
# This one fails at 228. The number comes down in the same diff as the work
# that lowers it, which makes it a reviewable claim, and the day it reaches
# zero the flag comes off.
audit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7

Check failure on line 73 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 73 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:73: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
path: godev-vn
- uses: actions/checkout@v7

Check failure on line 76 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 76 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:76: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
repository: tamnd/godev-vn-translator
path: translator
- uses: actions/setup-go@v7

Check failure on line 80 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 80 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:80: unpinned action reference: action is not pinned to a hash (required by blanket policy)
with:
go-version: ${{ env.GO_VERSION }}
cache-dependency-path: translator/go.sum

- name: audit
working-directory: translator
run: go run ./cmd/godev -C ../godev-vn audit -max 227

# No -max here on purpose. This step runs even when the gate above failed,
# which is exactly when the report is worth reading, so it must not fail
# for the same reason twice.
- name: write the report
if: always()
working-directory: translator
run: go run ./cmd/godev -C ../godev-vn audit -quiet -report audit.md

- uses: actions/upload-artifact@v7

Check failure on line 97 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

zizmor/unpinned-uses

unpinned action reference: action is not pinned to a hash (required by blanket policy)

Check failure on line 97 in .github/workflows/ci.yml

View workflow job for this annotation

GitHub Actions / zizmor-output

unpinned-uses

ci.yml:97: unpinned action reference: action is not pinned to a hash (required by blanket policy)
if: always()
with:
name: audit
path: godev-vn/audit.md
7 changes: 7 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
# Upstream has no .gitignore, so this file is the fork's and it is short on
# purpose. Only things this fork's own tooling drops into the tree.

# The audit report, written by `godev audit -report` and uploaded by CI.
audit.md

.DS_Store
87 changes: 87 additions & 0 deletions AGENT.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,87 @@
# Agent guidelines

This is `tamnd/godev-vn`, a fork of `golang/website` that serves go.dev in Vietnamese.

## Pull requests

Open them on this repository, never on upstream:

```
gh pr create --repo tamnd/godev-vn
```

Upstream is `golang/website` and it is a fetch remote for syncing. Nothing here goes back to it except a change that is correct for upstream on its own merits, and that is a separate deliberate pull request rather than something that happens by accident.

## How the two languages fit together

English lives in `_content` and Vietnamese in `_content_vi`. `content.go` overlays the second on the first:

```go
func (o *overlayFS) Open(name string) (fs.File, error) {
f, err := o.overlay.Open(name)
if err == nil {
return f, nil
}
return o.base.Open(name)
}
```

A file missing from `_content_vi` is served from `_content`, so the site always renders. That is right for a reader and it is the thing to keep in mind while working here, because it has three consequences:

- A missing translation is invisible. The page renders in English and returns 200.
- A wrong translation is invisible in the same way, since there is no error to raise.
- Browsing the site tells you nothing about coverage, because a page that was never translated looks exactly like a finished page that is meant to be in English.

So do not judge the state of this repository by looking at it in a browser. Run the audit.

## The audit is the source of truth

The tooling lives in `tamnd/godev-vn-translator`, checked out beside this repository.

```
$ cd ../godev-vn-translator
$ go run ./cmd/godev audit ../godev-vn
```

It reports coverage, runs fourteen deterministic gates over every English and Vietnamese pair, and exits non-zero when anything is refused. Notices never fail it.

Run it before opening a pull request that touches `_content_vi`. A change that adds a refusal is a change that should not merge.

`TRANSLATE.md` is a frozen snapshot from March 2026 and its counts no longer match the tree. Prefer the audit.

## `translations.json`

At the root, recording for each translation the SHA-256 of the English it was made from, the hash of the instructions used, which route and model answered, and how many pieces the file went over in.

Do not hand edit it and do not regenerate it against the current English. Its whole value is that it says what a translation was made from, which is how a sync that moves the English can be told from one that did not. A record rewritten to match today's English answers no question at all.

## `GLOSSARY.md`

The agreed rendering for terms that keep coming up. It is a Markdown table so that a person can open it, disagree with a row, and change it.

Some terms deliberately keep the English word: `commit`, `repository`, `workspace`, `generics`, `dependency`. A Go programmer reading Vietnamese says those in English, and rendering them into Vietnamese is not more Vietnamese, it is less readable. When the Vietnamese column repeats the English word, that is the instruction.

Adding a row takes effect immediately. The glossary is read off disk at run time and is deliberately not part of the prompt hash, so a new term does not put the whole corpus back in the queue.

## Things that are structure and not prose

These are what the gates check, and they are the mistakes that get made:

- A link target is copied character for character. The bracket text and any quoted title are prose.
- A heading's `{#id}` is copied exactly. A heading that loses one gets a new anchor made from its Vietnamese words, and every link into that section breaks while the page still renders.
- Inside a fenced block, only the comments are prose.
- Everything between `{{` and `}}` is code the site runs.
- Front matter keys stay in the same order, and `date`, `by`, `tags`, `layout`, `template`, `redirect` and `series` are copied as data. Never add `template: true` to a Vietnamese page whose English does not have it.
- Never put a backslash in front of Markdown punctuation. `\-` is not a bullet and `\#` is not a heading.

## Syncing with upstream

```
git fetch upstream
git checkout -b sync/upstream-NNNN
git merge upstream/master
```

The fork diverges from upstream in six files: `AGENT.md`, `GLOSSARY.md`, `INDEX.md`, `TRANSLATE.md`, `content.go` and `cmd/golangorg/server.go`. The first four are new, so only the last two can conflict, and both are the overlay wiring.

Afterwards, run the audit. The L13 refusals are the list of translations the sync just invalidated, by name.
69 changes: 69 additions & 0 deletions GLOSSARY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,69 @@
# Translation Glossary

Tệp này xác định các bản dịch tiếng Việt ưu tiên và các quyết định văn phong cho
`_content_vi/`.

Cập nhật bảng thuật ngữ này trong quá trình dịch:

- Thêm thuật ngữ khi một cụm từ lặp lại nhiều lần hoặc mang tính chuyên ngành.
- Ưu tiên một bản dịch thống nhất cho mỗi khái niệm, trừ khi ngữ cảnh đòi hỏi khác đi.
- Giữ nguyên tên sản phẩm, tên kho lưu trữ, tên tệp và cú pháp truy vấn.
- Giữ nguyên mã nguồn, URL và các đoạn lệnh.
- Khi chủ ý giữ nguyên một thuật ngữ không dịch, hãy ghi rõ quyết định đó tại đây.

## Quy ước

- Văn phong: rõ ràng, kỹ thuật, trung tính.
- Tên sản phẩm: `Go`
- Tên dự án: `dự án Go`
- Lịch sử quản lý mã nguồn: `lịch sử quản lý mã nguồn`
- Tác giả: `tác giả`
- Commit: `commit`
- Thay đổi: `thay đổi`
- Tìm kiếm: `tìm kiếm`
- Chuyển hướng: `chuyển hướng`
- Máy chủ: `máy chủ`
- Nguồn tham chiếu chính: `nguồn thông tin chính xác nhất`

## Thuật ngữ đã chốt

| Thuật ngữ gốc | Bản dịch ưu tiên | Ghi chú |
| --- | --- | --- |
| Authors of Go | Tác giả của Go | Page title in `_content_vi/AUTHORS.md`. |
| Go project | dự án Go | Keep `Go` untranslated. |
| AUTHORS | AUTHORS | Filename, do not translate. |
| CONTRIBUTORS | CONTRIBUTORS | Filename, do not translate. |
| author | tác giả | Use for people credited for commits or changes. |
| contributor | contributor | Keep unchanged — do not translate. |
| commit | commit | Keep the Git term unchanged. |
| repository | repository | Keep unchanged — do not translate. |
| source control history | lịch sử quản lý mã nguồn | Prefer this over shorter paraphrases. |
| authoritative source | nguồn thông tin chính xác nhất | Matches current translation. |
| Go's Gerrit instance | máy chủ Gerrit của Go | Keep `Gerrit` as a product name. |
| search for changes | tìm kiếm các thay đổi | General action phrase. |
| redirect | chuyển hướng | For front matter semantics and prose. |
| ecosystem | hệ sinh thái | Prefer this in Go platform context. |
| community | cộng đồng | General community term. |
| open-source | mã nguồn mở | Use in general prose. |
| anniversary | kỷ niệm | Use for anniversary or milestone context. |
| birthday | sinh nhật | Use for celebratory wording. |
| cloud software | phần mềm đám mây | Prefer this in infra context. |
| garbage collector | bộ gom rác | Preferred runtime term. |
| tooling | hệ thống công cụ | Use for developer-tooling context. |
| release | bản phát hành | Use for product or language releases. |
| vulnerability | lỗ hổng bảo mật | Security context. |
| dependency | dependency | Keep this term in technical prose when clearer. |
| generics | generics | Keep the feature name unchanged for now. |
| production-ready | sẵn sàng cho môi trường production | Preferred phrase in release notes. |
| editor-neutral | trung lập với trình soạn thảo | For tooling compatibility context. |
| workspace | workspace | Keep unchanged in Go feature naming. |
| soft memory limit | giới hạn bộ nhớ mềm | Runtime and GC context. |
| supply chain security | bảo mật chuỗi cung ứng | Security context. |
| false positive | dương tính giả | Security and tooling context. |
| structured logging | structured logging | Keep unchanged for now. |
| profile-guided optimization | tối ưu hóa dựa trên hồ sơ thực thi | Compiler and performance context. |

## Quyết định đang áp dụng

- Dùng tiếng Việt có dấu nhất quán trong toàn bộ `_content_vi/`.
- Ưu tiên cách diễn đạt tự nhiên trong tiếng Việt thay vì bám sát từng từ tiếng Anh.
Loading
Loading