Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
32 commits
Select commit Hold shift + click to select a range
106643d
chore: update origin to 71cde39ff04
lacolaco Jan 6, 2026
82d758e
fix: migrate new and untranslated files
lacolaco Jan 7, 2026
8503d82
docs(guide/forms): migrate .en.md changes to Japanese translations
lacolaco Jan 7, 2026
3051050
docs(ai): migrate .en.md changes
lacolaco Jan 7, 2026
9f1aadd
docs(best-practices): migrate .en.md changes
lacolaco Jan 7, 2026
9e11b14
docs(guide/animations): migrate .en.md changes
lacolaco Jan 7, 2026
75cb7b0
docs(guide/aria): migrate .en.md changes
lacolaco Jan 7, 2026
71ff943
docs(guide/components): migrate .en.md changes
lacolaco Jan 7, 2026
52f623a
docs(guide/di): migrate .en.md changes
lacolaco Jan 7, 2026
a82edad
docs(guide/directives): migrate .en.md changes
lacolaco Jan 7, 2026
a6f103a
docs(guide): migrate .en.md changes for root files
lacolaco Jan 7, 2026
00f561c
docs(guide/http): migrate .en.md changes
lacolaco Jan 7, 2026
62a62ab
docs(guide/routing): migrate common-router-tasks .en.md changes
lacolaco Jan 7, 2026
301e42e
docs(guide/routing): migrate customizing-route-behavior .en.md changes
lacolaco Jan 7, 2026
3af8590
docs(guide/routing): migrate data-resolvers .en.md changes
lacolaco Jan 7, 2026
aad2f30
docs(guide/routing): migrate define-routes .en.md changes
lacolaco Jan 7, 2026
4035049
docs(guide/routing): migrate lifecycle-and-events .en.md changes
lacolaco Jan 7, 2026
220a24c
docs(guide/routing): migrate navigate, read-route-state, redirecting …
lacolaco Jan 7, 2026
6af0fc4
docs(guide/routing): migrate route-guards, animations, reference .en.…
lacolaco Jan 7, 2026
965a7c0
docs(guide/routing): migrate remaining routing .en.md changes
lacolaco Jan 7, 2026
72643c4
docs(guide/signals): migrate .en.md changes
lacolaco Jan 7, 2026
7729a25
docs(guide/templates): migrate .en.md changes
lacolaco Jan 7, 2026
d3dd423
docs(guide/testing): migrate paired .en.md changes
lacolaco Jan 7, 2026
1388b71
docs(guide/testing): migrate using-component-harnesses and utility-ap…
lacolaco Jan 7, 2026
e70d41b
docs(introduction/essentials): migrate .en.md changes
lacolaco Jan 7, 2026
44d8b9f
docs(reference): migrate .en.md changes
lacolaco Jan 7, 2026
2a26faf
docs(tools/cli): migrate serve .en.md changes
lacolaco Jan 7, 2026
0152402
docs(tutorials): migrate .en.md changes
lacolaco Jan 7, 2026
86dfe6e
chore: migrate source code file changes
lacolaco Jan 7, 2026
6f3ff54
docs(testing): translate components-scenarios.md to Japanese
lacolaco Jan 7, 2026
e8974af
fix(docs): fix textlint errors in define-routes and services
lacolaco Jan 7, 2026
676db7e
fix(docs): fix remaining textlint errors
lacolaco Jan 7, 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
24 changes: 13 additions & 11 deletions adev-ja/src/app/features/update/update.component.en.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ <h3>Angular versions</h3>
<ul class="adev-template-dropdown" cdkMenu>
@for (version of versions; track $index) {
<li>
<button cdkMenuItem type="button" (click)="from=version; showUpdatePath()">
<button cdkMenuItem type="button" (click)="from = version; showUpdatePath()">
<span>{{ version.name }}</span>
</button>
</li>
Expand All @@ -40,7 +40,7 @@ <h3>Angular versions</h3>
<ul class="adev-template-dropdown" cdkMenu>
@for (version of versions; track $index) {
<li>
<button cdkMenuItem type="button" (click)="to=version; showUpdatePath()">
<button cdkMenuItem type="button" (click)="to = version; showUpdatePath()">
<span>{{ version.name }}</span>
</button>
</li>
Expand Down Expand Up @@ -70,7 +70,7 @@ <h3>Angular versions</h3>
</div>
}

@if ((to.number - from.number > 150) && from.number > 240) {
@if (to.number - from.number > 150 && from.number > 240) {
<div class="docs-alert docs-alert-critical">
<p>
<strong>Warning:</strong>
Expand All @@ -86,7 +86,7 @@ <h3>Application complexity</h3>
<mat-button-toggle-group
(change)="level = $event.value; showUpdatePath()"
[value]="level"
style="margin-bottom:16px;"
style="margin-bottom: 16px"
>
<mat-button-toggle [value]="1">Basic</mat-button-toggle>
<mat-button-toggle [value]="2">Medium</mat-button-toggle>
Expand All @@ -106,7 +106,7 @@ <h3>Other dependencies</h3>
<mat-checkbox
(change)="options[option.id] = $event.checked; showUpdatePath()"
[checked]="options[option.id]"
>I use {{option.name}} {{option.description}}</mat-checkbox
>I use {{ option.name }} {{ option.description }}</mat-checkbox
>
</div>
}
Expand Down Expand Up @@ -137,19 +137,21 @@ <h4>Package Manager</h4>
<!-- RECOMMENDATIONS SECTION -->

@if (
beforeRecommendations.length > 0 || duringRecommendations.length > 0 || afterRecommendations.length > 0
beforeRecommendations.length > 0 ||
duringRecommendations.length > 0 ||
afterRecommendations.length > 0
) {
<div class="recommendations">
<h2>{{title()}}</h2>
<h2>{{ title() }}</h2>

<h3>Before you update</h3>
@for (r of beforeRecommendations; track $index) {
@for (r of beforeRecommendations; track $index) {
<div class="adev-recommendation-item">
<mat-checkbox />
<div class="adev-recommendation-content">
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{getComplexityLevelName(r.level)}}
{{ getComplexityLevelName(r.level) }}
</span>
</div>
</div>
Expand All @@ -173,7 +175,7 @@ <h3>Update to the new version</h3>
<div class="adev-recommendation-content">
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{getComplexityLevelName(r.level)}}
{{ getComplexityLevelName(r.level) }}
</span>
</div>
</div>
Expand All @@ -191,7 +193,7 @@ <h3>After you update</h3>
<div class="adev-recommendation-content">
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{getComplexityLevelName(r.level)}}
{{ getComplexityLevelName(r.level) }}
</span>
</div>
</div>
Expand Down
24 changes: 13 additions & 11 deletions adev-ja/src/app/features/update/update.component.html
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@ <h3>Angularバージョン</h3>
<ul class="adev-template-dropdown" cdkMenu>
@for (version of versions; track $index) {
<li>
<button cdkMenuItem type="button" (click)="from=version; showUpdatePath()">
<button cdkMenuItem type="button" (click)="from = version; showUpdatePath()">
<span>{{ version.name }}</span>
</button>
</li>
Expand All @@ -40,7 +40,7 @@ <h3>Angularバージョン</h3>
<ul class="adev-template-dropdown" cdkMenu>
@for (version of versions; track $index) {
<li>
<button cdkMenuItem type="button" (click)="to=version; showUpdatePath()">
<button cdkMenuItem type="button" (click)="to = version; showUpdatePath()">
<span>{{ version.name }}</span>
</button>
</li>
Expand Down Expand Up @@ -70,7 +70,7 @@ <h3>Angularバージョン</h3>
</div>
}

@if ((to.number - from.number > 150) && from.number > 240) {
@if (to.number - from.number > 150 && from.number > 240) {
<div class="docs-alert docs-alert-critical">
<p>
<strong>警告:</strong>
Expand All @@ -86,7 +86,7 @@ <h3>アプリケーションの複雑さ</h3>
<mat-button-toggle-group
(change)="level = $event.value; showUpdatePath()"
[value]="level"
style="margin-bottom:16px;"
style="margin-bottom: 16px"
>
<mat-button-toggle [value]="1">基本</mat-button-toggle>
<mat-button-toggle [value]="2">中級</mat-button-toggle>
Expand All @@ -106,7 +106,7 @@ <h3>その他の依存関係</h3>
<mat-checkbox
(change)="options[option.id] = $event.checked; showUpdatePath()"
[checked]="options[option.id]"
>{{option.name}} {{option.description}}を使用しています</mat-checkbox
>{{ option.name }} {{ option.description }}を使用しています</mat-checkbox
>
</div>
}
Expand Down Expand Up @@ -137,19 +137,21 @@ <h4>パッケージマネージャー</h4>
<!-- RECOMMENDATIONS SECTION -->

@if (
beforeRecommendations.length > 0 || duringRecommendations.length > 0 || afterRecommendations.length > 0
beforeRecommendations.length > 0 ||
duringRecommendations.length > 0 ||
afterRecommendations.length > 0
) {
<div class="recommendations">
<h2>{{title()}}</h2>
<h2>{{ title() }}</h2>

<h3>アップデート前</h3>
@for (r of beforeRecommendations; track $index) {
@for (r of beforeRecommendations; track $index) {
<div class="adev-recommendation-item">
<mat-checkbox />
<div class="adev-recommendation-content">
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{getComplexityLevelName(r.level)}}
{{ getComplexityLevelName(r.level) }}
</span>
</div>
</div>
Expand All @@ -173,7 +175,7 @@ <h3>新しいバージョンにアップデートする</h3>
<div class="adev-recommendation-content">
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{getComplexityLevelName(r.level)}}
{{ getComplexityLevelName(r.level) }}
</span>
</div>
</div>
Expand All @@ -191,7 +193,7 @@ <h3>アップデート後</h3>
<div class="adev-recommendation-content">
<div [innerHTML]="r.renderedStep"></div>
<span class="adev-complexity-badge" [class]="'adev-complexity-' + r.level">
{{getComplexityLevelName(r.level)}}
{{ getComplexityLevelName(r.level) }}
</span>
</div>
</div>
Expand Down
15 changes: 10 additions & 5 deletions adev-ja/src/app/routing/sub-navigation-data.en.ts
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/forms/signals/comparison',
contentPath: 'guide/forms/signals/comparison',
},
{
label: 'Migrating from Legacy Forms',
path: 'guide/forms/signals/migration',
contentPath: 'guide/forms/signals/migration',
},
],
},
{
Expand Down Expand Up @@ -618,11 +623,6 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/testing/utility-apis',
contentPath: 'guide/testing/utility-apis',
},
{
label: 'Zone.js Testing Utilities',
path: 'guide/testing/zone-js-testing-utilities',
contentPath: 'guide/testing/zone-js-testing-utilities',
},
{
label: 'Component harnesses overview',
path: 'guide/testing/component-harnesses-overview',
Expand Down Expand Up @@ -653,6 +653,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/testing/karma',
contentPath: 'guide/testing/karma',
},
{
label: 'Zone.js Testing Utilities',
path: 'guide/testing/zone-js-testing-utilities',
contentPath: 'guide/testing/zone-js-testing-utilities',
},
],
},
{
Expand Down
15 changes: 10 additions & 5 deletions adev-ja/src/app/routing/sub-navigation-data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -475,6 +475,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/forms/signals/comparison',
contentPath: 'guide/forms/signals/comparison',
},
{
label: 'Migrating from Legacy Forms',
path: 'guide/forms/signals/migration',
contentPath: 'guide/forms/signals/migration',
},
],
},
{
Expand Down Expand Up @@ -618,11 +623,6 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/testing/utility-apis',
contentPath: 'guide/testing/utility-apis',
},
{
label: 'Zone.jsテストユーティリティ',
path: 'guide/testing/zone-js-testing-utilities',
contentPath: 'guide/testing/zone-js-testing-utilities',
},
{
label: 'コンポーネントハーネスの概要',
path: 'guide/testing/component-harnesses-overview',
Expand Down Expand Up @@ -653,6 +653,11 @@ const DOCS_SUB_NAVIGATION_DATA: NavigationItem[] = [
path: 'guide/testing/karma',
contentPath: 'guide/testing/karma',
},
{
label: 'Zone.jsテストユーティリティ',
path: 'guide/testing/zone-js-testing-utilities',
contentPath: 'guide/testing/zone-js-testing-utilities',
},
],
},
{
Expand Down
70 changes: 37 additions & 33 deletions adev-ja/src/content/ai/design-patterns.en.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,11 +27,14 @@ storyResource = resource({
loader: ({params}): Promise<StoryData> => {
// The params value is the current value of the storyInput signal
const url = this.endpoint();
return runFlow({ url, input: {
userInput: params,
sessionId: this.storyService.sessionId() // Read from another signal
}});
}
return runFlow({
url,
input: {
userInput: params,
sessionId: this.storyService.sessionId(), // Read from another signal
},
});
},
});
```

Expand All @@ -56,7 +59,7 @@ storyParts = linkedSignal<string[], string[]>({
const existingStoryParts = previous?.value || [];
// Return a new array with the old and new parts
return [...existingStoryParts, ...newStoryParts];
}
},
});
```

Expand Down Expand Up @@ -101,23 +104,23 @@ characters = resource({
// exposed by the Genkit client SDK
const response = streamFlow({
url: '/streamCharacters',
input: 10
input: 10,
});

(async () => {
for await (const chunk of response.stream) {
data.update((prev) => {
if ('value' in prev) {
return { value: `${prev.value} ${chunk}` };
return {value: `${prev.value} ${chunk}`};
} else {
return { error: chunk as unknown as Error };
return {error: chunk as unknown as Error};
}
});
}
})();

return data;
}
},
});
```

Expand All @@ -136,38 +139,39 @@ The `characters` member is updated asynchronously and can be displayed in the te
On the server side, in `server.ts` for example, the defined endpoint sends the data to be streamed to the client. The following code uses Gemini with the Genkit framework but this technique is applicable to other APIs that support streaming responses from LLMs:

```ts
import { startFlowServer } from '@genkit-ai/express';
import { genkit } from "genkit/beta";
import { googleAI, gemini20Flash } from "@genkit-ai/googleai";
import {startFlowServer} from '@genkit-ai/express';
import {genkit} from 'genkit/beta';
import {googleAI, gemini20Flash} from '@genkit-ai/googleai';

const ai = genkit({ plugins: [googleAI()] });
const ai = genkit({plugins: [googleAI()]});

export const streamCharacters = ai.defineFlow({
export const streamCharacters = ai.defineFlow(
{
name: 'streamCharacters',
inputSchema: z.number(),
outputSchema: z.string(),
streamSchema: z.string(),
},
async (count, { sendChunk }) => {
const { response, stream } = ai.generateStream({
model: gemini20Flash,
config: {
temperature: 1,
},
prompt: `Generate ${count} different RPG game characters.`,
});

(async () => {
for await (const chunk of stream) {
sendChunk(chunk.content[0].text!);
}
})();

return (await response).text;
});
async (count, {sendChunk}) => {
const {response, stream} = ai.generateStream({
model: gemini20Flash,
config: {
temperature: 1,
},
prompt: `Generate ${count} different RPG game characters.`,
});

(async () => {
for await (const chunk of stream) {
sendChunk(chunk.content[0].text!);
}
})();

return (await response).text;
},
);

startFlowServer({
flows: [streamCharacters],
});

```
Loading