@ -61,5 +61,42 @@ This hook is used to fetch data from the API. We cover this hook in more detail
#### Components
- `<Container>`: This component is a wrapper for the widget. It provides a consistent layout for all widgets.
- `<Block>`: This component is used to display a key-value pair. It takes a label and value as props.
Homepage provides a set of components to help you build your widget UI. These components are designed to provide a consistent layout, and all widgets are expected to use these components.
![Component Sections](/assets/sections.png)
**`<Container>`**
This component is a wrapper for the widget. It provides a consistent layout for all widgets.
```js
<Containerservice={service}></Container>
```
`service` is a prop that is passed to the widget component. It contains information about the service that the widget is displaying.
If there is an error fetching data from the API, the `error` prop can be passed to the `Container` component.
The `label` prop is used to look up the translation key in the translation files. The `value` prop is used to display the value of the block. To learn more about translations, please refer to the [Translations Guide](translations.md).
If there is no data available, the `Block` component can be used to display a placeholder layout.
description: Tips and tricks for translating and localizing Homepage widgets.
---
All text and numerical content in widgets should be translated and localized. English is the default language, and other languages can be added via [Crowdin](https://crowdin.com/project/gethomepage).
The Homepage community prides itself on being multilingual, and we strongly encourage you to add translations for your widgets.
## Translations
Homepage uses the [next-i18next](https://github.com/i18next/next-i18next) library to handle translations. This library provides a set of hooks and utilities to help you localize your widgets, and Homepage has extended this library to support additional features.
=== "component.jsx"
```js
import { useTranslation } from "next-i18next";
import Container from "components/services/widget/container";
import Block from "components/services/widget/block";
export default function Component() {
const { t } = useTranslation();
return (
<Containerservice={service}>
<Blocklabel="yourwidget.key1"/>
<Blocklabel="yourwidget.key2"/>
<Blocklabel="yourwidget.key3"/>
</Container>
);
}
```
=== "en.json"
```json
"yourwidget": {
"key1": "Value 1",
"key2": "Value 2",
"key3": "Value 3"
}
```
## Common Translations
Homepage provides a set of common translations that you can use in your widgets. These translations are used to format numerical content, dates, and other common elements.