Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

docs: Japanese guide #536

Merged
merged 71 commits into from
Mar 24, 2024
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
71 commits
Select commit Hold shift + click to select a range
bb44cbd
Translate overview.md via GitLocalize
coji Feb 29, 2024
d9eab49
Translate README.md via GitLocalize
coji Feb 29, 2024
3331df5
Translate overview.md via GitLocalize
coji Feb 29, 2024
3b96f3e
Translate tutorial.md via GitLocalize
coji Feb 29, 2024
2a394b8
Translate tutorial.md via GitLocalize
coji Feb 29, 2024
0436d65
Translate tutorial.md via GitLocalize
coji Mar 1, 2024
93baa1e
Translate upgrading-v1.md via GitLocalize
coji Mar 1, 2024
c331762
fix: tab to space
coji Mar 1, 2024
8770593
Translate validation.md via GitLocalize
coji Mar 1, 2024
e4d169a
Translate validation.md via GitLocalize
coji Mar 1, 2024
21ef731
convert tab to 2 spaces.
coji Mar 1, 2024
0d45ff5
Translate complex-structures.md via GitLocalize
coji Mar 1, 2024
09b750e
Translate intent-button.md via GitLocalize
coji Mar 1, 2024
9d64e45
Translate accessibility.md via GitLocalize
coji Mar 1, 2024
1f11611
Translate checkbox-and-radio-group.md via GitLocalize
coji Mar 1, 2024
1d99db3
Translate file-upload.md via GitLocalize
coji Mar 1, 2024
fa437cc
Translate remix.md via GitLocalize
coji Mar 1, 2024
3b0117c
Translate nextjs.md via GitLocalize
coji Mar 1, 2024
091bec0
Fix typos and improve readability in Japanese documentation
coji Mar 1, 2024
dc40e30
Translate ui-libraries.md via GitLocalize
coji Mar 2, 2024
0e3b8a7
Translate getFormProps.md via GitLocalize
coji Mar 2, 2024
0d1a56e
Translate useForm.md via GitLocalize
coji Mar 2, 2024
ca4c58c
Translate getInputProps.md via GitLocalize
coji Mar 2, 2024
94a4a7d
Translate getTextareaProps.md via GitLocalize
coji Mar 2, 2024
ec34cb6
Translate getSelectProps.md via GitLocalize
coji Mar 2, 2024
7b1f8ee
Translate parseWithZod.md via GitLocalize
coji Mar 2, 2024
0e4668e
Fix typos and formatting in Japanese documentation
coji Mar 2, 2024
5e62ac9
Translate tutorial.md via GitLocalize
coji Mar 2, 2024
99d1b52
Translate getZodConstraint.md via GitLocalize
coji Mar 2, 2024
4a720d1
Translate conformZodMessage.md via GitLocalize
coji Mar 2, 2024
11cd1f2
Translate getFieldsetProps.md via GitLocalize
coji Mar 2, 2024
ef5d451
Translate getCollectionProps.md via GitLocalize
coji Mar 2, 2024
d58b6f6
Translate FormProvider.md via GitLocalize
coji Mar 2, 2024
fe0fbc5
Translate parseWithZod.md via GitLocalize
coji Mar 2, 2024
a461af9
Translate tutorial.md via GitLocalize
coji Mar 2, 2024
488e514
Translate FormStateInput.md via GitLocalize
coji Mar 2, 2024
830d176
Fix typos and formatting in Japanese API documentation
coji Mar 2, 2024
86744c3
Translate useField.md via GitLocalize
coji Mar 2, 2024
b804161
Translate useInputControl.md via GitLocalize
coji Mar 2, 2024
cce01c0
Translate useFormMetadata.md via GitLocalize
coji Mar 2, 2024
d1aa483
Translate validitystate.md via GitLocalize
coji Mar 2, 2024
4908e7f
Translate parseWithYup.md via GitLocalize
coji Mar 2, 2024
8d1b007
Translate getYupConstraint.md via GitLocalize
coji Mar 2, 2024
a7d7c5d
Translate tutorial.md via GitLocalize
coji Mar 2, 2024
f3dc087
Fix typos and formatting in Japanese API documentation
coji Mar 2, 2024
cb358d0
Translate README.md via GitLocalize
coji Mar 2, 2024
eb1cd55
Update intent button label
coji Mar 2, 2024
b9dd041
Update documentation links
coji Mar 2, 2024
8a6fa59
Update integration descriptions in Japanese documentation
coji Mar 2, 2024
3d5cfbc
Fix typo in getCollectionProps link
coji Mar 2, 2024
2df2b86
Update FormData link to Japanese documentation
coji Mar 2, 2024
1d1e0e6
Fix typos in Japanese README and API documentation
coji Mar 2, 2024
f08ac0c
English version was changed incorrectly and will be reverted.
coji Mar 3, 2024
5c06146
Update login form example integration with Remix
coji Mar 5, 2024
4566622
feat: translate guide menus to Japanese. meta data switch to coji's r…
coji Mar 20, 2024
21e6432
Translate overview.md via GitLocalize
coji Mar 20, 2024
7fa3e7a
Translate overview.md via GitLocalize
coji Mar 20, 2024
9fdaca5
Merge pull request #42 from coji/gitlocalize-28767
coji Mar 20, 2024
18a59e5
Update getCollectionProps.md
coji Mar 20, 2024
9626b88
Update getTextareaProps.md
coji Mar 20, 2024
c3f646f
Update getZodConstraint.md
coji Mar 20, 2024
9486c46
Update getYupConstraint.md
coji Mar 20, 2024
8aac562
Update useField.md
coji Mar 20, 2024
fb23cb5
Update useFormMetadata.md
coji Mar 20, 2024
370e750
Update useInputControl.md
coji Mar 20, 2024
1784229
Update parseWithYup.md
coji Mar 20, 2024
4ed60c9
Merge branch 'edmundhung:main' into feat/guide-in-ja-JP
coji Mar 20, 2024
0484ff4
Merge branch 'edmundhung:main' into feat/guide-in-ja-JP
coji Mar 24, 2024
5b66759
Update owner name in getMetadata function
coji Mar 24, 2024
b583410
Translate intent-button.md via GitLocalize
coji Mar 24, 2024
ba7bb5e
Merge pull request #43 from coji/gitlocalize-28801
coji Mar 24, 2024
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
38 changes: 38 additions & 0 deletions docs/ja/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,38 @@
# Documentation

- はじめに
- [概要](./overview.md)
- [チュートリアル](./tutorial.md)
- [v1 へのアップグレード](./upgrading-v1.md)
- ガイド
- [バリデーション](./validation.md)
- [ネストされたオブジェクトと配列](./complex-structures.md)
- [インテントボタン](./intent-button.md)
- [チェックボックスとラジオグループ](./checkbox-and-radio-group.md)
- [ファイルのアップロード](./file-upload.md)
- [アクセシビリティ](./accessibility.md)
- インテグレーション
- [UI ライブラリ](./integration/ui-libraries.md)
- [Remix](./integration/remix.md)
- [Next.js](./integration/nextjs.md)
- API リファレンス
- @conform-to/react
- [useForm](./api/react/useForm.md)
- [useField](./api/react/useField.md)
- [useFormMetadata](./api/react/useFormMetadata.md)
- [useInputControl](./api/react/useInputControl.md)
- [FormProvider](./api/react/FormProvider.md)
- [FormStateInput](./api/react/FormStateInput.md)
- [getFormProps](./api/react/getFormProps.md)
- [getFieldsetProps](./api/react/getFieldsetProps.md)
- [getInputProps](./api/react/getInputProps.md)
- [getSelectProps](./api/react/getSelectProps.md)
- [getTextareaProps](./api/react/getTextareaProps.md)
- [getCollectionProps](./api/react/getCollectionProps.md)
- @conform-to/yup
- [parseWithYup](./api/yup/parseWithYup.md)
- [getYupConstraint](./api/yup/getYupConstraint.md)
- @conform-to/zod
- [parseWithZod](./api/zod/parseWithZod.md)
- [getZodConstraint](./api/zod/getZodConstraint.md)
- [conformZodMessage](./api/zod/conformZodMessage.md)
183 changes: 183 additions & 0 deletions docs/ja/accessibility.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,183 @@
# アクセシビリティ

フォームをアクセシブルにするには、各フォーム要素を適切な属性で設定する必要がありますが、 Conform がその手助けをします。

## Aria 属性

アクセシビリティに関しては、通常、異なる要素を関連付けるために一意の ID が必要になる Aria 属性が最初に思い浮かびます。Conform は、必要なすべての ID を生成してくれることで、この点でのサポートを提供します。

```tsx
import { useForm } from '@conform-to/react';

function Example() {
const [form, fields] = useForm();

return (
<form id={form.id}>
<label htmlFor={fields.message.id}>Message</label>
<input
type="text"
id={fields.message.id}
name={fields.message.name}
aria-invalid={!fields.message.valid ? true : undefined}
aria-describedby={
!fields.message.valid
? `${fields.message.errorId} ${fields.message.descriptionId}`
: fields.message.descriptionId
}
/>
<div id={fields.message.descriptionId}>The message you want to send</div>
<div id={fields.message.errorId}>{fields.message.errors}</div>
<button>Send</button>
</form>
);
}
```

## バリデーション属性

バリデーション属性も、スクリーンリーダーのヒントを改善するなど、アクセシビリティにおいて重要な役割を果たします。 Conform を使用すると、 zod や yup スキーマからバリデーション属性を導出し、各フィールドのメタデータにそれらを反映させることができます。

```tsx
import { parseWithZod, getZodConstraint } from '@conform-to/zod';
import { useForm } from '@conform-to/react';
import { z } from 'zod';

const schema = z.object({
message: z
.string()
.min(10)
.max(100)
.regex(/^[A-Za-z0-9 ]{10-100}$/),
});

function Example() {
const [form, fields] = useForm({
constraint: getZodConstraint(schema),
onValidate({ formData }) {
return parseWithZod(formData, { schema });
},
});

return (
<form id={form.id}>
<input
type="text"
name={fields.message.name}
required={fields.message.required}
minLength={fields.message.minLength}
maxLength={fields.message.maxLength}
pattern={fields.message.pattern}
/>
<button>Send</button>
</form>
);
}
```

## プログレッシブエンハンスメント

プログレッシブエンハンスメントも、一時的なネットワークの問題の影響を最小限に抑えるなど、アクセシビリティを支援します。たとえば、 Conform を使用すると、ページのリフレッシュをまたいでもフォームデータと状態が保持されるように、フィールドリストを操作できます。

```tsx
import { useForm } from '@conform-to/react';

export default function Example() {
const [form, fields] = useForm();

return (
<form id={form.id}>
<ul>
{tasks.map((task) => (
<li key={task.key}>
<input name={task.name} defaultValue={task.initialValue} />
<button
{...form.remove.getButtonProps({
name: fields.tasks.name,
index,
})}
>
Delete
</button>
</li>
))}
</ul>
<button
{...form.insert.getButtonProps({
name: fields.tasks.name,
})}
>
Add task
</button>
<button>Save</button>
</form>
);
}
```

## ボイラープレートの削減

上記で述べたすべての属性を設定することは、面倒でエラーが発生しやすい作業です。 Conform は 、関連するすべての属性を導出する一連のヘルパーを提供することで、この作業を支援しようとしています。

> 注意: これらすべてのヘルパーはネイティブ HTML 要素用に設計されています。 react-aria-components や Radix UI のようなカスタム UI コンポーネントを使用している場合、それらの API を通じて既に属性が設定されている可能性があるため、これらのヘルパーが不要になるかもしれません。

- [getFormProps](./api/react/getFormProps.md)
- [getFieldsetProps](./api/react/getFieldsetProps.md)
- [getInputProps](./api/react/getInputProps.md)
- [getSelectProps](./api/react/getSelectProps.md)
- [getTextareaProps](./api/react/getTextareaProps.md)
- [getCollectionProps](./api/react/getButtonProps.md)

以下は、手動設定と比較した場合の例です。ヘルパーについて詳しく知りたい場合は、上記リンクの対応するドキュメントを確認してください。

```tsx
import { parseWithZod, getZodConstraint } from '@conform-to/zod';
import { useForm } from '@conform-to/react';
import { z } from 'zod';

const schema = z.object({
message: z
.string()
.min(10)
.max(100)
.regex(/^[A-Za-z0-9 ]{10-100}$/),
});

function Example() {
const [form, fields] = useForm({
constraint: getZodConstraint(schema),
onValidate({ formData }) {
return parseWithZod(formData, { schema });
},
});

return (
<form id={form.id}>
{/* ビフォー */}
<input
type="text"
id={fields.message.id}
name={fields.message.name}
required={fields.message.required}
minLength={fields.message.minLength}
maxLength={fields.message.maxLength}
pattern={fields.message.pattern}
aria-invalid={!fields.message.valid ? true : undefined}
aria-describedby={
!fields.message.valid
? `${fields.message.errorId} ${fields.message.descriptionId}`
: fields.message.descriptionId
}
/>
{/* アフター */}
<input
{...getInputProps(fields.message, {
type: 'text',
ariaDescribedBy: fields.message.descriptionId,
})}
/>
<button>Send</button>
</form>
);
}
```
82 changes: 82 additions & 0 deletions docs/ja/api/react/FormProvider.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,82 @@
# FormProvider

フォームコンテキストのための [Context Provider](https://react.dev/reference/react/createContext#provider) をレンダリングする React コンポーネントです。 [useField](./useField.md) や [useFormMetadata](./useFormMetadata.md) フックを使用したい場合には必須です。

```tsx
import { FormProvider, useForm } from '@conform-to/react';

export default function SomeParent() {
const [form, fields] = useForm();

return <FormProvider context={form.context}>{/* ... */}</FormProvider>;
}
```

## プロパティ

### `context`

フォームコンテキストです。これは [useForm](./useForm.md) で作成され、 `form.context` を通じてアクセスできます。

## Tips

### FormProvider は、フォームの直接の親である必要はありません。

入力が [form 属性](https://developer.mozilla.org/en-US/docs/Web/API/HTMLInputElement#instance_properties_related_to_the_parent_form) を通じて関連付けられている限り、フォームの外部のどこにでも自由に入力を配置できます。

```tsx
function Example() {
const [form, fields] = useForm();
return (
<FormProvider context={form.context}>
<div>
<form id={form.id} />
</div>
<div>
<input name={fields.title.name} form={form.id} />
</div>
</FormProvider>
);
}
```

### FormProvider はネストすることができます

これは、レイアウトの制約のために 1 つのフォームを別のフォームの内部に配置する必要がある場合に便利です。

```tsx
import { FormProvider, useForm } from '@conform-to/react';

function Field({ name, formId }) {
// formId が指定されていない場合、 useField は最も近い FormContext を探します。
const [meta] = useField(name, { formId });

return <input name={meta.name} form={meta.form} />;
}

function Parent() {
const [form, fields] = useForm({ id: 'parent' });
return (
<FormProvider context={form.context}>
<form id={form.id} />

<Field name={fields.category.name} />
<Child />
</FormProvider>
);
}

function Child() {
const [form, fields] = useForm({ id: 'child' });

return (
<FormProvider context={form.context}>
<form id={form.id} />
<Field name={fields.title.name} />

{/* これは代わりに 'id' が 'parent' のフォームコンテキストを探します。 */}
<Field name={fields.bar.name} formId="parent" />
</FormProvider>
);
}
```
27 changes: 27 additions & 0 deletions docs/ja/api/react/FormStateInput.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,27 @@
# FormStateInput

ドキュメントの再読み込みが発生した場合にフォームの状態を維持するために、非表示の入力をレンダリングする React コンポーネントです。

```tsx
import { FormProvider, FormStateInput, useForm } from '@conform-to/react';

export default function SomeParent() {
const [form, fields] = useForm();

return (
<FormProvider context={form.context}>
<FormStateInput />
</FormProvider>
);
}
```

## プロパティ

このコンポーネントはプロパティを受け入れません。

## Tips

### 完全なプログレッシブエンハンスメントを求めている場合にのみ、これが必要です。

ドキュメントが再読み込みされると、フォームの状態の一部が失われます。例えば、 Conform は検証されたフィールドのエラーのみを表示しますが、新しいフィールドをリストに挿入するなど、サブミット以外の意図でフォームを送信している場合、この情報は失われます。 FormStateInput をレンダリングすることで、 Conform はフォームの状態を復元し、検証されたすべてのフィールドのエラーが引き続き表示されることを保証できます。
Loading