# FileTableProviderEditor

> The editor half of a file-backed content source, supplying the writer that generates its table files.

## Definition

* **Type:** Class
* **Namespace:** [Unity.Localization.Editor](/engine/6000.7/script-reference/unity/localization/editor.md)
* **Assembly:** UnityEditor
* **Inherits from:** [AssetProviderEditor](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor.md)

```csharp
public abstract class FileTableProviderEditor : AssetProviderEditor
```

## Remarks

A [FileTableProvider](/engine/6000.7/script-reference/unity/localization/providers/filetables/filetableprovider.md) reads tables from files at runtime, and this generates those files when player data is built. Subclass it, return a writer matching the provider's reader, and register it with an [AssetProviderEditorAttribute](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditorattribute.md) naming the provider type. Without a registered editor the provider's files are never generated and its tables do not resolve in a player.

Additional Resources: [ITableFileWriter](/engine/6000.7/script-reference/unity/localization/editor/itablefilewriter.md), [FileTableProvider](/engine/6000.7/script-reference/unity/localization/providers/filetables/filetableprovider.md)

Register a writer for a custom file format.

## Examples

```csharp
using System.IO;
using System.Text;
using Unity.Localization.Editor;
using Unity.Localization.Providers.FileTables;

namespace Unity.Localization.Samples
{
    public class TextTableWriter : ITableFileWriter
    {
        public static readonly TextTableWriter Instance = new();

        public void Write(ResourceTableData data, Stream stream)
        {
            using var writer = new StreamWriter(stream, new UTF8Encoding(false), 1024, leaveOpen: true);
            writer.WriteLine($"@collection={data.CollectionName}");
            writer.WriteLine($"@guid={data.CollectionGuid}");
            writer.WriteLine($"@locale={data.LocaleCode}");
            foreach (var entry in data.Entries)
            {
                if (entry != null && !string.IsNullOrEmpty(entry.Key))
                    writer.WriteLine($"{entry.Key}={entry.Value}");
            }
        }
    }

    // Registering the editor for the provider type is what makes Unity generate the files at build time.
    [AssetProviderEditor(typeof(TextResourceProvider))]
    public class TextResourceProviderEditor : FileTableProviderEditor
    {
        public override ITableFileWriter Writer => TextTableWriter.Instance;
    }
}
```

## Properties

| Property                                                                                              | Description                                                             |
| ----------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [Writer](/engine/6000.7/script-reference/unity/localization/editor/filetableprovidereditor/writer.md) | The writer that turns a table snapshot into the provider's file format. |

## Methods

| Method                                                                                                                            | Description                                                             |
| --------------------------------------------------------------------------------------------------------------------------------- | ----------------------------------------------------------------------- |
| [ClearRegistrations](/engine/6000.7/script-reference/unity/localization/editor/filetableprovidereditor/clearregistrations.md)     | Drops every collection the provider records.                            |
| [RegisterCollection](/engine/6000.7/script-reference/unity/localization/editor/filetableprovidereditor/registercollection.md)     | Records a collection so the provider serves its table files at runtime. |
| [UnregisterCollection](/engine/6000.7/script-reference/unity/localization/editor/filetableprovidereditor/unregistercollection.md) | Drops a collection so the provider stops serving its table files.       |

## Inheritance

**Inherited Members:**

* [AssetProviderEditor.EnumerateCollections(IAssetProvider)](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor/enumeratecollections.md)
* [AssetProviderEditor.SetLocaleEnabled(IAssetProvider, Locale, bool)](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor/setlocaleenabled.md)
* [AssetProviderEditor.RegisterTable(IAssetProvider, ResourceTableCollection, ResourceTable)](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor/registertable.md)
* [AssetProviderEditor.UnregisterTable(IAssetProvider, ResourceTableCollection, ResourceTable)](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor/unregistertable.md)
* [AssetProviderEditor.CreateReference(ResourceTableCollection)](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor/createreference.md)
* [AssetProviderEditor.ClaimsPath(string)](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor/claimspath.md)
* [AssetProviderEditor.TableAddress(ResourceTableCollection, ResourceTable)](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor/tableaddress.md)
* [AssetProviderEditor.GuidTableAddress(ResourceTableCollection, ResourceTable)](/engine/6000.7/script-reference/unity/localization/editor/assetprovidereditor/guidtableaddress.md)
