Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
66 commits
Select commit Hold shift + click to select a range
6eb598d
chore: update origin to ef0359676c
lacolaco Oct 4, 2026
a191b35
fix: migrate untranslated files
lacolaco Oct 4, 2026
15bcd92
chore: remove pages deleted upstream
lacolaco Oct 4, 2026
fe9c838
fix(docs): mirror upstream code and link changes in src/content/guide…
lacolaco Oct 4, 2026
9ec13d3
fix(docs): retranslate updated sections in src/content/guide/components
lacolaco Oct 4, 2026
40adcc6
chore(docs): insert new upstream sections untranslated in src/content…
lacolaco Oct 4, 2026
0a9e863
fix(docs): apply upstream wording changes in src/content/guide/templates
lacolaco Oct 4, 2026
7e6bd45
fix(docs): retranslate updated sections in src/content/guide/templates
lacolaco Oct 4, 2026
d330b5e
fix(docs): apply upstream wording changes in src/content/guide/testing
lacolaco Oct 4, 2026
71459a6
fix(docs): retranslate updated sections in src/content/guide/testing
lacolaco Oct 4, 2026
0b0da6f
fix(docs): apply upstream wording changes in src/content/guide/forms
lacolaco Oct 4, 2026
0849689
fix(docs): retranslate updated sections in src/content/guide/forms
lacolaco Oct 4, 2026
faf4161
fix(docs): apply upstream wording changes in src/content/guide/forms/…
lacolaco Oct 4, 2026
48a8d93
fix(docs): retranslate updated sections in src/content/guide/forms/si…
lacolaco Oct 4, 2026
75aac77
chore(docs): insert new upstream sections untranslated in src/content…
lacolaco Oct 4, 2026
d57f0db
fix(docs): mirror upstream code and link changes in src/content/guide…
lacolaco Oct 4, 2026
62a4104
fix(docs): apply upstream wording changes in src/content/guide/routing
lacolaco Oct 4, 2026
3a2ea49
fix(docs): retranslate updated sections in src/content/guide/routing
lacolaco Oct 4, 2026
1616c75
chore(docs): insert new upstream sections untranslated in src/content…
lacolaco Oct 4, 2026
37d438b
fix(docs): apply upstream wording changes in src/content/tutorials/fi…
lacolaco Oct 4, 2026
4634149
fix(docs): apply upstream wording changes in src/content/tutorials/fi…
lacolaco Oct 4, 2026
f87c324
fix(docs): apply upstream wording changes in src/content/tutorials/si…
lacolaco Oct 4, 2026
76c236d
fix(docs): mirror upstream code and link changes in src/content/tutor…
lacolaco Oct 4, 2026
da119a7
fix(docs): mirror upstream code and link changes in src/content/tutor…
lacolaco Oct 4, 2026
6566e25
fix(docs): mirror upstream code and link changes in src/content/tutor…
lacolaco Oct 4, 2026
f579eae
fix(docs): mirror upstream code and link changes in src/content/tutor…
lacolaco Oct 4, 2026
326cd8e
fix(docs): mirror upstream code and link changes in src/content/tutor…
lacolaco Oct 4, 2026
b36abdb
fix(docs): apply upstream wording changes in src/content/guide
lacolaco Oct 4, 2026
c454f7a
fix(docs): retranslate updated sections in src/content/guide
lacolaco Oct 4, 2026
f5c0d92
chore(docs): insert new upstream sections untranslated in src/content…
lacolaco Oct 4, 2026
86ca93c
fix(docs): mirror upstream code and link changes in src/content/guide/di
lacolaco Oct 4, 2026
d6723c1
fix(docs): retranslate updated sections in src/content/guide/di
lacolaco Oct 4, 2026
efb1f21
chore(docs): insert new upstream sections untranslated in src/content…
lacolaco Oct 4, 2026
38818fe
fix(docs): apply upstream wording changes in src/content/guide/animat…
lacolaco Oct 4, 2026
acf783d
fix(docs): retranslate updated sections in src/content/guide/animations
lacolaco Oct 4, 2026
7625609
chore(docs): insert new upstream sections untranslated in src/content…
lacolaco Oct 4, 2026
b6f41c8
chore(docs): insert new upstream sections untranslated in src/content…
lacolaco Oct 4, 2026
0c92a89
fix(docs): retranslate updated sections in src/content/guide/http
lacolaco Oct 4, 2026
c85a7d9
fix(docs): retranslate updated sections in src/content/guide/signals
lacolaco Oct 4, 2026
95fe4ef
fix(docs): apply upstream wording changes in src/content/reference
lacolaco Oct 4, 2026
f9067ee
fix(docs): retranslate updated sections in src/content/reference
lacolaco Oct 4, 2026
545807e
fix(docs): retranslate updated sections in src/content/reference/configs
lacolaco Oct 4, 2026
bfe8924
fix(docs): apply upstream wording changes in src/content/reference/er…
lacolaco Oct 4, 2026
795cbe5
fix(docs): retranslate updated sections in src/content/reference/errors
lacolaco Oct 4, 2026
65e7250
chore(docs): insert new upstream sections untranslated in src/content…
lacolaco Oct 4, 2026
3f740b0
fix(docs): retranslate updated sections in src/content/ai
lacolaco Oct 4, 2026
08c6ac6
fix(docs): retranslate updated sections in src/content/best-practices
lacolaco Oct 4, 2026
0a8d7d5
fix(docs): apply upstream wording changes in src/content/best-practic…
lacolaco Oct 4, 2026
72d0ba5
fix(docs): apply upstream wording changes in src/content/introduction…
lacolaco Oct 4, 2026
2166337
fix(docs): retranslate updated sections in src/content/introduction/e…
lacolaco Oct 4, 2026
d7fc0a5
fix(docs): apply upstream wording changes in src/content/tools/cli
lacolaco Oct 4, 2026
7b31277
fix(docs): retranslate updated sections in src/content/tools/devtools
lacolaco Oct 4, 2026
33b633a
fix(app): mirror upstream code changes in src/app/core/services
lacolaco Oct 4, 2026
991d959
fix(app): mirror upstream code changes in src/app/features/home
lacolaco Oct 4, 2026
7cfca42
fix(app): apply upstream changes to translated strings in src/app/fea…
lacolaco Oct 4, 2026
a7555ca
fix(app): mirror upstream code changes in src/app/features/update
lacolaco Oct 4, 2026
3011769
fix(app): apply upstream changes to translated strings in src/app/fea…
lacolaco Oct 4, 2026
96428c1
fix(app): apply upstream changes to translated strings in src/app/rou…
lacolaco Oct 4, 2026
4b4e506
fix(app): mirror upstream code changes in src/content/tutorials/signa…
lacolaco Oct 4, 2026
bcc5f63
fix(app): mirror upstream code changes in src
lacolaco Oct 4, 2026
0207d2d
fix: update patches for upstream ANGULAR_DEV constant extraction
lacolaco Oct 4, 2026
c326434
fix(docs): fix lint errors in migrated pages
lacolaco Oct 4, 2026
208bda7
fix(docs): mirror upstream code and link changes in src/content/guide…
lacolaco Oct 4, 2026
9d84f03
fix(docs): apply missed upstream wording changes
lacolaco Oct 4, 2026
e946a0c
fix: drop orphan entries for pages removed upstream
lacolaco Oct 4, 2026
a1121c8
fix(docs): add heading IDs referenced by upstream links
lacolaco Oct 4, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 3 additions & 5 deletions adev-ja/src/app/core/services/a-dev-title-strategy.en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,12 @@ import {NavigationItem} from '@angular/docs';
import {Meta, Title} from '@angular/platform-browser';
import {ActivatedRouteSnapshot, RouterStateSnapshot, TitleStrategy} from '@angular/router';

export const ROUTE_TITLE_PROPERTY = 'label';
export const ROUTE_PARENT_PROPERTY = 'parent';
export const TITLE_SUFFIX = 'Angular';
export const TITLE_SEPARATOR = ' • ';
const TITLE_SEPARATOR = ' • ';
export const DEFAULT_PAGE_TITLE = 'Overview';

export const TITLE_OG_META_TAG = 'og:title';
export const TITLE_TWITTER_META_TAG = 'twitter:title';
const TITLE_OG_META_TAG = 'og:title';
const TITLE_TWITTER_META_TAG = 'twitter:title';

export const ALL_TITLE_META_TAGS = [TITLE_OG_META_TAG, TITLE_TWITTER_META_TAG];

Expand Down
8 changes: 3 additions & 5 deletions adev-ja/src/app/core/services/a-dev-title-strategy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -11,14 +11,12 @@ import {NavigationItem} from '@angular/docs';
import {Meta, Title} from '@angular/platform-browser';
import {ActivatedRouteSnapshot, RouterStateSnapshot, TitleStrategy} from '@angular/router';

export const ROUTE_TITLE_PROPERTY = 'label';
export const ROUTE_PARENT_PROPERTY = 'parent';
export const TITLE_SUFFIX = 'Angular 日本語版';
export const TITLE_SEPARATOR = ' • ';
const TITLE_SEPARATOR = ' • ';
export const DEFAULT_PAGE_TITLE = 'Overview';

export const TITLE_OG_META_TAG = 'og:title';
export const TITLE_TWITTER_META_TAG = 'twitter:title';
const TITLE_OG_META_TAG = 'og:title';
const TITLE_TWITTER_META_TAG = 'twitter:title';

export const ALL_TITLE_META_TAGS = [TITLE_OG_META_TAG, TITLE_TWITTER_META_TAG];

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ <h3 class="terminal-title font-mono">Hydration Engine Log</h3>
<span class="log-tag">event:</span>
<span class="log-msg">{{ evt }}</span>
</div>
}
@if (eventQueue().length === 0) {
} @empty {
<div class="log-placeholder">Awaiting app bootstrap...</div>
}
</div>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,7 @@ <h3 class="terminal-title font-mono">ハイドレーションエンジンログ<
<span class="log-tag">event:</span>
<span class="log-msg">{{ evt }}</span>
</div>
}
@if (eventQueue().length === 0) {
} @empty {
<div class="log-placeholder">アプリのブートストラップを待機中...</div>
}
</div>
Expand Down
2 changes: 1 addition & 1 deletion adev-ja/src/app/features/home/home.component.en.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ <h1 tabindex="-1">Angular v22 is here!</h1>
</a>

<div class="search-field">
<docs-text-field placeholder="search" (click)="openSearch()" />
<docs-text-field placeholder="Search" (click)="openSearch()" />
</div>
</div>

Expand Down
2 changes: 1 addition & 1 deletion adev-ja/src/app/features/home/home.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ <h1 tabindex="-1">Angular v22がリリースされました!</h1>
</a>

<div class="search-field">
<docs-text-field placeholder="search" (click)="openSearch()" />
<docs-text-field placeholder="Search" (click)="openSearch()" />
</div>
</div>

Expand Down
8 changes: 8 additions & 0 deletions adev-ja/src/app/features/update/recommendations.en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2780,6 +2780,14 @@ export const RECOMMENDATIONS: Step[] = [
possibleIn: 2100,
step: '21.0.0_ng_update',
},
{
possibleIn: 2100,
necessaryAsOf: 2100,
level: ApplicationComplexity.Advanced,
step: '21.0.0-safe-resource-url-audio-src',
action:
'If you use `SafeResourceUrl` values with `audio[src]` bindings, be aware that `audio[src]` is no longer sanitized in Angular v21. Existing uses of `bypassSecurityTrustResourceUrl` may therefore produce the `SafeValue must use [property]=binding` message. Remove the unnecessary sanitization and bind the URL directly instead.',
},

{
possibleIn: 2100,
Expand Down
8 changes: 8 additions & 0 deletions adev-ja/src/app/features/update/recommendations.ts
Original file line number Diff line number Diff line change
Expand Up @@ -2780,6 +2780,14 @@ export const RECOMMENDATIONS: Step[] = [
possibleIn: 2100,
step: '21.0.0_ng_update',
},
{
possibleIn: 2100,
necessaryAsOf: 2100,
level: ApplicationComplexity.Advanced,
step: '21.0.0-safe-resource-url-audio-src',
action:
'`SafeResourceUrl` の値を `audio[src]` バインディングで使用している場合、Angular v21 では `audio[src]` がサニタイズされなくなる点に注意してください。そのため、既存の `bypassSecurityTrustResourceUrl` の使用が `SafeValue must use [property]=binding` というメッセージを出力することがあります。不要なサニタイズを削除し、URLを直接バインドしてください。',
},

{
possibleIn: 2100,
Expand Down
24 changes: 18 additions & 6 deletions adev-ja/src/app/features/update/update.component.en.html
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,12 @@ <h2>{{ title() }}</h2>
<h3>Before you update</h3>
@for (r of beforeRecommendations; track $index) {
<div class="adev-recommendation-item">
<mat-checkbox />
<div class="adev-recommendation-content">
<mat-checkbox #checkbox [aria-labelledby]="'adev-before-recommendation-' + $index" />
<div
class="adev-recommendation-content"
[id]="'adev-before-recommendation-' + $index"
(click)="toggleRecommendation($event, checkbox)"
>
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{ getComplexityLevelName(r.level) }}
Expand All @@ -171,8 +175,12 @@ <h3>Update to the new version</h3>

@for (r of duringRecommendations; track $index) {
<div class="adev-recommendation-item">
<mat-checkbox />
<div class="adev-recommendation-content">
<mat-checkbox #checkbox [aria-labelledby]="'adev-during-recommendation-' + $index" />
<div
class="adev-recommendation-content"
[id]="'adev-during-recommendation-' + $index"
(click)="toggleRecommendation($event, checkbox)"
>
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{ getComplexityLevelName(r.level) }}
Expand All @@ -189,8 +197,12 @@ <h3>Update to the new version</h3>
<h3>After you update</h3>
@for (r of afterRecommendations; track $index) {
<div class="adev-recommendation-item">
<mat-checkbox />
<div class="adev-recommendation-content">
<mat-checkbox #checkbox [aria-labelledby]="'adev-after-recommendation-' + $index" />
<div
class="adev-recommendation-content"
[id]="'adev-after-recommendation-' + $index"
(click)="toggleRecommendation($event, checkbox)"
>
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{ getComplexityLevelName(r.level) }}
Expand Down
12 changes: 12 additions & 0 deletions adev-ja/src/app/features/update/update.component.en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,18 @@ export default class UpdateComponent {
}
}

protected toggleRecommendation(event: MouseEvent, checkbox: MatCheckbox): void {
const target = event.target as Element | null;

// Keep links in the recommendation independently operable.
if (target?.closest('a')) {
return;
}

checkbox.toggle();
checkbox.focus();
}

async showUpdatePath() {
this.beforeRecommendations = [];
this.duringRecommendations = [];
Expand Down
24 changes: 18 additions & 6 deletions adev-ja/src/app/features/update/update.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -147,8 +147,12 @@ <h2>{{ title() }}</h2>
<h3>アップデート前</h3>
@for (r of beforeRecommendations; track $index) {
<div class="adev-recommendation-item">
<mat-checkbox />
<div class="adev-recommendation-content">
<mat-checkbox #checkbox [aria-labelledby]="'adev-before-recommendation-' + $index" />
<div
class="adev-recommendation-content"
[id]="'adev-before-recommendation-' + $index"
(click)="toggleRecommendation($event, checkbox)"
>
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{ getComplexityLevelName(r.level) }}
Expand All @@ -171,8 +175,12 @@ <h3>新しいバージョンにアップデートする</h3>

@for (r of duringRecommendations; track $index) {
<div class="adev-recommendation-item">
<mat-checkbox />
<div class="adev-recommendation-content">
<mat-checkbox #checkbox [aria-labelledby]="'adev-during-recommendation-' + $index" />
<div
class="adev-recommendation-content"
[id]="'adev-during-recommendation-' + $index"
(click)="toggleRecommendation($event, checkbox)"
>
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{ getComplexityLevelName(r.level) }}
Expand All @@ -189,8 +197,12 @@ <h3>新しいバージョンにアップデートする</h3>
<h3>アップデート後</h3>
@for (r of afterRecommendations; track $index) {
<div class="adev-recommendation-item">
<mat-checkbox />
<div class="adev-recommendation-content">
<mat-checkbox #checkbox [aria-labelledby]="'adev-after-recommendation-' + $index" />
<div
class="adev-recommendation-content"
[id]="'adev-after-recommendation-' + $index"
(click)="toggleRecommendation($event, checkbox)"
>
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{ getComplexityLevelName(r.level) }}
Expand Down
12 changes: 12 additions & 0 deletions adev-ja/src/app/features/update/update.component.ts
Original file line number Diff line number Diff line change
Expand Up @@ -154,6 +154,18 @@ export default class UpdateComponent {
}
}

protected toggleRecommendation(event: MouseEvent, checkbox: MatCheckbox): void {
const target = event.target as Element | null;

// Keep links in the recommendation independently operable.
if (target?.closest('a')) {
return;
}

checkbox.toggle();
checkbox.focus();
}

async showUpdatePath() {
this.beforeRecommendations = [];
this.duringRecommendations = [];
Expand Down
36 changes: 26 additions & 10 deletions adev-ja/src/app/routing/navigation-entries/index.en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -26,13 +26,6 @@ import SIGNAL_FORMS_TUTORIAL_NAV_DATA from '../../../content/tutorials/signal-fo
// @ts-ignore
import API_MANIFEST_JSON from '../../../assets/manifest.json' with {type: 'json'};

interface SubNavigationData {
docs: NavigationItem[];
reference: NavigationItem[];
tutorials: NavigationItem[];
footer: NavigationItem[];
}

export const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
{
label: 'Introduction',
Expand Down Expand Up @@ -263,6 +256,12 @@ export const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/templates/defer',
contentPath: 'guide/templates/defer',
},
{
label: 'Error boundaries with @boundary',
path: 'guide/templates/error-boundaries',
contentPath: 'guide/templates/error-boundaries',
status: 'new',
},
{
label: 'Expression syntax',
path: 'guide/templates/expression-syntax',
Expand Down Expand Up @@ -406,6 +405,12 @@ export const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/routing/data-resolvers',
contentPath: 'guide/routing/data-resolvers',
},
{
label: 'Data fetching with resources',
path: 'guide/routing/data-fetching-with-resources',
contentPath: 'guide/routing/data-fetching-with-resources',
status: 'new',
},
{
label: 'Lifecycle and events',
path: 'guide/routing/lifecycle-and-events',
Expand Down Expand Up @@ -1768,6 +1773,11 @@ export const REFERENCE_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'reference/migrations/common-to-standalone',
contentPath: 'reference/migrations/common-to-standalone',
},
{
label: 'Injectable to Service',
path: 'reference/migrations/injectable-to-service',
contentPath: 'reference/migrations/injectable-to-service',
},
],
},
];
Expand All @@ -1792,15 +1802,21 @@ export const ALL_ITEMS = [
...TUTORIALS_SUB_NAVIGATION_DATA,
];

interface ApiManifestPackage {
normalizedModuleName: string;
moduleLabel: string;
entries: {name: string; category: string | undefined}[];
}

function getApiNavigationItems(): NavigationItem[] {
const manifest = API_MANIFEST_JSON as any; // TODO(mri): Use proper type when the refactoring of #66252 gets in.
const manifest = API_MANIFEST_JSON as ApiManifestPackage[];

const apiNavigationItems: NavigationItem[] = [];

for (const packageEntry of manifest) {
const packageNavigationItem: NavigationItem = {
label: packageEntry.moduleLabel,
children: packageEntry.entries.map((api: any) => ({
children: packageEntry.entries.map((api) => ({
path: getApiUrl(packageEntry, api.name),
label: api.name,
category: api.category,
Expand All @@ -1813,7 +1829,7 @@ function getApiNavigationItems(): NavigationItem[] {
return apiNavigationItems;
}

function getApiUrl(packageEntry: any, apiName: string): string {
function getApiUrl(packageEntry: ApiManifestPackage, apiName: string): string {
const packageName = packageEntry.normalizedModuleName
// packages like `angular_core` should be `core`
// packages like `angular_animation_browser` should be `animation/browser`
Expand Down
Loading
Loading