Author:
    Creation:2025-02-07Last update:2025-06-29

    Nesting / Sub Content Referencing

    How Nesting Works

    In Intlayer, nesting is achieved through the nest function, which allows you to reference and reuse content from another dictionary. Instead of duplicating content, you can point to an existing content module by its key.

    Setting Up Nesting

    To set up nesting in your Intlayer project, you first define the base content that you wish to reuse. Then, in a separate content module, you use the nest function to import that content.

    Base Dictionary

    Below is an example of a base dictionary to nest in another dictionary:

    firstDictionary.content.ts
    import { type Dictionary } from "intlayer";
    
    const firstDictionary = {
      key: "key_of_my_first_dictionary",
      content: {
        content: "content",
        subContent: {
          contentNumber: 0,
          contentString: "string",
        },
      },
    } satisfies Dictionary;
    
    export default firstDictionary;
    

    Referencing with Nest

    Now, create another content module that uses the nest function to reference the above content. You can reference the entire content or a specific nested value:

    secondDictionary.content.ts
    import { nest, type Dictionary } from "intlayer";
    
    const myNestingContent = {
      key: "key_of_my_second_dictionary",
      content: {
        // References the entire dictionary:
        fullNestedContent: nest("key_of_my_first_dictionary"),
        // References a specific nested value:
        partialNestedContent: nest(
          "key_of_my_first_dictionary",
          "subContent.contentNumber"
        ),
      },
    } satisfies Dictionary;
    
    export default myNestingContent;
    

    As second parameter, you can specify a path to a nested value within that content. When no path is provided, the entire content of the referenced dictionary is returned.

    Setting Up Nesting

    To use nested content in a React component, leverage the useIntlayer hook from the react-intlayer package. This hook retrieves the correct content based on the specified key. Here's an example of how to use it:

    **/*.tsx
    import type { FC } from "react";
    import { useIntlayer } from "react-intlayer";
    
    const NestComponent: FC = () => {
      const { fullNestedContent, partialNestedContent } = useIntlayer(
        "key_of_my_second_dictionary"
      );
    
      return (
        <div>
          <p>Full Nested Content: {JSON.stringify(fullNestedContent)}</p>
          <p>Partial Nested Value: {partialNestedContent}</p>
        </div>
      );
    };
    
    export default NestComponent;
    

    To use nested content in Next.js Client Components, retrieve it via the useIntlayer hook. Here's an example:

    **/*.tsx
    "use client";
    
    import type { FC } from "react";
    import { useIntlayer } from "next-intlayer";
    
    const NestComponent: FC = () => {
      const { fullNestedContent, partialNestedContent } = useIntlayer(
        "key_of_my_second_dictionary"
      );
    
      return (
        <div>
          <p>Full Nested Content: {JSON.stringify(fullNestedContent)}</p>
          <p>Partial Nested Value: {partialNestedContent}</p>
        </div>
      );
    };
    
    export default NestComponent;
    

    To use nested content in Vue components, retrieve it via the useIntlayer hook. Here's an example:

    **/*.vue
    <script setup lang="ts">
    import { useIntlayer } from "vue-intlayer";
    
    const { fullNestedContent, partialNestedContent } = useIntlayer(
      "key_of_my_second_dictionary"
    );
    </script>
    
    <template>
      <div>
        <p>Full Nested Content: {{ JSON.stringify(fullNestedContent) }}</p>
        <p>Partial Nested Value: {{ partialNestedContent }}</p>
      </div>
    </template>
    

    To use nested content in Svelte components, retrieve it via the useIntlayer hook. The store is accessed with $. Here's an example:

    **/*.svelte
    <script lang="ts">
    import { useIntlayer } from "svelte-intlayer";
    
    const content = useIntlayer("key_of_my_second_dictionary");
    </script>
    
    <div>
      <p>Full Nested Content: {JSON.stringify($content.fullNestedContent)}</p>
      <p>Partial Nested Value: {$content.partialNestedContent}</p>
    </div>
    

    To use nested content in Preact components, retrieve it via the useIntlayer hook. Here's an example:

    **/*.tsx
    import type { FC } from "preact";
    import { useIntlayer } from "preact-intlayer";
    
    const NestComponent: FC = () => {
      const { fullNestedContent, partialNestedContent } = useIntlayer(
        "key_of_my_second_dictionary"
      );
    
      return (
        <div>
          <p>Full Nested Content: {JSON.stringify(fullNestedContent)}</p>
          <p>Partial Nested Value: {partialNestedContent}</p>
        </div>
      );
    };
    
    export default NestComponent;
    

    To use nested content in SolidJS components, retrieve it via the useIntlayer hook. Here's an example:

    **/*.tsx
    import type { Component } from "solid-js";
    import { useIntlayer } from "solid-intlayer";
    
    const NestComponent: Component = () => {
      const { fullNestedContent, partialNestedContent } = useIntlayer(
        "key_of_my_second_dictionary"
      );
    
      return (
        <div>
          <p>Full Nested Content: {JSON.stringify(fullNestedContent)}</p>
          <p>Partial Nested Value: {partialNestedContent}</p>
        </div>
      );
    };
    
    export default NestComponent;
    

    To use nested content in Angular components, retrieve it via the useIntlayer hook. Here's an example:

    app.component.ts
    import { Component } from "@angular/core";
    import { useIntlayer } from "angular-intlayer";
    
    @Component({
      selector: "app-nest",
      template: `
        <div>
          <p>
            Full Nested Content: {{ JSON.stringify(content().fullNestedContent) }}
          </p>
          <p>Partial Nested Value: {{ content().partialNestedContent }}</p>
        </div>
      `,
    })
    export class NestComponent {
      content = useIntlayer("key_of_my_second_dictionary");
      JSON = JSON;
    }
    

    To use nested content with vanilla-intlayer, retrieve it via the useIntlayer hook. Here's an example:

    **/*.ts
    import { installIntlayer, useIntlayer } from "vanilla-intlayer";
    
    installIntlayer();
    
    const content = useIntlayer("key_of_my_second_dictionary").onChange(
      (newContent) => {
        document.getElementById("nested")!.textContent =
          newContent.partialNestedContent;
      }
    );
    
    // Initial render
    document.getElementById("nested")!.textContent = content.partialNestedContent;
    

    Additional Resources

    For more detailed information on configuration and usage, refer to the following resources:

    These resources provide further insights into the setup and usage of Intlayer in different environments and with various frameworks.