From b7b43c46267eded25da88849df754d40b3dfeba7 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Fri, 27 Mar 2026 11:47:06 +0900 Subject: [PATCH 1/6] fix group dup --- .../flare/ui/screen/home/GroupConfigScreen.kt | 183 +++++++----------- .../flare/ui/screen/home/GroupConfigScreen.kt | 103 +++------- .../flare/UI/Screen/GroupConfigScreen.swift | 90 +++------ .../flare/data/network/nostr/NostrService.kt | 6 +- .../repository/AccountTabSyncCoordinator.kt | 46 ++++- .../ui/presenter/home/GroupConfigPresenter.kt | 115 +++++++++++ .../AccountTabSyncCoordinatorSanitizerTest.kt | 52 +++++ .../home/GroupConfigPresenterTest.kt | 59 ++++++ 8 files changed, 399 insertions(+), 255 deletions(-) create mode 100644 shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt create mode 100644 shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt create mode 100644 shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt diff --git a/app/src/main/java/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt b/app/src/main/java/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt index dab01f083..72d875224 100644 --- a/app/src/main/java/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt +++ b/app/src/main/java/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt @@ -51,10 +51,8 @@ import dev.dimension.flare.R import dev.dimension.flare.data.model.IconType import dev.dimension.flare.data.model.MixedTimelineTabItem import dev.dimension.flare.data.model.TabItem -import dev.dimension.flare.data.model.TabMetaData import dev.dimension.flare.data.model.TimelineTabItem import dev.dimension.flare.data.model.TitleType -import dev.dimension.flare.data.repository.SettingsRepository import dev.dimension.flare.model.AccountType import dev.dimension.flare.ui.component.BackButton import dev.dimension.flare.ui.component.FAIcon @@ -68,11 +66,9 @@ import dev.dimension.flare.ui.screen.settings.TabCustomItem import dev.dimension.flare.ui.theme.screenHorizontalPadding import dev.dimension.flare.ui.theme.segmentedShapes2 import kotlinx.collections.immutable.toImmutableList -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.launch import moe.tlaster.precompose.molecule.producePresenter -import org.koin.compose.koinInject import sh.calvin.reorderable.rememberReorderableLazyListState +import dev.dimension.flare.ui.presenter.home.GroupConfigPresenter as SharedGroupConfigPresenter @OptIn(ExperimentalMaterial3Api::class, ExperimentalFoundationApi::class) @Composable @@ -167,14 +163,14 @@ internal fun GroupConfigScreen( elevation = CardDefaults.elevatedCardElevation(defaultElevation = 3.dp), ) { LazyVerticalGrid(columns = GridCells.FixedSize(48.dp)) { - items(state.availableIcons) { icon -> + items(state.availableIcons) { selectedIcon -> TabIcon( accountType = AccountType.Guest, - icon = icon, + icon = selectedIcon, title = TitleType.Text(state.name.text.toString()), modifier = Modifier.padding(4.dp).clickable { - state.setIcon(icon) + state.setIcon(selectedIcon) state.setShowIconPicker(false) }, size = 48.dp, @@ -246,128 +242,95 @@ internal fun GroupConfigScreen( state.addTab(tabItem) } }, - onDeleteTab = { key -> state.deleteTab(key) }, + onDeleteTab = state::deleteTab, toAddRssSource = toAddRssSource, ) } } @Composable -private fun GroupConfigPresenter( - initialItem: MixedTimelineTabItem?, - repository: SettingsRepository = koinInject(), - appScope: CoroutineScope = koinInject(), -) = run { - val name = - rememberTextFieldState( - initialItem?.metaData?.title?.let { - when (it) { - is TitleType.Text -> it.content - is TitleType.Localized -> "" // Or resolve string resource if possible +private fun GroupConfigPresenter(initialItem: MixedTimelineTabItem?) = + run { + val sharedState = remember { SharedGroupConfigPresenter() }.invoke() + val name = + rememberTextFieldState( + initialItem?.metaData?.title?.let { + when (it) { + is TitleType.Text -> it.content + is TitleType.Localized -> "" + } + } ?: "", + ) + var icon by remember(initialItem) { + mutableStateOf(initialItem?.metaData?.icon ?: IconType.Material(dev.dimension.flare.ui.model.UiIcon.Rss)) + } + val tabs = + remember(initialItem) { + mutableStateListOf().apply { + initialItem + ?.subTimelineTabItem + ?.distinctBy { it.key } + ?.let(::addAll) } - } ?: "", - ) - - var icon by remember { - mutableStateOf(initialItem?.metaData?.icon ?: IconType.Material(dev.dimension.flare.ui.model.UiIcon.Rss)) - } - - val tabs = - remember { - mutableStateListOf().apply { - initialItem?.subTimelineTabItem?.let { addAll(it) } } - } + var showAddTab by remember { mutableStateOf(false) } + var showIconPicker by remember { mutableStateOf(false) } + val allTabs = remember { AllTabsPresenter(filterIsTimeline = true) }.invoke() - var showAddTab by remember { mutableStateOf(false) } - var showIconPicker by remember { mutableStateOf(false) } - val allTabs = remember { AllTabsPresenter(filterIsTimeline = true) }.invoke() + object { + val name = name + val icon = icon + val tabs = tabs + val showAddTab = showAddTab + val showIconPicker = showIconPicker + val allTabs = allTabs + val availableIcons = sharedState.availableIcons - object { - val name = name - val icon = icon - val tabs = tabs - val showAddTab = showAddTab - val showIconPicker = showIconPicker - val allTabs = allTabs - val availableIcons = - dev.dimension.flare.ui.model.UiIcon.entries - .map { IconType.Material(it) } - - fun setIcon(newIcon: IconType) { - icon = newIcon - } - - fun setShowIconPicker(show: Boolean) { - showIconPicker = show - } + fun setIcon(value: IconType) { + icon = value + } - fun setAddTab(show: Boolean) { - showAddTab = show - } + fun setAddTab(show: Boolean) { + showAddTab = show + } - fun addTab(tab: TimelineTabItem) { - if (tabs.none { it.key == tab.key }) { - tabs.add(tab) + fun setShowIconPicker(show: Boolean) { + showIconPicker = show } - } - fun deleteTab(tab: TabItem) { - tabs.removeIf { it.key == tab.key } - } + fun addTab(tab: TimelineTabItem) { + if (tabs.none { it.key == tab.key }) { + tabs.add(tab) + } + } - fun deleteTab(key: String) { - tabs.removeIf { it.key == key } - } + fun deleteTab(tab: TabItem) { + tabs.removeIf { it.key == tab.key } + } - fun moveTab( - from: Any, - to: Any, - ) { - val fromIndex = tabs.indexOfFirst { it.key == from } - val toIndex = tabs.indexOfFirst { it.key == to } - if (fromIndex != -1 && toIndex != -1) { - tabs.add(toIndex, tabs.removeAt(fromIndex)) + fun deleteTab(key: String) { + tabs.removeIf { it.key == key } } - } - fun commit() { - appScope.launch { - if (tabs.isEmpty()) { - if (initialItem != null) { - repository.updateTabSettings { - val currentTabs = mainTabs.toMutableList() - currentTabs.removeIf { it.key == initialItem.key } - copy(mainTabs = currentTabs) - } - } - return@launch + fun moveTab( + from: Any, + to: Any, + ) { + val fromIndex = tabs.indexOfFirst { it.key == from } + val toIndex = tabs.indexOfFirst { it.key == to } + if (fromIndex != -1 && toIndex != -1) { + tabs.add(toIndex, tabs.removeAt(fromIndex)) } - val newGroup = - MixedTimelineTabItem( - subTimelineTabItem = tabs.toList(), - metaData = - TabMetaData( - title = TitleType.Text(name.text.toString().ifEmpty { "Group" }), - icon = icon, - ), - ) + } - repository.updateTabSettings { - val currentTabs = mainTabs.toMutableList() - if (initialItem != null) { - // Edit existing - val index = currentTabs.indexOfFirst { it.key == initialItem.key } - if (index != -1) { - currentTabs[index] = newGroup - } - } else { - // Create new - currentTabs.add(newGroup) - } - copy(mainTabs = currentTabs) - } + fun commit() { + sharedState.commit( + initialItem = initialItem, + name = name.text.toString(), + icon = icon, + tabs = tabs.toList(), + defaultGroupName = "Group", + ) } } } -} diff --git a/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt b/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt index 2e5b3d529..8db0ec343 100644 --- a/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt +++ b/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt @@ -42,10 +42,8 @@ import dev.dimension.flare.Res import dev.dimension.flare.data.model.IconType import dev.dimension.flare.data.model.MixedTimelineTabItem import dev.dimension.flare.data.model.TabItem -import dev.dimension.flare.data.model.TabMetaData import dev.dimension.flare.data.model.TimelineTabItem import dev.dimension.flare.data.model.TitleType -import dev.dimension.flare.data.repository.SettingsRepository import dev.dimension.flare.model.AccountType import dev.dimension.flare.tab_settings_add import dev.dimension.flare.tab_settings_drag @@ -69,13 +67,11 @@ import io.github.composefluent.component.SubtleButton import io.github.composefluent.component.Text import io.github.composefluent.component.TextField import kotlinx.collections.immutable.toImmutableList -import kotlinx.coroutines.CoroutineScope -import kotlinx.coroutines.launch import moe.tlaster.precompose.molecule.producePresenter import org.jetbrains.compose.resources.stringResource -import org.koin.compose.koinInject import sh.calvin.reorderable.ReorderableItem import sh.calvin.reorderable.rememberReorderableLazyListState +import dev.dimension.flare.ui.presenter.home.GroupConfigPresenter as SharedGroupConfigPresenter @Composable internal fun GroupConfigScreen( @@ -84,9 +80,7 @@ internal fun GroupConfigScreen( ) { val haptics = LocalHapticFeedback.current val defaultGroupName = stringResource(Res.string.tab_settings_group_default_name) - val state by producePresenter(key = item?.key ?: "new_group") { - GroupConfigPresenter(item, defaultGroupName) - } + val state by producePresenter(key = item?.key ?: "new_group") { GroupConfigPresenter(item, defaultGroupName) } DisposableEffect(Unit) { onDispose { @@ -152,14 +146,14 @@ internal fun GroupConfigScreen( columns = GridCells.FixedSize(48.dp), modifier = Modifier.heightIn(max = 300.dp).widthIn(max = 300.dp), ) { - items(state.availableIcons) { icon -> + items(state.availableIcons) { selectedIcon -> TabIcon( accountType = AccountType.Guest, - icon = icon, + icon = selectedIcon, title = TitleType.Text(state.name.text.toString()), modifier = Modifier.padding(4.dp).clickable { - state.setIcon(icon) + state.setIcon(selectedIcon) state.setShowIconPicker(false) }, size = 48.dp, @@ -204,7 +198,7 @@ internal fun GroupConfigScreen( } } - itemsIndexed(state.tabs, key = { _, item -> item.key }) { index, item -> + itemsIndexed(state.tabs, key = { _, item -> item.key }) { _, item -> ReorderableItem(reorderableLazyColumnState, key = item.key) { isDragging -> CardExpanderItem( heading = { @@ -262,7 +256,7 @@ internal fun GroupConfigScreen( state.addTab(tabItem) } }, - onDeleteTab = { key -> state.deleteTab(key) }, + onDeleteTab = state::deleteTab, toAddRssSource = toAddRssSource, ) } @@ -271,9 +265,8 @@ internal fun GroupConfigScreen( private fun GroupConfigPresenter( initialItem: MixedTimelineTabItem?, defaultGroupName: String, - repository: SettingsRepository = koinInject(), - appScope: CoroutineScope = koinInject(), ) = run { + val sharedState = remember { SharedGroupConfigPresenter() }.invoke() val name = rememberTextFieldState( initialItem?.metaData?.title?.let { @@ -283,20 +276,18 @@ private fun GroupConfigPresenter( } } ?: "", ) - - var icon by remember { - mutableStateOf( - initialItem?.metaData?.icon ?: IconType.Material(dev.dimension.flare.ui.model.UiIcon.Rss), - ) + var icon by remember(initialItem) { + mutableStateOf(initialItem?.metaData?.icon ?: IconType.Material(dev.dimension.flare.ui.model.UiIcon.Rss)) } - val tabs = - remember { + remember(initialItem) { mutableStateListOf().apply { - initialItem?.subTimelineTabItem?.let { addAll(it) } + initialItem + ?.subTimelineTabItem + ?.distinctBy { it.key } + ?.let(::addAll) } } - var showAddTab by remember { mutableStateOf(false) } var showIconPicker by remember { mutableStateOf(false) } val allTabs = remember { AllTabsPresenter(filterIsTimeline = true) }.invoke() @@ -308,22 +299,20 @@ private fun GroupConfigPresenter( val showAddTab = showAddTab val showIconPicker = showIconPicker val allTabs = allTabs - val availableIcons = - dev.dimension.flare.ui.model.UiIcon.entries - .map { IconType.Material(it) } - - fun setIcon(newIcon: IconType) { - icon = newIcon - } + val availableIcons = sharedState.availableIcons - fun setShowIconPicker(show: Boolean) { - showIconPicker = show + fun setIcon(value: IconType) { + icon = value } fun setAddTab(show: Boolean) { showAddTab = show } + fun setShowIconPicker(show: Boolean) { + showIconPicker = show + } + fun addTab(tab: TimelineTabItem) { if (tabs.none { it.key == tab.key }) { tabs.add(tab) @@ -350,47 +339,13 @@ private fun GroupConfigPresenter( } fun commit() { - appScope.launch { - val groupName = name.text.toString() - - if (tabs.isEmpty()) { - if (initialItem != null) { - repository.updateTabSettings { - val currentTabs = mainTabs.toMutableList() - currentTabs.removeIf { it.key == initialItem.key } - copy(mainTabs = currentTabs) - } - } else { - // New group is empty, don't create it - } - return@launch - } - - val newGroup = - MixedTimelineTabItem( - subTimelineTabItem = tabs.toList(), - metaData = - TabMetaData( - title = TitleType.Text(groupName.ifEmpty { defaultGroupName }), - icon = icon, - ), - ) - - repository.updateTabSettings { - val currentTabs = mainTabs.toMutableList() - if (initialItem != null) { - // Edit existing - val index = currentTabs.indexOfFirst { it.key == initialItem.key } - if (index != -1) { - currentTabs[index] = newGroup - } - } else { - // Create new - currentTabs.add(newGroup) - } - copy(mainTabs = currentTabs) - } - } + sharedState.commit( + initialItem = initialItem, + name = name.text.toString(), + icon = icon, + tabs = tabs.toList(), + defaultGroupName = defaultGroupName, + ) } } } diff --git a/iosApp/flare/UI/Screen/GroupConfigScreen.swift b/iosApp/flare/UI/Screen/GroupConfigScreen.swift index 90c8b06d2..9b4a793e9 100644 --- a/iosApp/flare/UI/Screen/GroupConfigScreen.swift +++ b/iosApp/flare/UI/Screen/GroupConfigScreen.swift @@ -5,18 +5,27 @@ import SwiftUIBackports struct GroupConfigScreen: View { @Environment(\.dismiss) private var dismiss let item: MixedTimelineTabItem? - @State private var name: String @State private var icon: IconType @State private var tabs: [TimelineTabItem] @State private var showAddTabSheet = false @State private var showIconPicker = false - + @StateObject private var presenter: KotlinPresenter + init(item: MixedTimelineTabItem? = nil) { self.item = item _name = State(initialValue: item?.metaData.title.text ?? "") _icon = State(initialValue: item?.metaData.icon ?? IconType.Material(icon: .rss)) - _tabs = State(initialValue: item?.subTimelineTabItem ?? []) + _tabs = State(initialValue: Array((item?.subTimelineTabItem ?? []).reduce(into: [TimelineTabItem]()) { result, tab in + if !result.contains(where: { $0.key == tab.key }) { + result.append(tab) + } + })) + _presenter = StateObject( + wrappedValue: KotlinPresenter( + presenter: GroupConfigPresenter() + ) + ) } var body: some View { @@ -69,9 +78,7 @@ struct GroupConfigScreen: View { selectedTabs: tabs, filterIsTimeline: true, onDelete: { tab in - if let index = tabs.firstIndex(where: { $0.key == tab.key }) { - tabs.remove(at: index) - } + tabs.removeAll { $0.key == tab.key } }, onAdd: { tab in if let timelineTab = tab as? TimelineTabItem { @@ -85,7 +92,10 @@ struct GroupConfigScreen: View { } .sheet(isPresented: $showIconPicker) { NavigationStack { - IconPicker(selectedIcon: $icon) + IconPicker( + selectedIcon: icon, + onSelect: { icon = $0 } + ) } } .toolbar { @@ -105,12 +115,18 @@ struct GroupConfigScreen: View { } ToolbarItem(placement: .confirmationAction) { Button { - save() + presenter.state.commit( + initialItem: item, + name: name, + icon: icon, + tabs: tabs, + defaultGroupName: NSLocalizedString("tab_settings_group_default_name", comment: "") + ) dismiss() } label: { Image(.faCheck) } - .disabled(tabs.isEmpty && item == nil) // Disable save if new group is empty + .disabled(tabs.isEmpty && item == nil) } } } @@ -122,62 +138,12 @@ struct GroupConfigScreen: View { func delete(at offsets: IndexSet) { tabs.remove(atOffsets: offsets) } - - @StateObject private var presenter = KotlinPresenter(presenter: SettingsPresenter()) - - func save() { - let text = name - let currentTabs = tabs - let currentIcon = icon - let isNew = item == nil - let itemKey = item?.key - - presenter.state.updateTabSettings { current in - var mainTabs = current.mainTabs - - if isNew { - if currentTabs.isEmpty { return current } - let newGroup = MixedTimelineTabItem( - subTimelineTabItem: currentTabs, - metaData: TabMetaData( - title: TitleType.Text(content: text.isEmpty ? NSLocalizedString("tab_settings_group_default_name", comment: "") : text), - icon: currentIcon - ) - ) - mainTabs.append(newGroup) - } else { - if currentTabs.isEmpty { - // Delete group if empty - if let index = mainTabs.firstIndex(where: { $0.key == itemKey }) { - mainTabs.remove(at: index) - } - } else { - // Update group - if let index = mainTabs.firstIndex(where: { $0.key == itemKey }) { - let updatedGroup = MixedTimelineTabItem( - subTimelineTabItem: currentTabs, - metaData: TabMetaData( - title: TitleType.Text(content: text.isEmpty ? NSLocalizedString("tab_settings_group_default_name", comment: "") : text), - icon: currentIcon - ) - ) - mainTabs[index] = updatedGroup - } - } - } - - return current.doCopy( - secondaryItems: current.secondaryItems, - enableMixedTimeline: current.enableMixedTimeline, - mainTabs: mainTabs - ) - } - } } struct IconPicker: View { @Environment(\.dismiss) private var dismiss - @Binding var selectedIcon: IconType + let selectedIcon: IconType + let onSelect: (IconType) -> Void let availableIcons: [IconType] = UiIcon.allCases.map { IconType.Material(icon: $0) } @@ -188,7 +154,7 @@ struct IconPicker: View { TabIcon(icon: item, accountType: AccountType.Guest.shared, size: 48) .padding(4) .onTapGesture { - selectedIcon = item + onSelect(item) dismiss() } } diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt index e312995bc..06f4c2e7f 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/network/nostr/NostrService.kt @@ -25,9 +25,6 @@ import dev.dimension.flare.ui.render.toUi import dev.dimension.flare.ui.render.toUiPlainText import dev.dimension.flare.ui.render.uiRichTextOf import dev.dimension.flare.ui.route.DeeplinkRoute -import kotlin.time.Clock -import kotlin.time.Duration.Companion.minutes -import kotlin.time.Instant import kotlinx.collections.immutable.persistentListOf import kotlinx.collections.immutable.toImmutableList import kotlinx.collections.immutable.toImmutableMap @@ -37,6 +34,9 @@ import kotlinx.coroutines.coroutineScope import kotlinx.coroutines.sync.Mutex import kotlinx.coroutines.sync.withLock import rust.nostr.sdk.Client +import kotlin.time.Clock +import kotlin.time.Duration.Companion.minutes +import kotlin.time.Instant import rust.nostr.sdk.Contact as RustContact import rust.nostr.sdk.EventBuilder as RustEventBuilder import rust.nostr.sdk.EventDeletionRequest as RustEventDeletionRequest diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt index 58d6b878a..a51658a94 100644 --- a/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinator.kt @@ -39,7 +39,7 @@ internal class AccountTabSyncCoordinator( .first() .mapTo(linkedSetOf()) { it.accountKey } settingsRepository.updateTabSettings { - cleanupForExistingAccounts(existingAccounts) + cleanupForExistingAccounts(existingAccounts).sanitizeDuplicateTabKeys() } } @@ -52,17 +52,18 @@ internal class AccountTabSyncCoordinator( val newTabs = (mainTabs + defaultTabs) .distinctBy { it.key } - if (newTabs == mainTabs) { + val newSettings = copy(mainTabs = newTabs).sanitizeDuplicateTabKeys() + if (newSettings == this) { this } else { - copy(mainTabs = newTabs) + newSettings } } } private suspend fun removeTabsForAccount(accountKey: MicroBlogKey) { settingsRepository.updateTabSettings { - cleanupForExistingAccounts(setOf(accountKey), retainAccounts = false) + cleanupForExistingAccounts(setOf(accountKey), retainAccounts = false).sanitizeDuplicateTabKeys() } } @@ -74,7 +75,7 @@ internal class AccountTabSyncCoordinator( mainTabs .mapNotNull { tab -> tab.cleanup(accountKeys, retainAccounts) - } + }.distinctBy { it.key } return if (newTabs == mainTabs) { this } else { @@ -92,7 +93,8 @@ internal class AccountTabSyncCoordinator( subTimelineTabItem .mapNotNull { it.cleanup(accountKeys, retainAccounts) - }.toImmutableList() + }.distinctBy { it.key } + .toImmutableList() if (cleanedSubTabs.isEmpty()) { null } else if (cleanedSubTabs == subTimelineTabItem) { @@ -113,3 +115,35 @@ internal class AccountTabSyncCoordinator( } } } + +internal fun TabSettings.sanitizeDuplicateTabKeys(): TabSettings { + val sanitizedTabs = + mainTabs + .mapNotNull { it.sanitizeDuplicateTabKeys() } + .distinctBy { it.key } + return if (sanitizedTabs == mainTabs) { + this + } else { + copy(mainTabs = sanitizedTabs) + } +} + +private fun TimelineTabItem.sanitizeDuplicateTabKeys(): TimelineTabItem? = + when (this) { + is MixedTimelineTabItem -> { + val sanitizedSubTabs = + subTimelineTabItem + .mapNotNull { it.sanitizeDuplicateTabKeys() } + .distinctBy { it.key } + .toImmutableList() + if (sanitizedSubTabs.isEmpty()) { + null + } else if (sanitizedSubTabs == subTimelineTabItem) { + this + } else { + copy(subTimelineTabItem = sanitizedSubTabs) + } + } + + else -> this + } diff --git a/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt b/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt new file mode 100644 index 000000000..ba1e79d57 --- /dev/null +++ b/shared/src/commonMain/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenter.kt @@ -0,0 +1,115 @@ +package dev.dimension.flare.ui.presenter.home + +import androidx.compose.runtime.Composable +import androidx.compose.runtime.Immutable +import androidx.compose.runtime.remember +import dev.dimension.flare.data.model.IconType +import dev.dimension.flare.data.model.MixedTimelineTabItem +import dev.dimension.flare.data.model.TabMetaData +import dev.dimension.flare.data.model.TabSettings +import dev.dimension.flare.data.model.TimelineTabItem +import dev.dimension.flare.data.model.TitleType +import dev.dimension.flare.data.repository.SettingsRepository +import dev.dimension.flare.data.repository.sanitizeDuplicateTabKeys +import dev.dimension.flare.ui.model.UiIcon +import dev.dimension.flare.ui.presenter.PresenterBase +import kotlinx.collections.immutable.ImmutableList +import kotlinx.collections.immutable.toImmutableList +import kotlinx.coroutines.CoroutineScope +import kotlinx.coroutines.launch +import org.koin.core.component.KoinComponent +import org.koin.core.component.inject + +public class GroupConfigPresenter : + PresenterBase(), + KoinComponent { + private val settingsRepository: SettingsRepository by inject() + private val appScope: CoroutineScope by inject() + + @Composable + override fun body(): State { + val availableIcons = + remember { + UiIcon.entries.map { IconType.Material(it) }.toImmutableList() + } + + return object : State { + override val availableIcons: ImmutableList = availableIcons + + override fun commit( + initialItem: MixedTimelineTabItem?, + name: String, + icon: IconType, + tabs: List, + defaultGroupName: String, + ) { + appScope.launch { + settingsRepository.updateTabSettings { + upsertGroupConfig( + initialItem = initialItem, + name = name, + icon = icon, + tabs = tabs, + defaultGroupName = defaultGroupName, + ) + } + } + } + } + } + + @Immutable + public interface State { + public val availableIcons: ImmutableList + + public fun commit( + initialItem: MixedTimelineTabItem?, + name: String, + icon: IconType, + tabs: List, + defaultGroupName: String, + ) + } +} + +internal fun TabSettings.upsertGroupConfig( + initialItem: MixedTimelineTabItem?, + name: String, + icon: IconType, + tabs: List, + defaultGroupName: String, +): TabSettings { + val deduplicatedTabs = tabs.distinctBy { it.key } + if (deduplicatedTabs.isEmpty()) { + if (initialItem == null) { + return this + } + val filteredTabs = mainTabs.filterNot { it.key == initialItem.key } + return if (filteredTabs == mainTabs) { + this + } else { + copy(mainTabs = filteredTabs).sanitizeDuplicateTabKeys() + } + } + + val newGroup = + MixedTimelineTabItem( + subTimelineTabItem = deduplicatedTabs, + metaData = + TabMetaData( + title = TitleType.Text(name.ifEmpty { defaultGroupName }), + icon = icon, + ), + ) + val currentTabs = mainTabs.toMutableList() + val targetIndex = + initialItem + ?.let { item -> currentTabs.indexOfFirst { it.key == item.key } } + ?.takeIf { it >= 0 } + ?: currentTabs.size + currentTabs.removeAll { + it.key == newGroup.key || (initialItem != null && it.key == initialItem.key) + } + currentTabs.add(minOf(targetIndex, currentTabs.size), newGroup) + return copy(mainTabs = currentTabs).sanitizeDuplicateTabKeys() +} diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt b/shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt new file mode 100644 index 000000000..5dad471e6 --- /dev/null +++ b/shared/src/commonTest/kotlin/dev/dimension/flare/data/repository/AccountTabSyncCoordinatorSanitizerTest.kt @@ -0,0 +1,52 @@ +package dev.dimension.flare.data.repository + +import dev.dimension.flare.data.model.HomeTimelineTabItem +import dev.dimension.flare.data.model.IconType +import dev.dimension.flare.data.model.ListTimelineTabItem +import dev.dimension.flare.data.model.MixedTimelineTabItem +import dev.dimension.flare.data.model.TabMetaData +import dev.dimension.flare.data.model.TabSettings +import dev.dimension.flare.data.model.TitleType +import dev.dimension.flare.model.AccountType +import dev.dimension.flare.model.MicroBlogKey +import dev.dimension.flare.ui.model.UiIcon +import kotlin.test.Test +import kotlin.test.assertEquals +import kotlin.test.assertIs + +class AccountTabSyncCoordinatorSanitizerTest { + @Test + fun sanitizeDuplicateTabKeysRemovesDuplicateMixedTabsAndSubTabs() { + val accountKey = MicroBlogKey("1872639344760254464", "x.com") + val accountType = AccountType.Specific(accountKey) + val homeTab = HomeTimelineTabItem(accountType) + val listTab = + ListTimelineTabItem( + account = accountType, + listId = "1681353064253640704", + metaData = + TabMetaData( + title = TitleType.Text("list"), + icon = IconType.Material(UiIcon.List), + ), + ) + val mixedTab = + MixedTimelineTabItem( + subTimelineTabItem = listOf(homeTab, homeTab, listTab), + metaData = + TabMetaData( + title = TitleType.Text("엑스"), + icon = IconType.Material(UiIcon.Rss), + ), + ) + + val sanitized = + TabSettings( + mainTabs = listOf(mixedTab, mixedTab), + ).sanitizeDuplicateTabKeys() + + assertEquals(1, sanitized.mainTabs.size) + val sanitizedMixedTab = assertIs(sanitized.mainTabs.single()) + assertEquals(listOf(homeTab.key, listTab.key), sanitizedMixedTab.subTimelineTabItem.map { it.key }) + } +} diff --git a/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt b/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt new file mode 100644 index 000000000..616ff98f1 --- /dev/null +++ b/shared/src/commonTest/kotlin/dev/dimension/flare/ui/presenter/home/GroupConfigPresenterTest.kt @@ -0,0 +1,59 @@ +package dev.dimension.flare.ui.presenter.home + +import dev.dimension.flare.data.model.HomeTimelineTabItem +import dev.dimension.flare.data.model.IconType +import dev.dimension.flare.data.model.ListTimelineTabItem +import dev.dimension.flare.data.model.MixedTimelineTabItem +import dev.dimension.flare.data.model.TabMetaData +import dev.dimension.flare.data.model.TabSettings +import dev.dimension.flare.data.model.TitleType +import dev.dimension.flare.model.AccountType +import dev.dimension.flare.model.MicroBlogKey +import dev.dimension.flare.ui.model.UiIcon +import kotlin.test.Test +import kotlin.test.assertEquals + +class GroupConfigPresenterTest { + @Test + fun upsertGroupConfigReplacesDuplicateKeyInsteadOfAppending() { + val accountKey = MicroBlogKey("1872639344760254464", "x.com") + val accountType = AccountType.Specific(accountKey) + val homeTab = HomeTimelineTabItem(accountType) + val listTab = + ListTimelineTabItem( + account = accountType, + listId = "1681353064253640704", + metaData = + TabMetaData( + title = TitleType.Text("list"), + icon = IconType.Material(UiIcon.List), + ), + ) + val existingGroup = + MixedTimelineTabItem( + subTimelineTabItem = listOf(homeTab, listTab), + metaData = + TabMetaData( + title = TitleType.Text("엑스"), + icon = IconType.Material(UiIcon.Rss), + ), + ) + + val updated = + TabSettings(mainTabs = listOf(existingGroup)) + .upsertGroupConfig( + initialItem = null, + name = "엑스", + icon = IconType.Material(UiIcon.Rss), + tabs = listOf(homeTab, homeTab, listTab), + defaultGroupName = "Group", + ) + + assertEquals(1, updated.mainTabs.size) + assertEquals(existingGroup.key, updated.mainTabs.single().key) + assertEquals( + listOf(homeTab.key, listTab.key), + (updated.mainTabs.single() as MixedTimelineTabItem).subTimelineTabItem.map { it.key }, + ) + } +} From 80da5752c7adc862a1f9e929683ff65b7b48e0c3 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Fri, 27 Mar 2026 11:57:40 +0900 Subject: [PATCH 2/6] add group tab edit --- .../flare/ui/screen/home/GroupConfigScreen.kt | 38 ++++++++++++++++-- .../flare/ui/screen/home/GroupConfigScreen.kt | 40 +++++++++++++++++++ .../flare/UI/Screen/GroupConfigScreen.swift | 16 ++++++++ 3 files changed, 90 insertions(+), 4 deletions(-) diff --git a/app/src/main/java/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt b/app/src/main/java/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt index 72d875224..8c0f27879 100644 --- a/app/src/main/java/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt +++ b/app/src/main/java/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt @@ -61,6 +61,7 @@ import dev.dimension.flare.ui.component.FlareScaffold import dev.dimension.flare.ui.component.TabIcon import dev.dimension.flare.ui.presenter.invoke import dev.dimension.flare.ui.screen.settings.AllTabsPresenter +import dev.dimension.flare.ui.screen.settings.EditTabDialog import dev.dimension.flare.ui.screen.settings.TabAddBottomSheet import dev.dimension.flare.ui.screen.settings.TabCustomItem import dev.dimension.flare.ui.theme.screenHorizontalPadding @@ -86,6 +87,20 @@ internal fun GroupConfigScreen( state.commit() } } + state.selectedEditTab?.let { + EditTabDialog( + tabItem = it, + onDismissRequest = { + state.setEditTab(null) + }, + onConfirm = { updatedTab -> + state.setEditTab(null) + if (updatedTab is TimelineTabItem) { + state.updateTab(updatedTab) + } + }, + ) + } FlareScaffold( topBar = { @@ -221,12 +236,14 @@ internal fun GroupConfigScreen( item = item, shapes = ListItemDefaults.segmentedShapes2(index, state.tabs.size), deleteTab = { state.deleteTab(item) }, - // Child tabs in a group are intentionally not editable from this screen; - // only group-level configuration is supported. - editTab = { }, + editTab = { + if (it is TimelineTabItem) { + state.setEditTab(it) + } + }, reorderableLazyColumnState = reorderableLazyColumnState, canSwipeToDelete = true, - isEditing = false, + isEditing = state.selectedEditTab == item, ) } } @@ -275,6 +292,7 @@ private fun GroupConfigPresenter(initialItem: MixedTimelineTabItem?) = } var showAddTab by remember { mutableStateOf(false) } var showIconPicker by remember { mutableStateOf(false) } + var selectedEditTab by remember { mutableStateOf(null) } val allTabs = remember { AllTabsPresenter(filterIsTimeline = true) }.invoke() object { @@ -283,6 +301,7 @@ private fun GroupConfigPresenter(initialItem: MixedTimelineTabItem?) = val tabs = tabs val showAddTab = showAddTab val showIconPicker = showIconPicker + val selectedEditTab = selectedEditTab val allTabs = allTabs val availableIcons = sharedState.availableIcons @@ -298,6 +317,10 @@ private fun GroupConfigPresenter(initialItem: MixedTimelineTabItem?) = showIconPicker = show } + fun setEditTab(tab: TimelineTabItem?) { + selectedEditTab = tab + } + fun addTab(tab: TimelineTabItem) { if (tabs.none { it.key == tab.key }) { tabs.add(tab) @@ -312,6 +335,13 @@ private fun GroupConfigPresenter(initialItem: MixedTimelineTabItem?) = tabs.removeIf { it.key == key } } + fun updateTab(tab: TimelineTabItem) { + val index = tabs.indexOfFirst { it.key == tab.key } + if (index != -1) { + tabs[index] = tab + } + } + fun moveTab( from: Any, to: Any, diff --git a/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt b/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt index 8db0ec343..01231060d 100644 --- a/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt +++ b/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/GroupConfigScreen.kt @@ -34,6 +34,7 @@ import androidx.compose.ui.unit.dp import compose.icons.FontAwesomeIcons import compose.icons.fontawesomeicons.Solid import compose.icons.fontawesomeicons.solid.Bars +import compose.icons.fontawesomeicons.solid.Pen import compose.icons.fontawesomeicons.solid.Plus import compose.icons.fontawesomeicons.solid.TableList import compose.icons.fontawesomeicons.solid.Trash @@ -87,6 +88,21 @@ internal fun GroupConfigScreen( state.commit() } } + state.selectedEditTab?.let { + EditTabDialog( + visible = true, + tabItem = it, + onDismissRequest = { + state.setEditTab(null) + }, + onConfirm = { updatedTab -> + state.setEditTab(null) + if (updatedTab is TimelineTabItem) { + state.updateTab(updatedTab) + } + }, + ) + } val lazyListState = rememberLazyListState() val reorderableLazyColumnState = @@ -209,6 +225,17 @@ internal fun GroupConfigScreen( }, trailing = { Row { + SubtleButton( + onClick = { + state.setEditTab(item) + }, + iconOnly = true, + ) { + FAIcon( + FontAwesomeIcons.Solid.Pen, + contentDescription = "Edit", + ) + } SubtleButton( onClick = { state.deleteTab(item) @@ -290,6 +317,7 @@ private fun GroupConfigPresenter( } var showAddTab by remember { mutableStateOf(false) } var showIconPicker by remember { mutableStateOf(false) } + var selectedEditTab by remember { mutableStateOf(null) } val allTabs = remember { AllTabsPresenter(filterIsTimeline = true) }.invoke() object { @@ -298,6 +326,7 @@ private fun GroupConfigPresenter( val tabs = tabs val showAddTab = showAddTab val showIconPicker = showIconPicker + val selectedEditTab = selectedEditTab val allTabs = allTabs val availableIcons = sharedState.availableIcons @@ -313,6 +342,10 @@ private fun GroupConfigPresenter( showIconPicker = show } + fun setEditTab(tab: TimelineTabItem?) { + selectedEditTab = tab + } + fun addTab(tab: TimelineTabItem) { if (tabs.none { it.key == tab.key }) { tabs.add(tab) @@ -327,6 +360,13 @@ private fun GroupConfigPresenter( tabs.removeIf { it.key == key } } + fun updateTab(tab: TimelineTabItem) { + val index = tabs.indexOfFirst { it.key == tab.key } + if (index != -1) { + tabs[index] = tab + } + } + fun moveTab( from: Any, to: Any, diff --git a/iosApp/flare/UI/Screen/GroupConfigScreen.swift b/iosApp/flare/UI/Screen/GroupConfigScreen.swift index 9b4a793e9..c7775490b 100644 --- a/iosApp/flare/UI/Screen/GroupConfigScreen.swift +++ b/iosApp/flare/UI/Screen/GroupConfigScreen.swift @@ -10,6 +10,7 @@ struct GroupConfigScreen: View { @State private var tabs: [TimelineTabItem] @State private var showAddTabSheet = false @State private var showIconPicker = false + @State private var editItem: TimelineTabItem? = nil @StateObject private var presenter: KotlinPresenter init(item: MixedTimelineTabItem? = nil) { @@ -64,6 +65,12 @@ struct GroupConfigScreen: View { TabIcon(icon: tab.metaData.icon, accountType: tab.account) } Spacer() + Button { + editItem = tab + } label: { + Image("fa-pen") + } + .buttonStyle(.plain) } } .onMove(perform: move) @@ -98,6 +105,15 @@ struct GroupConfigScreen: View { ) } } + .sheet(item: $editItem) { item in + NavigationStack { + EditTabSheet(onConfirm: { updated in + if let index = tabs.firstIndex(where: { $0.key == updated.key }), let updated = updated as? TimelineTabItem { + tabs[index] = updated + } + }, tabItem: item) + } + } .toolbar { ToolbarItem(placement: .cancellationAction) { Button { From 8763589e0b148fb17e5a8865da435208b3c27c5b Mon Sep 17 00:00:00 2001 From: Tlaster Date: Fri, 27 Mar 2026 12:10:46 +0900 Subject: [PATCH 3/6] update ios add tab design --- iosApp/flare/Localizable.xcstrings | 4537 +++++++++-------- iosApp/flare/UI/Screen/DiscoverScreen.swift | 11 + .../flare/UI/Screen/TabSettingsScreen.swift | 269 +- 3 files changed, 2405 insertions(+), 2412 deletions(-) diff --git a/iosApp/flare/Localizable.xcstrings b/iosApp/flare/Localizable.xcstrings index a2346e72f..b1f988f28 100644 --- a/iosApp/flare/Localizable.xcstrings +++ b/iosApp/flare/Localizable.xcstrings @@ -72,16 +72,16 @@ "value" : "読み込み中" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Laden..." + "value" : "Laster" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Laster" + "value" : "Laden..." } }, "pl" : { @@ -190,13 +190,13 @@ "value" : "%d" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "%d" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "%d" @@ -296,13 +296,13 @@ "value" : "%lld" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "%lld" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "%lld" @@ -420,13 +420,13 @@ "value" : "%1$lld/%2$d" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "%1$lld/%2$d" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "%1$lld/%2$d" @@ -544,13 +544,13 @@ "value" : "%1$lld/%2$lld" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "%1$lld/%2$lld" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "%1$lld/%2$lld" @@ -704,16 +704,16 @@ "value" : "Flare에 대해 더 알아보기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Meer informatie over Flare" + "value" : "Lær mer om Flare" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lær mer om Flare" + "value" : "Meer informatie over Flare" } }, "pl" : { @@ -894,16 +894,16 @@ "value" : "정보" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Informatie" + "value" : "Om" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Om" + "value" : "Informatie" } }, "pl" : { @@ -1048,16 +1048,16 @@ "value" : "フォローリクエストを承認する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Accepteer volgverzoek" + "value" : "Godta følg-forespørsel" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Godta følg-forespørsel" + "value" : "Accepteer volgverzoek" } }, "pl" : { @@ -1184,16 +1184,16 @@ "value" : "アカウントを管理する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beheer je accounts" + "value" : "Administrer kontoene dine" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Administrer kontoene dine" + "value" : "Beheer je accounts" } }, "pl" : { @@ -1314,16 +1314,16 @@ "value" : "アカウント管理" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Account beheer" + "value" : "Konto administrasjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Konto administrasjon" + "value" : "Account beheer" } }, "pl" : { @@ -1444,16 +1444,16 @@ "value" : "アカウント" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rekeningen" + "value" : "Kontoer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kontoer" + "value" : "Rekeningen" } }, "pl" : { @@ -1610,16 +1610,16 @@ "value" : "재시도" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opnieuw" + "value" : "Prøv igjen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Prøv igjen" + "value" : "Opnieuw" } }, "pl" : { @@ -1800,16 +1800,16 @@ "value" : "추가" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toevoegen" + "value" : "Legg til" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til" + "value" : "Toevoegen" } }, "pl" : { @@ -1948,16 +1948,16 @@ "value" : "リレーを追加" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voeg relais toe" + "value" : "Legg til relé" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til relé" + "value" : "Voeg relais toe" } }, "pl" : { @@ -2084,16 +2084,16 @@ "value" : "RSSを追加" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "RSS toevoegen" + "value" : "Legg til RSS" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til RSS" + "value" : "RSS toevoegen" } }, "pl" : { @@ -2220,13 +2220,13 @@ "value" : "AI Type" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "AI Type" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "AI Type" @@ -2386,16 +2386,16 @@ "value" : "AI 설정 구성" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Configureer AI instellingen" + "value" : "Konfigurer AI-innstillinger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Konfigurer AI-innstillinger" + "value" : "Configureer AI instellingen" } }, "pl" : { @@ -2547,16 +2547,16 @@ "value" : "AI 機能" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "AI functies" + "value" : "Egenskaper av AI" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Egenskaper av AI" + "value" : "AI functies" } }, "pl" : { @@ -2714,16 +2714,16 @@ "value" : "서버 URL을 입력하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voer de server-URL in" + "value" : "Skriv inn nettadressen til serveren" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv inn nettadressen til serveren" + "value" : "Voer de server-URL in" } }, "pl" : { @@ -2905,16 +2905,16 @@ "value" : "서버 URL" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Server URL" + "value" : "URL til server" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "URL til server" + "value" : "Server URL" } }, "pl" : { @@ -3095,16 +3095,16 @@ "value" : "AI 요약 기능 활성화" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "AI samenvatting inschakelen" + "value" : "Aktiver AI sammendrag" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiver AI sammendrag" + "value" : "AI samenvatting inschakelen" } }, "pl" : { @@ -3285,16 +3285,16 @@ "value" : "AI 구성" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "AI configuratie" + "value" : "AI Konfigurasjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "AI Konfigurasjon" + "value" : "AI configuratie" } }, "pl" : { @@ -3475,16 +3475,16 @@ "value" : "AI 구성" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "AI configuratie" + "value" : "Aktiver AI-oversettelse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiver AI-oversettelse" + "value" : "AI configuratie" } }, "pl" : { @@ -3665,16 +3665,16 @@ "value" : "발견하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ontdek feeds" + "value" : "Oppdag fôr" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oppdag fôr" + "value" : "Ontdek feeds" } }, "pl" : { @@ -3855,16 +3855,16 @@ "value" : "내 피드" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Mijn feeds" + "value" : "Mine fôr" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mine fôr" + "value" : "Mijn feeds" } }, "pl" : { @@ -4015,16 +4015,16 @@ "value" : "すべてのフィード" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Alle feeds" + "value" : "Alle kanaler" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Alle kanaler" + "value" : "Alle feeds" } }, "pl" : { @@ -4181,16 +4181,16 @@ "value" : "목록" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Klantenlijst" + "value" : "Liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liste" + "value" : "Klantenlijst" } }, "pl" : { @@ -4335,16 +4335,16 @@ "value" : "すべてのRSSフィード" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Alle RSS feeds" + "value" : "Alle RSS-Feeds" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Alle RSS-Feeds" + "value" : "Alle RSS feeds" } }, "pl" : { @@ -4459,13 +4459,13 @@ "value" : "ALT" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "ALT" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "ALT" @@ -4625,13 +4625,13 @@ "value" : "안테나" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Antenne" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Antenne" @@ -4815,13 +4815,13 @@ "value" : "안테나" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Antenne" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Antenne" @@ -4969,16 +4969,16 @@ "value" : "API キー" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "API Sleutel" + "value" : "API-nøkkel (Automatic Translation)" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "API-nøkkel (Automatic Translation)" + "value" : "API Sleutel" } }, "pl" : { @@ -5129,16 +5129,16 @@ "value" : "앱 로깅" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "App logboek" + "value" : "Logg app" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg app" + "value" : "App logboek" } }, "pl" : { @@ -5313,16 +5313,16 @@ "value" : "네트워크 로깅 활성화" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Netwerk loggen inschakelen" + "value" : "Aktiver nettverkslogging" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiver nettverkslogging" + "value" : "Netwerk loggen inschakelen" } }, "pl" : { @@ -5467,16 +5467,16 @@ "value" : "絶対タイムスタンプです" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Absolute tijdstempel" + "value" : "Absolutt tidsstempel" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Absolutt tidsstempel" + "value" : "Absolute tijdstempel" } }, "pl" : { @@ -5603,16 +5603,16 @@ "value" : "投稿に絶対タイムスタンプを表示する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Geef absolute tijdsaanduiding weer bij berichten" + "value" : "Vis absolutte tidsstempler på innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis absolutte tidsstempler på innlegg" + "value" : "Geef absolute tijdsaanduiding weer bij berichten" } }, "pl" : { @@ -5775,16 +5775,16 @@ "value" : "아바타 모양" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vorm avatar" + "value" : "Profilbilde form" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Profilbilde form" + "value" : "Vorm avatar" } }, "pl" : { @@ -5965,16 +5965,16 @@ "value" : "둥글게" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ronde" + "value" : "Rund" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rund" + "value" : "Ronde" } }, "pl" : { @@ -6155,16 +6155,16 @@ "value" : "아바타의 모양을 변경합니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "De vorm van de avatar wijzigen" + "value" : "Endre formen på avataren" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Endre formen på avataren" + "value" : "De vorm van de avatar wijzigen" } }, "pl" : { @@ -6345,16 +6345,16 @@ "value" : "정사각형" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vierkant" + "value" : "Firkant" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Firkant" + "value" : "Vierkant" } }, "pl" : { @@ -6529,16 +6529,16 @@ "value" : "링크 미리보기 표시" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toon linkvoorbeelden" + "value" : "Link forhåndsvisninger i Compat modus" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Link forhåndsvisninger i Compat modus" + "value" : "Toon linkvoorbeelden" } }, "pl" : { @@ -6683,16 +6683,16 @@ "value" : "投稿にシンプルモードでリンクのプレビューを表示する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Geef voorbeeld van de link weer in de vereenvoudiging modus van de post" + "value" : "Vis forhåndsvisning av lenker i forenkle modus i innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis forhåndsvisning av lenker i forenkle modus i innlegget" + "value" : "Geef voorbeeld van de link weer in de vereenvoudiging modus van de post" } }, "pl" : { @@ -6849,16 +6849,16 @@ "value" : "Flare의 모양과 느낌을_customize합니다." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Pas het uiterlijk en gevoel van Flare aan" + "value" : "Tilpass utseendet og følelsen til flare" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tilpass utseendet og følelsen til flare" + "value" : "Pas het uiterlijk en gevoel van Flare aan" } }, "pl" : { @@ -7039,16 +7039,16 @@ "value" : "미디어를 전체 크기로 확장" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Media uitbreiden naar volledige grootte" + "value" : "Utvid media til full størrelse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Utvid media til full størrelse" + "value" : "Media uitbreiden naar volledige grootte" } }, "pl" : { @@ -7223,16 +7223,16 @@ "value" : "타임라인의 미디어 비율 유지" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bewaar het aspect van de media op de tijdlijn" + "value" : "Hold medias erfaring i tidslinje" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hold medias erfaring i tidslinje" + "value" : "Bewaar het aspect van de media op de tijdlijn" } }, "pl" : { @@ -7377,13 +7377,13 @@ "value" : "Font Size" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Font Size" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Font Size" @@ -7513,16 +7513,16 @@ "value" : "横広の投稿" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volledige breedte bericht" + "value" : "Full bredde innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Full bredde innlegg" + "value" : "Volledige breedte bericht" } }, "pl" : { @@ -7649,16 +7649,16 @@ "value" : "投稿を横広く表示する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toon bericht in volledige breedte" + "value" : "Vis innholdet i full bredde" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis innholdet i full bredde" + "value" : "Toon bericht in volledige breedte" } }, "pl" : { @@ -7785,16 +7785,16 @@ "value" : "appearance_post_action_style" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "verschijn_post_action_stijl" + "value" : "Publiser handlingsstil" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Publiser handlingsstil" + "value" : "verschijn_post_action_stijl" } }, "pl" : { @@ -7915,16 +7915,16 @@ "value" : "投稿のアクションのスタイルを変更する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Wijzig de stijl van de actie van het bericht" + "value" : "Endre stilen til innleggets handling" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Endre stilen til innleggets handling" + "value" : "Wijzig de stijl van de actie van het bericht" } }, "pl" : { @@ -8045,13 +8045,13 @@ "value" : "Hidden" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Hidden" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Hidden" @@ -8175,16 +8175,16 @@ "value" : "左揃え" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Links uitgelijnd" + "value" : "Venstre justert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Venstre justert" + "value" : "Links uitgelijnd" } }, "pl" : { @@ -8305,16 +8305,16 @@ "value" : "右揃え" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rechts uitgelijnd" + "value" : "Høyre justert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Høyre justert" + "value" : "Rechts uitgelijnd" } }, "pl" : { @@ -8435,16 +8435,16 @@ "value" : "ストレッチ" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Uitrekken" + "value" : "Strekk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Strekk" + "value" : "Uitrekken" } }, "pl" : { @@ -8601,16 +8601,16 @@ "value" : "링크 미리보기 표시" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toon linkvoorbeelden" + "value" : "Vis forhåndsvisning av lenker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis forhåndsvisning av lenker" + "value" : "Toon linkvoorbeelden" } }, "pl" : { @@ -8755,16 +8755,16 @@ "value" : "投稿にリンクのプレビューを表示する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toon linkvoorbeelden in het bericht" + "value" : "Vis forhåndsvisning av lenker i innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis forhåndsvisning av lenker i innlegget" + "value" : "Toon linkvoorbeelden in het bericht" } }, "pl" : { @@ -8921,16 +8921,16 @@ "value" : "미디어 표시" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Media tonen" + "value" : "Vis media" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis media" + "value" : "Media tonen" } }, "pl" : { @@ -9075,16 +9075,16 @@ "value" : "投稿にメディアを表示する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Media in het bericht weergeven" + "value" : "Vis media i innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis media i innlegget" + "value" : "Media in het bericht weergeven" } }, "pl" : { @@ -9241,16 +9241,16 @@ "value" : "숫자 표시" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Getallen weergeven" + "value" : "Vis tall" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis tall" + "value" : "Getallen weergeven" } }, "pl" : { @@ -9395,16 +9395,16 @@ "value" : "投稿の下部に番号を表示する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Getallen aan de onderkant van het bericht weergeven" + "value" : "Vis tall på bunnen av innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis tall på bunnen av innlegget" + "value" : "Getallen aan de onderkant van het bericht weergeven" } }, "pl" : { @@ -9525,16 +9525,16 @@ "value" : "プラットフォームのロゴを表示" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toon platform logo" + "value" : "Vis plattformlogo" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis plattformlogo" + "value" : "Toon platform logo" } }, "pl" : { @@ -9655,16 +9655,16 @@ "value" : "投稿にソース・プラットフォームのロゴを表示する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toon het bronlogo van het platform op post" + "value" : "Vis logo for kildeplattformplattformen på innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis logo for kildeplattformplattformen på innlegg" + "value" : "Toon het bronlogo van het platform op post" } }, "pl" : { @@ -9821,16 +9821,16 @@ "value" : "민감한 콘텐츠 표시" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gevoelige inhoud weergeven" + "value" : "Vis sensitivt innhold" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis sensitivt innhold" + "value" : "Gevoelige inhoud weergeven" } }, "pl" : { @@ -10005,16 +10005,16 @@ "value" : "상태에서 항상 민감한 콘텐츠 표시" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gevoelige inhoud altijd in status weergeven" + "value" : "Vis alltid sensitivt innhold i innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis alltid sensitivt innhold i innlegget" + "value" : "Gevoelige inhoud altijd in status weergeven" } }, "pl" : { @@ -10195,16 +10195,16 @@ "value" : "테마" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Thema" + "value" : "Tema" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tema" + "value" : "Thema" } }, "pl" : { @@ -10385,16 +10385,16 @@ "value" : "어두운 색" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Donker" + "value" : "Mørk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mørk" + "value" : "Donker" } }, "pl" : { @@ -10575,16 +10575,16 @@ "value" : "앱의 테마 변경" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verander het thema van de app" + "value" : "Endre temaet for appen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Endre temaet for appen" + "value" : "Verander het thema van de app" } }, "pl" : { @@ -10765,16 +10765,16 @@ "value" : "밝은 색" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Licht" + "value" : "Lys" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lys" + "value" : "Licht" } }, "pl" : { @@ -10949,16 +10949,16 @@ "value" : "시스템" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Systeem" + "value" : "Systemadministrasjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Systemadministrasjon" + "value" : "Systeem" } }, "pl" : { @@ -11139,16 +11139,16 @@ "value" : "모양" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Uiterlijk" + "value" : "Utseende" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Utseende" + "value" : "Uiterlijk" } }, "pl" : { @@ -11293,16 +11293,16 @@ "value" : "実験的:クロスプラットフォーム投稿UIを使用" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Experimenteel: Gebruik cross-platform post UI" + "value" : "Eksperimentelt: bruk grensesnittet på kryss-plattformen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Eksperimentelt: bruk grensesnittet på kryss-plattformen" + "value" : "Experimenteel: Gebruik cross-platform post UI" } }, "pl" : { @@ -11423,16 +11423,16 @@ "value" : "Android と Desktop から同じポスト UI コードを使用してください。これは実験的なものであり、将来的に削除される可能性があります。" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruik dezelfde gebruikersinterface code van Android en Desktop, dit is experimenteel en kan in de toekomst worden verwijderd." + "value" : "Bruk samme innlegg UI kode fra Android og Desktop, dette er eksperimentell og kan bli fjernet i fremtiden." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bruk samme innlegg UI kode fra Android og Desktop, dette er eksperimentell og kan bli fjernet i fremtiden." + "value" : "Gebruik dezelfde gebruikersinterface code van Android en Desktop, dit is experimenteel en kan in de toekomst worden verwijderd." } }, "pl" : { @@ -11589,16 +11589,16 @@ "value" : "비디오 자동 재생" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Video automatisch afspelen" + "value" : "Video autokjør" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Video autokjør" + "value" : "Video automatisch afspelen" } }, "pl" : { @@ -11779,16 +11779,16 @@ "value" : "항상" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "altijd" + "value" : "Alltid" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Alltid" + "value" : "altijd" } }, "pl" : { @@ -11933,16 +11933,16 @@ "value" : "投稿内の動画を自動的に再生" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Video's automatisch afspelen in het bericht" + "value" : "Automatisk spill av videoer i innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Automatisk spill av videoer i innlegget" + "value" : "Video's automatisch afspelen in het bericht" } }, "pl" : { @@ -12099,16 +12099,16 @@ "value" : "절대" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Nooit" + "value" : "Aldri" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aldri" + "value" : "Nooit" } }, "pl" : { @@ -12289,16 +12289,16 @@ "value" : "Wi-Fi 전용" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Alleen wifi" + "value" : "Kun Wi-Fi" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kun Wi-Fi" + "value" : "Alleen wifi" } }, "pl" : { @@ -12479,16 +12479,16 @@ "value" : "차단" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Blokkeren" + "value" : "Blokker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Blokker" + "value" : "Blokkeren" } }, "pl" : { @@ -12633,16 +12633,16 @@ "value" : "このユーザーをブロックしてもよろしいですか?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Weet je zeker dat je deze gebruiker wilt blokkeren?" + "value" : "Er du sikker på at du vil blokkere denne brukeren?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på at du vil blokkere denne brukeren?" + "value" : "Weet je zeker dat je deze gebruiker wilt blokkeren?" } }, "pl" : { @@ -12763,16 +12763,16 @@ "value" : "ユーザーをブロック" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruiker blokkeren" + "value" : "Blokker bruker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Blokker bruker" + "value" : "Gebruiker blokkeren" } }, "pl" : { @@ -13059,16 +13059,16 @@ "value" : "피드" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Feeds" + "value" : "Strøm" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Strøm" + "value" : "Feeds" } }, "pl" : { @@ -13250,16 +13250,16 @@ "value" : "당신을 팔로우했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "volgt jou nu" + "value" : "fulgte deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "fulgte deg" + "value" : "volgt jou nu" } }, "pl" : { @@ -13441,16 +13441,16 @@ "value" : "고정됨" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vastgezet" + "value" : "Festet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Festet" + "value" : "Vastgezet" } }, "pl" : { @@ -13632,16 +13632,16 @@ "value" : "좋아요를 눌렀습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "favoriet" + "value" : "favorisert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "favorisert" + "value" : "favoriet" } }, "pl" : { @@ -13823,16 +13823,16 @@ "value" : "당신을 언급했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "noemde je" + "value" : "nevnte deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "nevnte deg" + "value" : "noemde je" } }, "pl" : { @@ -14014,16 +14014,16 @@ "value" : "인용했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "geciteerd" + "value" : "sitert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "sitert" + "value" : "geciteerd" } }, "pl" : { @@ -14205,16 +14205,16 @@ "value" : "당신에게 답글을 달았습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "heeft u geantwoord" + "value" : "svarte deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "svarte deg" + "value" : "heeft u geantwoord" } }, "pl" : { @@ -14390,16 +14390,16 @@ "value" : "상태를 부스트했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "boostte een status" + "value" : "repostet et innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "repostet et innlegg" + "value" : "boostte een status" } }, "pl" : { @@ -14574,16 +14574,16 @@ "value" : "스타터팩에 가입했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Starterpack toegetreden" + "value" : "Starterpack er medlem" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Starterpack er medlem" + "value" : "Starterpack toegetreden" } }, "pl" : { @@ -14759,16 +14759,16 @@ "value" : "알 수 없음" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Onbekend" + "value" : "Ukjent" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ukjent" + "value" : "Onbekend" } }, "pl" : { @@ -14949,16 +14949,16 @@ "value" : "신고하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rapporteren" + "value" : "Rapporter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rapporter" + "value" : "Rapporteren" } }, "pl" : { @@ -15133,16 +15133,16 @@ "value" : "이 게시물의 문제는 무엇인가요?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Wat is het probleem met dit bericht?" + "value" : "Hva er problemet med dette innlegget?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hva er problemet med dette innlegget?" + "value" : "Wat is het probleem met dit bericht?" } }, "pl" : { @@ -15317,16 +15317,16 @@ "value" : "오해의 소지가 있는" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Misleidend" + "value" : "Villende" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Villende" + "value" : "Misleidend" } }, "pl" : { @@ -15501,16 +15501,16 @@ "value" : "이 게시물은 오해의 소지가 있습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Deze post is misleidend" + "value" : "Dette innlegget er misvisende" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Dette innlegget er misvisende" + "value" : "Deze post is misleidend" } }, "pl" : { @@ -15685,16 +15685,16 @@ "value" : "기타" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "anders" + "value" : "Annet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Annet" + "value" : "anders" } }, "pl" : { @@ -15869,16 +15869,16 @@ "value" : "이 옵션에 포함되지 않은 문제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Een probleem niet opgenomen in deze opties" + "value" : "Et problem er ikke inkludert i disse alternativene" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Et problem er ikke inkludert i disse alternativene" + "value" : "Een probleem niet opgenomen in deze opties" } }, "pl" : { @@ -16053,16 +16053,16 @@ "value" : "반사회적 행동" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Anti-sociaal gedrag" + "value" : "Anti-Social Athavior" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Anti-Social Athavior" + "value" : "Anti-sociaal gedrag" } }, "pl" : { @@ -16237,16 +16237,16 @@ "value" : "괴롭힘, 트롤링 또는 편견" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Pesterij, trollen of intolerantie" + "value" : "Trakassering, kontroll eller intoleranse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Trakassering, kontroll eller intoleranse" + "value" : "Pesterij, trollen of intolerantie" } }, "pl" : { @@ -16421,16 +16421,16 @@ "value" : "원치 않는 성적 콘텐츠" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ongewenste seksuele inhoud" + "value" : "Uønsket suell innhold" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Uønsket suell innhold" + "value" : "Ongewenste seksuele inhoud" } }, "pl" : { @@ -16605,16 +16605,16 @@ "value" : "라벨이 없는 누드 또는 포르노그래피" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voedingsstoffen of pornografie niet als zodanig geëtiketteerd" + "value" : "Nudity eller pornografi som ikke er merket slik" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nudity eller pornografi som ikke er merket slik" + "value" : "Voedingsstoffen of pornografie niet als zodanig geëtiketteerd" } }, "pl" : { @@ -16795,16 +16795,16 @@ "value" : "스팸" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Spam" + "value" : "Søppelpost" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Søppelpost" + "value" : "Spam" } }, "pl" : { @@ -16979,16 +16979,16 @@ "value" : "과도한 멘션이나 답글" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Overmatige vermeldingen of reacties" + "value" : "Overdreven omtale eller svar" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Overdreven omtale eller svar" + "value" : "Overmatige vermeldingen of reacties" } }, "pl" : { @@ -17163,16 +17163,16 @@ "value" : "불법 및 긴급" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Illegaal en urgent" + "value" : "Ulovlig og Haster" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ulovlig og Haster" + "value" : "Illegaal en urgent" } }, "pl" : { @@ -17347,16 +17347,16 @@ "value" : "법률 또는 서비스 조건의 명백한 위반" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ernstige schendingen van de wet of de gebruiksvoorwaarden" + "value" : "Anskaffelse av lovbrudd eller tjenestevilkår" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Anskaffelse av lovbrudd eller tjenestevilkår" + "value" : "Ernstige schendingen van de wet of de gebruiksvoorwaarden" } }, "pl" : { @@ -17537,16 +17537,16 @@ "value" : "북마크 추가" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bladwijzer toevoegen" + "value" : "Legg til bokmerke" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til bokmerke" + "value" : "Bladwijzer toevoegen" } }, "pl" : { @@ -17727,16 +17727,16 @@ "value" : "북마크 제거" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bladwijzer verwijderen" + "value" : "Fjern bokmerke" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Fjern bokmerke" + "value" : "Bladwijzer verwijderen" } }, "pl" : { @@ -17917,16 +17917,16 @@ "value" : "취소" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "annuleren" + "value" : "Avbryt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Avbryt" + "value" : "annuleren" } }, "pl" : { @@ -18071,16 +18071,16 @@ "value" : "チャンネル" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kanaal" + "value" : "Kanal" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kanal" + "value" : "Kanaal" } }, "pl" : { @@ -18201,16 +18201,16 @@ "value" : "チャンネル" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kanalen" + "value" : "Kanaler" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kanaler" + "value" : "Kanalen" } }, "pl" : { @@ -18373,16 +18373,16 @@ "value" : "닫기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Afsluiten" + "value" : "Lukk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lukk" + "value" : "Afsluiten" } }, "pl" : { @@ -18563,16 +18563,16 @@ "value" : "댓글" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opmerking" + "value" : "Kommentar" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kommentar" + "value" : "Opmerking" } }, "pl" : { @@ -18723,13 +18723,13 @@ "value" : "Cnacel" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Cnacel" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Cnacel" @@ -18889,16 +18889,16 @@ "value" : "보내기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verzenden" + "value" : "Sende" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sende" + "value" : "Verzenden" } }, "pl" : { @@ -19079,16 +19079,16 @@ "value" : "컨텐츠 경고" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Waarschuwing inhoud" + "value" : "Advarsel for innhold" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Advarsel for innhold" + "value" : "Waarschuwing inhoud" } }, "pl" : { @@ -19269,16 +19269,16 @@ "value" : "미디어를 민감한 내용으로 표시하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Media als gevoelig markeren" + "value" : "Merk media som sensitivt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Merk media som sensitivt" + "value" : "Media als gevoelig markeren" } }, "pl" : { @@ -19459,16 +19459,16 @@ "value" : "무슨 일이 일어나고 있나요?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Wat gebeurt er?" + "value" : "Hva skjer?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hva skjer?" + "value" : "Wat gebeurt er?" } }, "pl" : { @@ -19613,16 +19613,16 @@ "value" : "Option" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Optie" + "value" : "Alternativ" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Alternativ" + "value" : "Optie" } }, "pl" : { @@ -19749,16 +19749,16 @@ "value" : "有効期限:" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vervaldatum op:" + "value" : "Utløp på:" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Utløp på:" + "value" : "Vervaldatum op:" } }, "pl" : { @@ -19879,16 +19879,16 @@ "value" : "アンケートタイプ" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Poll type" + "value" : "Avstemnings type" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Avstemnings type" + "value" : "Poll type" } }, "pl" : { @@ -20045,16 +20045,16 @@ "value" : "복수 선택" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Meerdere keuzes" + "value" : "Flere valg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Flere valg" + "value" : "Meerdere keuzes" } }, "pl" : { @@ -20235,16 +20235,16 @@ "value" : "단일 선택" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Enkele keuze" + "value" : "Ett valg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ett valg" + "value" : "Enkele keuze" } }, "pl" : { @@ -20425,16 +20425,16 @@ "value" : "작성하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Samenstellen" + "value" : "Skriv" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv" + "value" : "Samenstellen" } }, "pl" : { @@ -20615,16 +20615,16 @@ "value" : "인용하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Offerte" + "value" : "Sitat" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sitat" + "value" : "Offerte" } }, "pl" : { @@ -20805,16 +20805,16 @@ "value" : "답글" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beantwoorden" + "value" : "Svar" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Svar" + "value" : "Beantwoorden" } }, "pl" : { @@ -20995,16 +20995,16 @@ "value" : "어두운 색" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Donker" + "value" : "Mørk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mørk" + "value" : "Donker" } }, "pl" : { @@ -21185,16 +21185,16 @@ "value" : "브라우저에서 열기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Openen in browser" + "value" : "Åpne i nettleser" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Åpne i nettleser" + "value" : "Openen in browser" } }, "pl" : { @@ -21339,16 +21339,16 @@ "value" : "アカウントを選択" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Selecteer account" + "value" : "Velg konto" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Velg konto" + "value" : "Selecteer account" } }, "pl" : { @@ -21505,16 +21505,16 @@ "value" : "삭제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verwijderen" + "value" : "Slett" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett" + "value" : "Verwijderen" } }, "pl" : { @@ -21695,16 +21695,16 @@ "value" : "삭제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verwijderen" + "value" : "Slett" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett" + "value" : "Verwijderen" } }, "pl" : { @@ -21885,16 +21885,16 @@ "value" : "삭제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verwijderen" + "value" : "Slett" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett" + "value" : "Verwijderen" } }, "pl" : { @@ -22039,16 +22039,16 @@ "value" : "このリストを削除してもよろしいですか?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Weet u zeker dat u deze lijst wilt verwijderen?" + "value" : "Er du sikker på at du vil slette denne listen?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på at du vil slette denne listen?" + "value" : "Weet u zeker dat u deze lijst wilt verwijderen?" } }, "pl" : { @@ -22205,16 +22205,16 @@ "value" : "목록 삭제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst verwijderen" + "value" : "Slett liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett liste" + "value" : "Lijst verwijderen" } }, "pl" : { @@ -22389,16 +22389,16 @@ "value" : "정말로 이것을 삭제하시겠습니까?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Weet u zeker dat u dit wilt verwijderen?" + "value" : "Er du sikker på at du vil slette dette?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på at du vil slette dette?" + "value" : "Weet u zeker dat u dit wilt verwijderen?" } }, "pl" : { @@ -22543,16 +22543,16 @@ "value" : "説明" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beschrijving" + "value" : "Beskrivelse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Beskrivelse" + "value" : "Beschrijving" } }, "pl" : { @@ -22679,16 +22679,16 @@ "value" : "ダイレクトメッセージ" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Direct Bericht" + "value" : "Direkte melding" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Direkte melding" + "value" : "Direct Bericht" } }, "pl" : { @@ -22815,16 +22815,16 @@ "value" : "トレンド" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Populair" + "value" : "Populært" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Populært" + "value" : "Populair" } }, "pl" : { @@ -22987,13 +22987,13 @@ "value" : "트렌딩 해시태그" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Trending Hashtags" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Trending Hashtags" @@ -23178,16 +23178,16 @@ "value" : "발견하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ontdek" + "value" : "Oppdag" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oppdag" + "value" : "Ontdek" } }, "pl" : { @@ -23368,16 +23368,16 @@ "value" : "사용자 추천" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruikers aanbevelen" + "value" : "Anbefal brukere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Anbefal brukere" + "value" : "Gebruikers aanbevelen" } }, "pl" : { @@ -23528,16 +23528,16 @@ "value" : "ダイレクトメッセージを書く" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Schrijf direct bericht" + "value" : "Skriv direkte melding" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv direkte melding" + "value" : "Schrijf direct bericht" } }, "pl" : { @@ -23664,16 +23664,16 @@ "value" : "ダイレクトメッセージ" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Direct Bericht" + "value" : "Direkte melding" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Direkte melding" + "value" : "Direct Bericht" } }, "pl" : { @@ -23830,16 +23830,16 @@ "value" : "완료" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voltooid" + "value" : "Ferdig" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ferdig" + "value" : "Voltooid" } }, "pl" : { @@ -24020,16 +24020,16 @@ "value" : "완료" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voltooid" + "value" : "Ferdig" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ferdig" + "value" : "Voltooid" } }, "pl" : { @@ -24168,16 +24168,16 @@ "value" : "ドラフト(下書き)" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Kladversie" + "value" : "Utkast" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Utkast" + "value" : "Kladversie" } }, "pl" : { @@ -24292,16 +24292,16 @@ "value" : "Drafts" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Concepten" + "value" : "Utkast" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Utkast" + "value" : "Concepten" } }, "pl" : { @@ -24458,16 +24458,16 @@ "value" : "편집" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bewerken" + "value" : "Rediger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger" + "value" : "Bewerken" } }, "pl" : { @@ -24642,16 +24642,16 @@ "value" : "편집" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bewerken" + "value" : "Rediger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger" + "value" : "Bewerken" } }, "pl" : { @@ -24796,16 +24796,16 @@ "value" : "説明を編集" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beschrijving bewerken" + "value" : "Rediger beskrivelse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger beskrivelse" + "value" : "Beschrijving bewerken" } }, "pl" : { @@ -24962,16 +24962,16 @@ "value" : "목록 편집" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst bewerken" + "value" : "Rediger liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger liste" + "value" : "Lijst bewerken" } }, "pl" : { @@ -25146,16 +25146,16 @@ "value" : "RSS 소스 편집" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Wijzig Rss Source" + "value" : "Rediger Rss kilde" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger Rss kilde" + "value" : "Wijzig Rss Source" } }, "pl" : { @@ -25336,16 +25336,16 @@ "value" : "목록에 추가/제거" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toevoegen/Verwijderen uit lijst" + "value" : "Legg til/fjern fra listen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til/fjern fra listen" + "value" : "Toevoegen/Verwijderen uit lijst" } }, "pl" : { @@ -25490,16 +25490,16 @@ "value" : "最近使用したもの" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Recent gebruikt" + "value" : "Nylig brukt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nylig brukt" + "value" : "Recent gebruikt" } }, "pl" : { @@ -25626,16 +25626,16 @@ "value" : "絵文字を検索" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Zoek naar Emoji" + "value" : "Søk etter Emoji" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Søk etter Emoji" + "value" : "Zoek naar Emoji" } }, "pl" : { @@ -25762,16 +25762,16 @@ "value" : "終わりに達しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Je bereikt het einde" + "value" : "Du når slutten" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Du når slutten" + "value" : "Je bereikt het einde" } }, "pl" : { @@ -25892,16 +25892,16 @@ "value" : "リレーURLを入力してください" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voer URL voor relais in" + "value" : "Angi relé URL" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Angi relé URL" + "value" : "Voer URL voor relais in" } }, "pl" : { @@ -26058,16 +26058,16 @@ "value" : "오류" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Foutmelding" + "value" : "Feil" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Feil" + "value" : "Foutmelding" } }, "pl" : { @@ -26248,16 +26248,16 @@ "value" : "오류" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Foutmelding" + "value" : "Feil" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Feil" + "value" : "Foutmelding" } }, "pl" : { @@ -26402,16 +26402,16 @@ "value" : "%@ のログインセッションが失効しました。" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "De aanmeldsessie is verlopen voor %@" + "value" : "Login økten er utløpt for %@" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Login økten er utløpt for %@" + "value" : "De aanmeldsessie is verlopen voor %@" } }, "pl" : { @@ -26526,16 +26526,16 @@ "value" : "再ログイン" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Re login" + "value" : "Kjør innlogging" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kjør innlogging" + "value" : "Re login" } }, "pl" : { @@ -26662,16 +26662,16 @@ "value" : "データのエクスポートに失敗しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gegevens exporteren mislukt" + "value" : "Kunne ikke eksportere data" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke eksportere data" + "value" : "Gegevens exporteren mislukt" } }, "pl" : { @@ -26792,16 +26792,16 @@ "value" : "モデルの読み込みに失敗しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "modellen laden mislukt" + "value" : "Kan ikke laste inn modeller" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kan ikke laste inn modeller" + "value" : "modellen laden mislukt" } }, "pl" : { @@ -26928,16 +26928,16 @@ "value" : "fx_share" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Fx_share" + "value" : "Del via FxEmbed" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Del via FxEmbed" + "value" : "Fx_share" } }, "pl" : { @@ -27094,16 +27094,16 @@ "value" : "북마크" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bladwijzers" + "value" : "Bokmerker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bokmerker" + "value" : "Bladwijzers" } }, "pl" : { @@ -27284,16 +27284,16 @@ "value" : "발견하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ontdek" + "value" : "Oppdag" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oppdag" + "value" : "Ontdek" } }, "pl" : { @@ -27438,16 +27438,16 @@ "value" : "お気に入り" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Favoriete" + "value" : "Favoritt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Favoritt" + "value" : "Favoriete" } }, "pl" : { @@ -27610,16 +27610,16 @@ "value" : "추천" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Aanbevolen" + "value" : "Anbefalt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Anbefalt" + "value" : "Aanbevolen" } }, "pl" : { @@ -27800,16 +27800,16 @@ "value" : "피드" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Feeds" + "value" : "Strøm" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Strøm" + "value" : "Feeds" } }, "pl" : { @@ -27990,16 +27990,16 @@ "value" : "홈" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Startpagina" + "value" : "Hjem" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hjem" + "value" : "Startpagina" } }, "pl" : { @@ -28180,16 +28180,16 @@ "value" : "목록" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Klantenlijst" + "value" : "Liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liste" + "value" : "Klantenlijst" } }, "pl" : { @@ -28370,16 +28370,16 @@ "value" : "내 정보" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "IK" + "value" : "Meg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Meg" + "value" : "IK" } }, "pl" : { @@ -28524,16 +28524,16 @@ "value" : "Notification" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Notificatie" + "value" : "Varsling" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Varsling" + "value" : "Notificatie" } }, "pl" : { @@ -28660,16 +28660,16 @@ "value" : "インポート完了" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Importeren voltooid" + "value" : "Import fullført" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Import fullført" + "value" : "Importeren voltooid" } }, "pl" : { @@ -28790,16 +28790,16 @@ "value" : "これはファイルからデータをインポートします。一致するIDを持つ既存のレコードは置き換えられます。続行しますか?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Dit zal gegevens uit het bestand importeren. Bestaande records met bijpassende IDs zullen worden vervangen. Wilt u doorgaan?" + "value" : "Dette vil importere data fra filen. Eksisterende poster med samsvarende ID-er vil bli erstattet. Vil du fortsette?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Dette vil importere data fra filen. Eksisterende poster med samsvarende ID-er vil bli erstattet. Vil du fortsette?" + "value" : "Dit zal gegevens uit het bestand importeren. Bestaande records met bijpassende IDs zullen worden vervangen. Wilt u doorgaan?" } }, "pl" : { @@ -28920,16 +28920,16 @@ "value" : "インポートの確認" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Import bevestigen" + "value" : "Bekreft import" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bekreft import" + "value" : "Import bevestigen" } }, "pl" : { @@ -29050,16 +29050,16 @@ "value" : "データのインポートに失敗しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gegevens importeren mislukt" + "value" : "Kan ikke importere data" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kan ikke importere data" + "value" : "Gegevens importeren mislukt" } }, "pl" : { @@ -29216,16 +29216,16 @@ "value" : "밝은 색" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Licht" + "value" : "Lys" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lys" + "value" : "Licht" } }, "pl" : { @@ -29406,16 +29406,16 @@ "value" : "좋아요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "vind-ik-leuk" + "value" : "Lik" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lik" + "value" : "vind-ik-leuk" } }, "pl" : { @@ -29560,16 +29560,16 @@ "value" : "いいね!" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Leukgevonden" + "value" : "Likte" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Likte" + "value" : "Leukgevonden" } }, "pl" : { @@ -29726,16 +29726,16 @@ "value" : "목록 설명" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Omschrijving lijst" + "value" : "Liste beskrivelse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liste beskrivelse" + "value" : "Omschrijving lijst" } }, "pl" : { @@ -29880,16 +29880,16 @@ "value" : "リストアイコン" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst pictogram" + "value" : "Liste ikon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liste ikon" + "value" : "Lijst pictogram" } }, "pl" : { @@ -30046,16 +30046,16 @@ "value" : "목록 설명" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Omschrijving lijst" + "value" : "Liste beskrivelse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liste beskrivelse" + "value" : "Omschrijving lijst" } }, "pl" : { @@ -30236,16 +30236,16 @@ "value" : "목록 구성원 편집" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijstleden bewerken" + "value" : "Rediger listemedlemmer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger listemedlemmer" + "value" : "Lijstleden bewerken" } }, "pl" : { @@ -30426,16 +30426,16 @@ "value" : "목록 이름" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst naam" + "value" : "Navn på liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Navn på liste" + "value" : "Lijst naam" } }, "pl" : { @@ -30616,16 +30616,16 @@ "value" : "목록 편집" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst bewerken" + "value" : "Rediger liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger liste" + "value" : "Lijst bewerken" } }, "pl" : { @@ -30770,16 +30770,16 @@ "value" : "ここには何もありません" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Niets hier" + "value" : "Ingenting her" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ingenting her" + "value" : "Niets hier" } }, "pl" : { @@ -30936,16 +30936,16 @@ "value" : "구성원" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "leden" + "value" : "Medlemmer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Medlemmer" + "value" : "leden" } }, "pl" : { @@ -31126,16 +31126,16 @@ "value" : "목록 이름" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst naam" + "value" : "Navn på liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Navn på liste" + "value" : "Lijst naam" } }, "pl" : { @@ -31280,16 +31280,16 @@ "value" : "リストアイコン" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst pictogram" + "value" : "Liste ikon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liste ikon" + "value" : "Lijst pictogram" } }, "pl" : { @@ -31446,16 +31446,16 @@ "value" : "목록 설명" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Omschrijving lijst" + "value" : "Liste beskrivelse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liste beskrivelse" + "value" : "Omschrijving lijst" } }, "pl" : { @@ -31636,16 +31636,16 @@ "value" : "목록 설명" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Omschrijving lijst" + "value" : "Liste beskrivelse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liste beskrivelse" + "value" : "Omschrijving lijst" } }, "pl" : { @@ -31826,16 +31826,16 @@ "value" : "목록 이름" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst naam" + "value" : "Navn på liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Navn på liste" + "value" : "Lijst naam" } }, "pl" : { @@ -32016,16 +32016,16 @@ "value" : "목록 이름" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst naam" + "value" : "Navn på liste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Navn på liste" + "value" : "Lijst naam" } }, "pl" : { @@ -32206,16 +32206,16 @@ "value" : "목록 생성" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lijst aanmaken" + "value" : "Lag oppgaveliste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lag oppgaveliste" + "value" : "Lijst aanmaken" } }, "pl" : { @@ -32360,16 +32360,16 @@ "value" : "モデルを読み込み中..." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Motoren laden..." + "value" : "Laster modeller..." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Laster modeller..." + "value" : "Motoren laden..." } }, "pl" : { @@ -32490,16 +32490,16 @@ "value" : "読み込み中..." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Laden..." + "value" : "Laster..." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Laster..." + "value" : "Laden..." } }, "pl" : { @@ -32662,16 +32662,16 @@ "value" : "삭제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verwijderen" + "value" : "Slett" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett" + "value" : "Verwijderen" } }, "pl" : { @@ -32852,16 +32852,16 @@ "value" : "타임라인을 위한 로컬 필터 설정" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lokale filterinstellingen voor tijdlijn" + "value" : "Lokale filterinnstillinger for tidslinjen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lokale filterinnstillinger for tidslinjen" + "value" : "Lokale filterinstellingen voor tijdlijn" } }, "pl" : { @@ -33042,16 +33042,16 @@ "value" : "편집" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bewerken" + "value" : "Rediger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger" + "value" : "Bewerken" } }, "pl" : { @@ -33202,16 +33202,16 @@ "value" : "フィルターを編集" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Filter bewerken" + "value" : "Rediger filter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger filter" + "value" : "Filter bewerken" } }, "pl" : { @@ -33368,13 +33368,13 @@ "value" : "키워드" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Keyword" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Keyword" @@ -33522,16 +33522,16 @@ "value" : "キーワードを入力してください" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voer een trefwoord in" + "value" : "Skriv inn et nøkkelord" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv inn et nøkkelord" + "value" : "Voer een trefwoord in" } }, "pl" : { @@ -33658,16 +33658,16 @@ "value" : "通知を有効にする" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Inschakelen in melding" + "value" : "Aktiver i varsel" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiver i varsel" + "value" : "Inschakelen in melding" } }, "pl" : { @@ -33788,16 +33788,16 @@ "value" : "フィルタを有効にする" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Filter in" + "value" : "Aktiver filter i" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiver filter i" + "value" : "Filter in" } }, "pl" : { @@ -33918,16 +33918,16 @@ "value" : "検索で有効にする" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Inschakelen in zoekopdracht" + "value" : "Aktiver i søk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiver i søk" + "value" : "Inschakelen in zoekopdracht" } }, "pl" : { @@ -34048,16 +34048,16 @@ "value" : "タイムラインで有効にする" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Inschakelen op tijdlijn" + "value" : "Aktiver i tidslinjen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiver i tidslinjen" + "value" : "Inschakelen op tijdlijn" } }, "pl" : { @@ -34214,16 +34214,16 @@ "value" : "로컬 필터" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lokaal filter" + "value" : "Lokalt filter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lokalt filter" + "value" : "Lokaal filter" } }, "pl" : { @@ -34405,16 +34405,16 @@ "value" : "브라우징 기록 보기 또는 검색" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bekijk of zoek uw browsegeschiedenis" + "value" : "Vis eller søk i historikk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis eller søk i historikk" + "value" : "Bekijk of zoek uw browsegeschiedenis" } }, "pl" : { @@ -34547,16 +34547,16 @@ "value" : "Cerca nella cache…" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Zoeken in cache…" + "value" : "Søk i mellomlager…" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Søk i mellomlager…" + "value" : "Zoeken in cache…" } }, "pl" : { @@ -34713,16 +34713,16 @@ "value" : "게시물" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Statuses" + "value" : "Innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlegg" + "value" : "Statuses" } }, "pl" : { @@ -34903,16 +34903,16 @@ "value" : "로컬 기록" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lokale geschiedenis" + "value" : "Lokal historikk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lokal historikk" + "value" : "Lokale geschiedenis" } }, "pl" : { @@ -35093,16 +35093,16 @@ "value" : "사용자" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruikers" + "value" : "Brukere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Brukere" + "value" : "Gebruikers" } }, "pl" : { @@ -35283,16 +35283,16 @@ "value" : "로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Aanmelden" + "value" : "Innlogging" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlogging" + "value" : "Aanmelden" } }, "pl" : { @@ -35473,16 +35473,16 @@ "value" : "로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Aanmelden" + "value" : "Innlogging" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlogging" + "value" : "Aanmelden" } }, "pl" : { @@ -35627,16 +35627,16 @@ "value" : "ログアウト" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Afmelden" + "value" : "Logg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg" + "value" : "Afmelden" } }, "pl" : { @@ -35757,16 +35757,16 @@ "value" : "リレーの管理" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beheer relais" + "value" : "Behandle releer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Behandle releer" + "value" : "Beheer relais" } }, "pl" : { @@ -35923,16 +35923,16 @@ "value" : "고정된 투트" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vastgepinde toot" + "value" : "Festet innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Festet innlegg" + "value" : "Vastgepinde toot" } }, "pl" : { @@ -36113,16 +36113,16 @@ "value" : "덜 보기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Minder weergeven" + "value" : "Vis mindre" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis mindre" + "value" : "Minder weergeven" } }, "pl" : { @@ -36303,16 +36303,16 @@ "value" : "더 보기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toon meer" + "value" : "Vis mer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis mer" + "value" : "Toon meer" } }, "pl" : { @@ -36493,16 +36493,16 @@ "value" : "좋아요를 눌렀습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "favoriet" + "value" : "favorisert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "favorisert" + "value" : "favoriet" } }, "pl" : { @@ -36683,16 +36683,16 @@ "value" : "당신을 팔로우했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "volgt jou nu" + "value" : "fulgte deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "fulgte deg" + "value" : "volgt jou nu" } }, "pl" : { @@ -36867,16 +36867,16 @@ "value" : "당신을 팔로우 요청했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "verzoek je te volgen" + "value" : "forespørsel om å følge deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "forespørsel om å følge deg" + "value" : "verzoek je te volgen" } }, "pl" : { @@ -37057,16 +37057,16 @@ "value" : "당신을 언급했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "noemde je" + "value" : "nevnte deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "nevnte deg" + "value" : "noemde je" } }, "pl" : { @@ -37241,16 +37241,16 @@ "value" : "참여했던 설문조사가 종료되었습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Een poll waaraan u deelnam, is beëindigd" + "value" : "En avstemming du deltok i er avsluttet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "En avstemming du deltok i er avsluttet" + "value" : "Een poll waaraan u deelnam, is beëindigd" } }, "pl" : { @@ -37431,16 +37431,16 @@ "value" : "리블로그했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "gedeeld" + "value" : "reblogget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "reblogget" + "value" : "gedeeld" } }, "pl" : { @@ -37615,16 +37615,16 @@ "value" : "투트를 부스트했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "toot heeft geboost" + "value" : "repostet et innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "repostet et innlegg" + "value" : "toot heeft geboost" } }, "pl" : { @@ -37799,16 +37799,16 @@ "value" : "투트를 업데이트했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "heeft een toot bijgewerkt" + "value" : "oppdaterte et innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "oppdaterte et innlegg" + "value" : "heeft een toot bijgewerkt" } }, "pl" : { @@ -37983,16 +37983,16 @@ "value" : "정말로 이것을 신고하시겠습니까?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Weet u zeker dat u dit wilt melden?" + "value" : "Er du sikker på at du vil rapportere dette?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på at du vil rapportere dette?" + "value" : "Weet u zeker dat u dit wilt melden?" } }, "pl" : { @@ -38173,16 +38173,16 @@ "value" : "신고하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rapporteren" + "value" : "Rapporter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rapporter" + "value" : "Rapporteren" } }, "pl" : { @@ -38333,16 +38333,16 @@ "value" : "ローカルタイムライン" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Lokale tijdlijn" + "value" : "Lokal tidslinje" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lokal tidslinje" + "value" : "Lokale tijdlijn" } }, "pl" : { @@ -38475,16 +38475,16 @@ "value" : "公開タイムライン" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Publieke tijdlijn" + "value" : "Offentlig tidslinje" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Offentlig tidslinje" + "value" : "Publieke tijdlijn" } }, "pl" : { @@ -38641,16 +38641,16 @@ "value" : "팔로워" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgers" + "value" : "Følgere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følgere" + "value" : "Volgers" } }, "pl" : { @@ -38831,16 +38831,16 @@ "value" : "팔로잉" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgt" + "value" : "Følger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følger" + "value" : "Volgt" } }, "pl" : { @@ -39016,16 +39016,16 @@ "value" : "브레인 다이버의 링크를 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Plaats de link naar Brain Diver" + "value" : "Post linken til Brain Diver" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post linken til Brain Diver" + "value" : "Plaats de link naar Brain Diver" } }, "pl" : { @@ -39201,13 +39201,13 @@ "value" : "Misskey-Misskey 라투마" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Misskey-Misskey La-Tu-Ma" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Misskey-Misskey La-Tu-Ma" @@ -39386,16 +39386,16 @@ "value" : "브레인 다이버" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Hersenen Duiver" + "value" : "Hjerne sover" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hjerne sover" + "value" : "Hersenen Duiver" } }, "pl" : { @@ -39571,16 +39571,16 @@ "value" : "버블 게임에서 동시에 가장 큰 두 객체" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Twee van de grootste objecten in het bubbelspel op hetzelfde moment" + "value" : "To av de største objektene i boblespillet samtidig" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "To av de største objektene i boblespillet samtidig" + "value" : "Twee van de grootste objecten in het bubbelspel op hetzelfde moment" } }, "pl" : { @@ -39756,16 +39756,16 @@ "value" : "이렇게 점심 도시락을 채울 수 있습니다 🤯 🤯 약간." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Je kunt een lunchdoos zoals deze 🤯 🤯 een beetje opvullen." + "value" : "Du kan fylle en lunsj boks som dette 🤯 🤯 en bit." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Du kan fylle en lunsj boks som dette 🤯 🤯 en bit." + "value" : "Je kunt een lunchdoos zoals deze 🤯 🤯 een beetje opvullen." } }, "pl" : { @@ -39941,16 +39941,16 @@ "value" : "더블 🤯" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Dubbel:exploderen_head:" + "value" : "Dobbel🤯" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Dobbel🤯" + "value" : "Dubbel:exploderen_head:" } }, "pl" : { @@ -40126,16 +40126,16 @@ "value" : "버블 게임에서 가장 큰 객체" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Het grootste object in het bubbelspel" + "value" : "Det største objektet i boblespill" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Det største objektet i boblespill" + "value" : "Het grootste object in het bubbelspel" } }, "pl" : { @@ -40311,13 +40311,13 @@ "value" : "🤯" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "🤯" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "🤯" @@ -40496,16 +40496,16 @@ "value" : "여기를 클릭했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Je hebt hier geklikt" + "value" : "Du har klikket her" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Du har klikket her" + "value" : "Je hebt hier geklikt" } }, "pl" : { @@ -40687,16 +40687,16 @@ "value" : "여기를 클릭하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Klik hier" + "value" : "Klikk her" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Klikk her" + "value" : "Klik hier" } }, "pl" : { @@ -40872,16 +40872,16 @@ "value" : "Misskey를 최소 30분 동안 열어 두세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Houd Misskey open voor ten minste 30 minuten" + "value" : "Behold Misskey åpnet i minst 30 minutter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Behold Misskey åpnet i minst 30 minutter" + "value" : "Houd Misskey open voor ten minste 30 minuten" } }, "pl" : { @@ -41063,16 +41063,16 @@ "value" : "짧은 휴식" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Korte pauze" + "value" : "Kort pause" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kort pause" + "value" : "Korte pauze" } }, "pl" : { @@ -41254,16 +41254,16 @@ "value" : "Misskey를 최소 60분 동안 열어 두세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Houd Misskey open voor ten minste 60 minuten" + "value" : "Behold Misskey åpnet i minst 60 minutter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Behold Misskey åpnet i minst 60 minutter" + "value" : "Houd Misskey open voor ten minste 60 minuten" } }, "pl" : { @@ -41445,16 +41445,16 @@ "value" : "Misskey에서는 \"Miss\"가 없습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Geen \"Miss\" in Misskey" + "value" : "Ingen \"Misske\" i Misskey" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ingen \"Misske\" i Misskey" + "value" : "Geen \"Miss\" in Misskey" } }, "pl" : { @@ -41630,16 +41630,16 @@ "value" : "30개의 업적 획득" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verdien 30 prestaties" + "value" : "Tjen 30 prestasjoner" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tjen 30 prestasjoner" + "value" : "Verdien 30 prestaties" } }, "pl" : { @@ -41815,16 +41815,16 @@ "value" : "업적 수집가" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Prestatie Verzamelaar" + "value" : "Prestasjon samler" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Prestasjon samler" + "value" : "Prestatie Verzamelaar" } }, "pl" : { @@ -42000,16 +42000,16 @@ "value" : "쿠키를 클릭했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Klikte de cookie" + "value" : "Klikket på infokapselen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Klikket på infokapselen" + "value" : "Klikte de cookie" } }, "pl" : { @@ -42185,16 +42185,16 @@ "value" : "기다려, 정확한 웹사이트에 있나요?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Wacht, ben je op de juiste website?" + "value" : "Vent, er du på riktig nettside?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vent, er du på riktig nettside?" + "value" : "Wacht, ben je op de juiste website?" } }, "pl" : { @@ -42370,16 +42370,16 @@ "value" : "쿠키를 클릭하는 게임" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Een spel waarin je op cookies klikt" + "value" : "Et spill hvor du klikker på informasjonskapsler" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Et spill hvor du klikker på informasjonskapsler" + "value" : "Een spel waarin je op cookies klikt" } }, "pl" : { @@ -42555,16 +42555,16 @@ "value" : "드라이브에서 재귀적으로 중첩된 폴더 만들기 시도" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Poging een resource map te maken in de Drive" + "value" : "Forsøk på å opprette en rekursivt nestet mappe i stasjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Forsøk på å opprette en rekursivt nestet mappe i stasjon" + "value" : "Poging een resource map te maken in de Drive" } }, "pl" : { @@ -42740,16 +42740,16 @@ "value" : "순환 참조" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ronde referentie" + "value" : "Sirkulær referanse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sirkulær referanse" + "value" : "Ronde referentie" } }, "pl" : { @@ -42931,16 +42931,16 @@ "value" : "1명의 팔로워 얻기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Krijg 1 volger" + "value" : "Få 1 følger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Få 1 følger" + "value" : "Krijg 1 volger" } }, "pl" : { @@ -43122,16 +43122,16 @@ "value" : "첫 번째 팔로워" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Eerste volger" + "value" : "Første tilhenger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Første tilhenger" + "value" : "Eerste volger" } }, "pl" : { @@ -43313,16 +43313,16 @@ "value" : "10명의 팔로워 얻기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Krijg 10 volgers" + "value" : "Få 10 følgere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Få 10 følgere" + "value" : "Krijg 10 volgers" } }, "pl" : { @@ -43504,16 +43504,16 @@ "value" : "나를 팔로우하세요!" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volg mij!" + "value" : "Følg meg!" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følg meg!" + "value" : "Volg mij!" } }, "pl" : { @@ -43695,16 +43695,16 @@ "value" : "50명의 팔로워 얻기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Krijg 50 volgers" + "value" : "Få 50 følgere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Få 50 følgere" + "value" : "Krijg 50 volgers" } }, "pl" : { @@ -43880,16 +43880,16 @@ "value" : "사람들이 몰려옵니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Komt in massa's" + "value" : "Hva skjer med flere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hva skjer med flere" + "value" : "Komt in massa's" } }, "pl" : { @@ -44071,16 +44071,16 @@ "value" : "100명의 팔로워 얻기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Krijg 100 volgers" + "value" : "Få 100 følgere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Få 100 følgere" + "value" : "Krijg 100 volgers" } }, "pl" : { @@ -44262,16 +44262,16 @@ "value" : "인기 있는" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Populair" + "value" : "Populær" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Populær" + "value" : "Populair" } }, "pl" : { @@ -44453,16 +44453,16 @@ "value" : "300명의 팔로워 얻기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Krijg 300 volgers" + "value" : "Få 300 følgere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Få 300 følgere" + "value" : "Krijg 300 volgers" } }, "pl" : { @@ -44638,16 +44638,16 @@ "value" : "한 줄로 서주세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gelieve een enkele regel te vormen" + "value" : "Fyll inn en enkelt linje" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Fyll inn en enkelt linje" + "value" : "Gelieve een enkele regel te vormen" } }, "pl" : { @@ -44829,16 +44829,16 @@ "value" : "500명의 팔로워 얻기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Krijg 500 volgers" + "value" : "Få 500 følgere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Få 500 følgere" + "value" : "Krijg 500 volgers" } }, "pl" : { @@ -45020,16 +45020,16 @@ "value" : "라디오 타워" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Radio toren" + "value" : "Radio tårn" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Radio tårn" + "value" : "Radio toren" } }, "pl" : { @@ -45211,16 +45211,16 @@ "value" : "1,000명의 팔로워 얻기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Krijg 1000 volgers" + "value" : "Få 1000 følgere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Få 1000 følgere" + "value" : "Krijg 1000 volgers" } }, "pl" : { @@ -45402,16 +45402,16 @@ "value" : "인플루언서" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bevochtiger" + "value" : "Påvirkning" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Påvirkning" + "value" : "Bevochtiger" } }, "pl" : { @@ -45593,16 +45593,16 @@ "value" : "사용자를 팔로우하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volg een gebruiker" + "value" : "Følg en bruker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følg en bruker" + "value" : "Volg een gebruiker" } }, "pl" : { @@ -45778,16 +45778,16 @@ "value" : "첫 번째 사용자를 팔로우하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Je volgt je eerste gebruiker" + "value" : "Følger din første bruker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følger din første bruker" + "value" : "Je volgt je eerste gebruiker" } }, "pl" : { @@ -45969,16 +45969,16 @@ "value" : "10명 사용자 팔로우하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volg 10 gebruikers" + "value" : "Følg 10 brukere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følg 10 brukere" + "value" : "Volg 10 gebruikers" } }, "pl" : { @@ -46154,16 +46154,16 @@ "value" : "계속... 계속..." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Hou door... ga zo door..." + "value" : "Fortsett med... fortsett å være med..." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Fortsett med... fortsett å være med..." + "value" : "Hou door... ga zo door..." } }, "pl" : { @@ -46345,16 +46345,16 @@ "value" : "50명 계정 팔로우하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volg 50 accounts" + "value" : "Følg 50 kontoer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følg 50 kontoer" + "value" : "Volg 50 accounts" } }, "pl" : { @@ -46536,16 +46536,16 @@ "value" : "많은 친구들" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Veel vrienden" + "value" : "Masse av venner" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Masse av venner" + "value" : "Veel vrienden" } }, "pl" : { @@ -46727,16 +46727,16 @@ "value" : "100명 계정 팔로우하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volg 100 accounts" + "value" : "Følg 100 kontoer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følg 100 kontoer" + "value" : "Volg 100 accounts" } }, "pl" : { @@ -46918,16 +46918,16 @@ "value" : "100명의 친구들" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "100 vrienden" + "value" : "100 venner" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "100 venner" + "value" : "100 vrienden" } }, "pl" : { @@ -47109,16 +47109,16 @@ "value" : "300명 계정 팔로우하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volg 300 accounts" + "value" : "Følg 300 kontoer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følg 300 kontoer" + "value" : "Volg 300 accounts" } }, "pl" : { @@ -47294,16 +47294,16 @@ "value" : "친구 과잉" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vriend overbelast" + "value" : "Venn overbelastet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Venn overbelastet" + "value" : "Vriend overbelast" } }, "pl" : { @@ -47479,16 +47479,16 @@ "value" : "숨겨진 보물을 찾았습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Je hebt de verborgen schat gevonden" + "value" : "Du har funnet den skjulte skatten" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Du har funnet den skjulte skatten" + "value" : "Je hebt de verborgen schat gevonden" } }, "pl" : { @@ -47664,16 +47664,16 @@ "value" : "보물 찾기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Schat Jacht" + "value" : "Skatt Jakt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skatt Jakt" + "value" : "Schat Jacht" } }, "pl" : { @@ -47849,16 +47849,16 @@ "value" : "귀하의 홈 타임라인 속도가 분당 20개 노트를 초과하도록 하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Heb de snelheid van je home tijdlijn groter dan 20 npm (notities per minuut)" + "value" : "Få hastigheten på hjemmetidslinjen over 20 npm (notater per minutt)" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Få hastigheten på hjemmetidslinjen over 20 npm (notater per minutt)" + "value" : "Heb de snelheid van je home tijdlijn groter dan 20 npm (notities per minuut)" } }, "pl" : { @@ -48034,16 +48034,16 @@ "value" : "흐르는 타임라인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vloeiende tijdlijn" + "value" : "flytende tidslinje" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "flytende tidslinje" + "value" : "Vloeiende tijdlijn" } }, "pl" : { @@ -48219,16 +48219,16 @@ "value" : "\"I ❤ #Misskey\" 게시하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Plaats \"I ❤️ #Misskey\"" + "value" : "Innlegg \"I ❤️ #Misskey\"" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlegg \"I ❤️ #Misskey\"" + "value" : "Plaats \"I ❤️ #Misskey\"" } }, "pl" : { @@ -48404,16 +48404,16 @@ "value" : "미스키의 개발 팀이 당신의 지원에 매우 감사드립니다!" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Misskey's ontwikkelingsteam waardeert je steun zeer!" + "value" : "Misskey's utviklingsteam setter stor pris på din støtte!" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Misskey's utviklingsteam setter stor pris på din støtte!" + "value" : "Misskey's ontwikkelingsteam waardeert je steun zeer!" } }, "pl" : { @@ -48589,16 +48589,16 @@ "value" : "나는 미스키를 사랑해요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ik hou van Misskey" + "value" : "Jeg elsker Misskey" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Jeg elsker Misskey" + "value" : "Ik hou van Misskey" } }, "pl" : { @@ -48744,16 +48744,16 @@ "value" : "10秒ごとに0.005%の確率で獲得できます" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Heeft een kans om te worden verkregen met een kans van 0,005% per 10 seconden" + "value" : "Har en sjanse til å bli oppnådd med en sannsynlighet på 0,005% hvert 10 sekund" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Har en sjanse til å bli oppnådd med en sannsynlighet på 0,005% hvert 10 sekund" + "value" : "Heeft een kans om te worden verkregen met een kans van 0,005% per 10 seconden" } }, "pl" : { @@ -48911,16 +48911,16 @@ "value" : "그냥 운이 좋았다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Eenvoudig Geluk" + "value" : "Bare ren lykke" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bare ren lykke" + "value" : "Eenvoudig Geluk" } }, "pl" : { @@ -49102,16 +49102,16 @@ "value" : "생일에 로그인하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in op je verjaardag" + "value" : "Logg inn på bursdagen din" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn på bursdagen din" + "value" : "Log in op je verjaardag" } }, "pl" : { @@ -49293,16 +49293,16 @@ "value" : "생일 축하합니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gefeliciteerd met je verjaardag" + "value" : "Gratulerer med dagen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gratulerer med dagen" + "value" : "Gefeliciteerd met je verjaardag" } }, "pl" : { @@ -49484,16 +49484,16 @@ "value" : "새해 첫날에 로그인했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ingelogd op de eerste dag van het jaar" + "value" : "Logget på den første dagen av året" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logget på den første dagen av året" + "value" : "Ingelogd op de eerste dag van het jaar" } }, "pl" : { @@ -49669,16 +49669,16 @@ "value" : "이 인스턴스에서 또 다른 훌륭한 해를 기원합니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tot nog een geweldig jaar op dit exemplaar" + "value" : "Til et annet stort år i dette tilfellet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Til et annet stort år i dette tilfellet" + "value" : "Tot nog een geweldig jaar op dit exemplaar" } }, "pl" : { @@ -49860,16 +49860,16 @@ "value" : "새해 복 많이 받으세요!" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gelukkig nieuwjaar!" + "value" : "Godt nytt år!" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Godt nytt år!" + "value" : "Gelukkig nieuwjaar!" } }, "pl" : { @@ -50045,16 +50045,16 @@ "value" : "총 3일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "In totaal 3 dagen inloggen" + "value" : "Logg inn totalt 3 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 3 dager" + "value" : "In totaal 3 dagen inloggen" } }, "pl" : { @@ -50230,16 +50230,16 @@ "value" : "오늘부터 저를 미스키스트라고 부르세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Begint vandaag, noem me Misskist" + "value" : "Starter i dag, bare ring meg Misskist" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Starter i dag, bare ring meg Misskist" + "value" : "Begint vandaag, noem me Misskist" } }, "pl" : { @@ -50421,16 +50421,16 @@ "value" : "초보자 I" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beginner I" + "value" : "Nybegynner jeg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nybegynner jeg" + "value" : "Beginner I" } }, "pl" : { @@ -50606,16 +50606,16 @@ "value" : "총 7일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 7 dagen" + "value" : "Logg inn totalt 7 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 7 dager" + "value" : "Log in voor een totaal van 7 dagen" } }, "pl" : { @@ -50791,16 +50791,16 @@ "value" : "뭔가 익숙해지셨나요?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Heb je het gevoel dat je dingen al opgehangen hebt?" + "value" : "Føler som du har fått heftet på ting enda?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Føler som du har fått heftet på ting enda?" + "value" : "Heb je het gevoel dat je dingen al opgehangen hebt?" } }, "pl" : { @@ -50982,16 +50982,16 @@ "value" : "초보자 II" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beginner II" + "value" : "Nybegynner II" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nybegynner II" + "value" : "Beginner II" } }, "pl" : { @@ -51167,16 +51167,16 @@ "value" : "총 15일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 15 dagen" + "value" : "Logg inn totalt 15 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 15 dager" + "value" : "Log in voor een totaal van 15 dagen" } }, "pl" : { @@ -51358,16 +51358,16 @@ "value" : "초보자 III" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beginner III" + "value" : "Nybegynner III" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nybegynner III" + "value" : "Beginner III" } }, "pl" : { @@ -51543,16 +51543,16 @@ "value" : "총 30일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 30 dagen" + "value" : "Logg inn totalt 30 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 30 dager" + "value" : "Log in voor een totaal van 30 dagen" } }, "pl" : { @@ -51728,13 +51728,13 @@ "value" : "미스키스트 I" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Misskist I" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Misskist I" @@ -51913,16 +51913,16 @@ "value" : "총 60일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 60 dagen" + "value" : "Logg inn totalt 60 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 60 dager" + "value" : "Log in voor een totaal van 60 dagen" } }, "pl" : { @@ -52098,13 +52098,13 @@ "value" : "미스키스트 II" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Misskist II" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Misskist II" @@ -52283,16 +52283,16 @@ "value" : "총 100일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 100 dagen" + "value" : "Logg inn i totalt 100 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn i totalt 100 dager" + "value" : "Log in voor een totaal van 100 dagen" } }, "pl" : { @@ -52468,16 +52468,16 @@ "value" : "폭력적인 미스키스트" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gewelddadige Misskist" + "value" : "Voldelig delegasjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Voldelig delegasjon" + "value" : "Gewelddadige Misskist" } }, "pl" : { @@ -52653,13 +52653,13 @@ "value" : "미스키스트 III" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Misskist III" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Misskist III" @@ -52838,16 +52838,16 @@ "value" : "총 200일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 200 dagen" + "value" : "Logg inn for totalt 200 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn for totalt 200 dager" + "value" : "Log in voor een totaal van 200 dagen" } }, "pl" : { @@ -53023,16 +53023,16 @@ "value" : "정상 I" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Normaal I" + "value" : "Vanlig 1" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vanlig 1" + "value" : "Normaal I" } }, "pl" : { @@ -53208,16 +53208,16 @@ "value" : "총 300일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 300 dagen" + "value" : "Logg inn totalt 300 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 300 dager" + "value" : "Log in voor een totaal van 300 dagen" } }, "pl" : { @@ -53393,16 +53393,16 @@ "value" : "정상 II" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Normaal II" + "value" : "Vanlig II" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vanlig II" + "value" : "Normaal II" } }, "pl" : { @@ -53578,16 +53578,16 @@ "value" : "총 400일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in totaal 400 dagen in" + "value" : "Logg inn i totalt 400 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn i totalt 400 dager" + "value" : "Log in totaal 400 dagen in" } }, "pl" : { @@ -53763,16 +53763,16 @@ "value" : "정상 III" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Normaal III" + "value" : "Vanlig III" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vanlig III" + "value" : "Normaal III" } }, "pl" : { @@ -53948,16 +53948,16 @@ "value" : "총 500일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 500 dagen" + "value" : "Logg inn totalt 500 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 500 dager" + "value" : "Log in voor een totaal van 500 dagen" } }, "pl" : { @@ -54133,16 +54133,16 @@ "value" : "내 친구들, 내가 노트를 좋아한다고 자주 말해왔습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beste vrienden, er is vaak gezegd dat ik van notities houd" + "value" : "Mine venner har ofte blitt sagt at jeg liker notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mine venner har ofte blitt sagt at jeg liker notater" + "value" : "Beste vrienden, er is vaak gezegd dat ik van notities houd" } }, "pl" : { @@ -54318,16 +54318,16 @@ "value" : "전문가 I" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Expert I" + "value" : "Ekspert 1" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ekspert 1" + "value" : "Expert I" } }, "pl" : { @@ -54503,16 +54503,16 @@ "value" : "총 600일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 600 dagen" + "value" : "Logg inn i totalt 600 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn i totalt 600 dager" + "value" : "Log in voor een totaal van 600 dagen" } }, "pl" : { @@ -54688,16 +54688,16 @@ "value" : "전문가 II" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Expert II" + "value" : "Ekspert II" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ekspert II" + "value" : "Expert II" } }, "pl" : { @@ -54873,16 +54873,16 @@ "value" : "총 700일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in totaal 700 dagen in" + "value" : "Logg inn i til sammen 700 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn i til sammen 700 dager" + "value" : "Log in totaal 700 dagen in" } }, "pl" : { @@ -55058,16 +55058,16 @@ "value" : "전문가 III" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Expert III" + "value" : "Ekspert III" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ekspert III" + "value" : "Expert III" } }, "pl" : { @@ -55243,16 +55243,16 @@ "value" : "총 800일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 800 dagen" + "value" : "Log inn totalt 800 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Log inn totalt 800 dager" + "value" : "Log in voor een totaal van 800 dagen" } }, "pl" : { @@ -55428,16 +55428,16 @@ "value" : "노트의 달인 I" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Meester der notities I" + "value" : "Master i Merknader I" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Master i Merknader I" + "value" : "Meester der notities I" } }, "pl" : { @@ -55613,16 +55613,16 @@ "value" : "총 900일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in totaal 900 dagen in" + "value" : "Logg inn totalt 900 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 900 dager" + "value" : "Log in totaal 900 dagen in" } }, "pl" : { @@ -55798,16 +55798,16 @@ "value" : "노트의 달인 II" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Meester der notities II" + "value" : "Master i Merknader II" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Master i Merknader II" + "value" : "Meester der notities II" } }, "pl" : { @@ -55983,16 +55983,16 @@ "value" : "총 1,000일 로그인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Log in voor een totaal van 1.000 dagen" + "value" : "Logg inn totalt 1000 dager" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg inn totalt 1000 dager" + "value" : "Log in voor een totaal van 1.000 dagen" } }, "pl" : { @@ -56174,16 +56174,16 @@ "value" : "Misskey를 사용해 주셔서 감사합니다!" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bedankt voor het gebruiken van Misskey!" + "value" : "Takk for at du bruker Misskey!" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Takk for at du bruker Misskey!" + "value" : "Bedankt voor het gebruiken van Misskey!" } }, "pl" : { @@ -56359,16 +56359,16 @@ "value" : "노트의 달인 III" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Meester der notities III" + "value" : "Master i note III" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Master i note III" + "value" : "Meester der notities III" } }, "pl" : { @@ -56544,16 +56544,16 @@ "value" : "계정을 고양이로 표시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Markeer jouw account als een kat" + "value" : "Merk kontoen din som en katt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Merk kontoen din som en katt" + "value" : "Markeer jouw account als een kat" } }, "pl" : { @@ -56729,16 +56729,16 @@ "value" : "나중에 이름을 정할게요." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ik zal je later een naam geven." + "value" : "Jeg skal gi deg et navn senere." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Jeg skal gi deg et navn senere." + "value" : "Ik zal je later een naam geven." } }, "pl" : { @@ -56920,16 +56920,16 @@ "value" : "나는 고양이입니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ik ben een kat" + "value" : "Jeg er en katt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Jeg er en katt" + "value" : "Ik ben een kat" } }, "pl" : { @@ -57105,16 +57105,16 @@ "value" : "다른 사람이 당신의 노트를 즐겨찾기하도록 하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Laat iemand anders een van je notities favoriet maken" + "value" : "Har noen andre satt på en av notatene dine" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Har noen andre satt på en av notatene dine" + "value" : "Laat iemand anders een van je notities favoriet maken" } }, "pl" : { @@ -57290,16 +57290,16 @@ "value" : "별 찾기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Zoek sterren" + "value" : "Søker etter stjerner" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Søker etter stjerner" + "value" : "Zoek sterren" } }, "pl" : { @@ -57475,16 +57475,16 @@ "value" : "첫 번째 노트를 클립하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Knip je eerste notitie" + "value" : "Klipp din første notat" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Klipp din første notat" + "value" : "Knip je eerste notitie" } }, "pl" : { @@ -57660,16 +57660,16 @@ "value" : "필요하다... 클립하다..." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Mosterd... klem..." + "value" : "Må... klipp..." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Må... klipp..." + "value" : "Mosterd... klem..." } }, "pl" : { @@ -57845,16 +57845,16 @@ "value" : "게시 후 1분 이내에 노트를 삭제하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Een notitie verwijderen binnen een minuut na het plaatsen ervan" + "value" : "Slett et notat i løpet av ett minutt etter å poste det" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett et notat i løpet av ett minutt etter å poste det" + "value" : "Een notitie verwijderen binnen een minuut na het plaatsen ervan" } }, "pl" : { @@ -58030,16 +58030,16 @@ "value" : "신경 쓰지 마세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Onthoud" + "value" : "Glem det" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Glem det" + "value" : "Onthoud" } }, "pl" : { @@ -58215,16 +58215,16 @@ "value" : "첫 번째 노트를 즐겨찾기에 추가하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Favoriet je eerste notitie" + "value" : "Favoritt ditt første notat" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Favoritt ditt første notat" + "value" : "Favoriet je eerste notitie" } }, "pl" : { @@ -58400,13 +58400,13 @@ "value" : "별을 바라보는 사람" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Stargazer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Stargazer" @@ -58585,16 +58585,16 @@ "value" : "첫 번째 노트를 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Plaats je eerste notitie" + "value" : "Legg inn ditt første notat" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg inn ditt første notat" + "value" : "Plaats je eerste notitie" } }, "pl" : { @@ -58770,16 +58770,16 @@ "value" : "Misskey와 즐거운 시간을 보내세요!" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Veel tijd met Misskey!" + "value" : "Ha en god tid med Misskey!" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ha en god tid med Misskey!" + "value" : "Veel tijd met Misskey!" } }, "pl" : { @@ -58955,16 +58955,16 @@ "value" : "내 msky 설정 중입니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "stel gewoon mijn msky op" + "value" : "Nettopp msky min" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nettopp msky min" + "value" : "stel gewoon mijn msky op" } }, "pl" : { @@ -59146,16 +59146,16 @@ "value" : "10개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Plaats 10 notities" + "value" : "Post 10 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 10 notater" + "value" : "Plaats 10 notities" } }, "pl" : { @@ -59331,16 +59331,16 @@ "value" : "몇 개의 노트" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Sommige notities" + "value" : "Noen notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Noen notater" + "value" : "Sommige notities" } }, "pl" : { @@ -59522,16 +59522,16 @@ "value" : "100개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 100 notities" + "value" : "Post 100 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 100 notater" + "value" : "Post 100 notities" } }, "pl" : { @@ -59713,16 +59713,16 @@ "value" : "많은 노트" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Veel notities" + "value" : "Mange notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mange notater" + "value" : "Veel notities" } }, "pl" : { @@ -59904,16 +59904,16 @@ "value" : "500개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Plaats 500 notities" + "value" : "Post 500 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 500 notater" + "value" : "Plaats 500 notities" } }, "pl" : { @@ -60089,16 +60089,16 @@ "value" : "노트에 담긴" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gedekt in notities" + "value" : "Dekket i notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Dekket i notater" + "value" : "Gedekt in notities" } }, "pl" : { @@ -60280,16 +60280,16 @@ "value" : "1,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 1.000 notities" + "value" : "Post 1000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 1000 notater" + "value" : "Post 1.000 notities" } }, "pl" : { @@ -60471,16 +60471,16 @@ "value" : "산더미 같은 노트" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Een berg notities" + "value" : "A mountain of notes" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "A mountain of notes" + "value" : "Een berg notities" } }, "pl" : { @@ -60662,16 +60662,16 @@ "value" : "5,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 5.000 notities" + "value" : "Post 5000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 5000 notater" + "value" : "Post 5.000 notities" } }, "pl" : { @@ -60847,16 +60847,16 @@ "value" : "넘쳐나는 노트" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Notities overvloeien" + "value" : "Noter som flyter over" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Noter som flyter over" + "value" : "Notities overvloeien" } }, "pl" : { @@ -61038,16 +61038,16 @@ "value" : "10,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 10.000 notities" + "value" : "Post 10000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 10000 notater" + "value" : "Post 10.000 notities" } }, "pl" : { @@ -61223,16 +61223,16 @@ "value" : "슈퍼노트" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Supernotitie" + "value" : "Supernota" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Supernota" + "value" : "Supernotitie" } }, "pl" : { @@ -61414,16 +61414,16 @@ "value" : "20,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 20.000 notities" + "value" : "Post 20 000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 20 000 notater" + "value" : "Post 20.000 notities" } }, "pl" : { @@ -61605,16 +61605,16 @@ "value" : "더 많은 노트가 필요해요..." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Nood... aantekeningen..." + "value" : "Trenger mer... mer... notater..." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Trenger mer... mer... notater..." + "value" : "Nood... aantekeningen..." } }, "pl" : { @@ -61796,16 +61796,16 @@ "value" : "30,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 30.000 notities" + "value" : "Post 30.000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 30.000 notater" + "value" : "Post 30.000 notities" } }, "pl" : { @@ -61987,16 +61987,16 @@ "value" : "노트 노트 노트!" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Notities notities" + "value" : "Notater notater!" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Notater notater!" + "value" : "Notities notities" } }, "pl" : { @@ -62178,16 +62178,16 @@ "value" : "40,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 40.000 notities" + "value" : "Post 40.000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 40.000 notater" + "value" : "Post 40.000 notities" } }, "pl" : { @@ -62369,16 +62369,16 @@ "value" : "노트 공장" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Notitie fabriek" + "value" : "Merknader fabrikk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Merknader fabrikk" + "value" : "Notitie fabriek" } }, "pl" : { @@ -62560,16 +62560,16 @@ "value" : "50,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 50.000 notities" + "value" : "Post 50,000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 50,000 notater" + "value" : "Post 50.000 notities" } }, "pl" : { @@ -62751,16 +62751,16 @@ "value" : "노트의 행성" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Planet van notities" + "value" : "Planet of notes" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Planet of notes" + "value" : "Planet van notities" } }, "pl" : { @@ -62942,16 +62942,16 @@ "value" : "60,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 60.000 notities" + "value" : "Post 60.000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 60.000 notater" + "value" : "Post 60.000 notities" } }, "pl" : { @@ -63133,16 +63133,16 @@ "value" : "노트 퀘이사" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Quasar Notitie" + "value" : "Merk kvasar" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Merk kvasar" + "value" : "Quasar Notitie" } }, "pl" : { @@ -63324,16 +63324,16 @@ "value" : "70,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 70,000 notities" + "value" : "Post 70,000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 70,000 notater" + "value" : "Post 70,000 notities" } }, "pl" : { @@ -63515,16 +63515,16 @@ "value" : "노트 블랙홀" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Zwart gat notitie" + "value" : "Noter svart hull" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Noter svart hull" + "value" : "Zwart gat notitie" } }, "pl" : { @@ -63706,16 +63706,16 @@ "value" : "80,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 80,000 notities" + "value" : "Post 80,000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 80,000 notater" + "value" : "Post 80,000 notities" } }, "pl" : { @@ -63897,16 +63897,16 @@ "value" : "노트 은하" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Notitie sterrenstelsel" + "value" : "Note galakse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Note galakse" + "value" : "Notitie sterrenstelsel" } }, "pl" : { @@ -64088,16 +64088,16 @@ "value" : "90,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 90,000 notities" + "value" : "Post 90.000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 90.000 notater" + "value" : "Post 90,000 notities" } }, "pl" : { @@ -64279,16 +64279,16 @@ "value" : "노트 우주" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Noot universum" + "value" : "Notat univers" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Notat univers" + "value" : "Noot universum" } }, "pl" : { @@ -64470,16 +64470,16 @@ "value" : "100,000개 노트 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Post 100.000 notities" + "value" : "Post 100 000 notater" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post 100 000 notater" + "value" : "Post 100.000 notities" } }, "pl" : { @@ -64655,16 +64655,16 @@ "value" : "당신은 할 말이 많습니다." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "U hebt zeker veel te zeggen." + "value" : "Du er sikker på at du har mye å si." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Du er sikker på at du har mye å si." + "value" : "U hebt zeker veel te zeggen." } }, "pl" : { @@ -64846,16 +64846,16 @@ "value" : "모든 노트는 우리에게 속해있습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "ALLES UW MET BELONG OM TE ONS" + "value" : "ALLE DIN merk – FEIL TIL USAs" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "ALLE DIN merk – FEIL TIL USAs" + "value" : "ALLES UW MET BELONG OM TE ONS" } }, "pl" : { @@ -65031,16 +65031,16 @@ "value" : "동시에 3개 이상의 창을 엽니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Heb ten minste 3 vensters open op hetzelfde moment" + "value" : "Ha minst tre vinduer åpne samtidig" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ha minst tre vinduer åpne samtidig" + "value" : "Heb ten minste 3 vensters open op hetzelfde moment" } }, "pl" : { @@ -65216,16 +65216,16 @@ "value" : "멀티윈도우" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Multi-venster" + "value" : "Multi-Vindu" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Multi-Vindu" + "value" : "Multi-venster" } }, "pl" : { @@ -65401,16 +65401,16 @@ "value" : "스크래치패드에서 \"hello world\" 출력하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Uitvoer \"hallo wereld\" in het Scratchpad" + "value" : "Utgang \"hallo verden\" på Scratchpad" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Utgang \"hallo verden\" på Scratchpad" + "value" : "Uitvoer \"hallo wereld\" in het Scratchpad" } }, "pl" : { @@ -65592,16 +65592,16 @@ "value" : "안녕하세요, 세계!" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Hallo, wereld!" + "value" : "Hallo, verden!" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hallo, verden!" + "value" : "Hallo, wereld!" } }, "pl" : { @@ -65777,16 +65777,16 @@ "value" : "계정 생성 후 1년이 지났습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Eén jaar is verstreken sinds uw account is aangemaakt" + "value" : "Ett år har gått siden din konto ble opprettet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ett år har gått siden din konto ble opprettet" + "value" : "Eén jaar is verstreken sinds uw account is aangemaakt" } }, "pl" : { @@ -65962,16 +65962,16 @@ "value" : "1주년" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Één Verjaardag" + "value" : "Et års jubileum" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Et års jubileum" + "value" : "Één Verjaardag" } }, "pl" : { @@ -66147,16 +66147,16 @@ "value" : "계정 생성 후 2년이 지났습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Twee jaar zijn verstreken sinds het aanmaken van uw account" + "value" : "Det er gått 2 år siden din konto ble opprettet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Det er gått 2 år siden din konto ble opprettet" + "value" : "Twee jaar zijn verstreken sinds het aanmaken van uw account" } }, "pl" : { @@ -66332,16 +66332,16 @@ "value" : "2주년" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tweejarig Verjaardag" + "value" : "To års jubileum" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "To års jubileum" + "value" : "Tweejarig Verjaardag" } }, "pl" : { @@ -66517,16 +66517,16 @@ "value" : "계정 생성 후 3년이 지났습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Drie jaar zijn verstreken sinds de aanmaak van uw account" + "value" : "Det er gått tre år siden din konto ble opprettet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Det er gått tre år siden din konto ble opprettet" + "value" : "Drie jaar zijn verstreken sinds de aanmaak van uw account" } }, "pl" : { @@ -66702,16 +66702,16 @@ "value" : "3주년" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Drie jaar Verjaardag" + "value" : "Tre års jubileum" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tre års jubileum" + "value" : "Drie jaar Verjaardag" } }, "pl" : { @@ -66887,16 +66887,16 @@ "value" : "00:00에 노트를 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Plaats een notitie om 00:00" + "value" : "Skriv en melding klokken 00:00" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv en melding klokken 00:00" + "value" : "Plaats een notitie om 00:00" } }, "pl" : { @@ -67072,13 +67072,13 @@ "value" : "클릭 클릭 클릭 쨍" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Click Click Click Claaang" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Click Click Click Claaang" @@ -67257,16 +67257,16 @@ "value" : "시계 맞추기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Sprekende Klok" + "value" : "Snakker klokke" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Snakker klokke" + "value" : "Sprekende Klok" } }, "pl" : { @@ -67442,16 +67442,16 @@ "value" : "늦은 밤에 노트를 게시하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Plaats een notitie laat in de nacht" + "value" : "Legg inn en melding sent om natten" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg inn en melding sent om natten" + "value" : "Plaats een notitie laat in de nacht" } }, "pl" : { @@ -67627,16 +67627,16 @@ "value" : "이제 잘 시간입니다." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Het is hoog tijd om naar bed te gaan." + "value" : "Det er på tide å gå til sengs." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Det er på tide å gå til sengs." + "value" : "Het is hoog tijd om naar bed te gaan." } }, "pl" : { @@ -67812,16 +67812,16 @@ "value" : "야행성" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Nachtelijk" + "value" : "Nattlig" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nattlig" + "value" : "Nachtelijk" } }, "pl" : { @@ -67997,16 +67997,16 @@ "value" : "프로필을 설정하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Stel je profiel in" + "value" : "Sett opp din profil" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sett opp din profil" + "value" : "Stel je profiel in" } }, "pl" : { @@ -68182,16 +68182,16 @@ "value" : "잘 준비했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Goed bereid" + "value" : "Godt forberedt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Godt forberedt" + "value" : "Goed bereid" } }, "pl" : { @@ -68367,16 +68367,16 @@ "value" : "게시된 후 3초 이내에 100자 이상의 메모에 반응하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Reageer op een notitie die meer dan 100 tekens lang is binnen 3 seconden nadat deze is gepost" + "value" : "React på et notat som er over 100 tegn innenfor 3 sekunder etter at det er postet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "React på et notat som er over 100 tegn innenfor 3 sekunder etter at det er postet" + "value" : "Reageer op een notitie die meer dan 100 tekens lang is binnen 3 seconden nadat deze is gepost" } }, "pl" : { @@ -68552,16 +68552,16 @@ "value" : "정말로 그걸 읽었나요?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Heb je dat echt gelezen?" + "value" : "Har du virkelig lest det?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Har du virkelig lest det?" + "value" : "Heb je dat echt gelezen?" } }, "pl" : { @@ -68737,16 +68737,16 @@ "value" : "자신의 노트를 인용하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Citeer uw eigen notitie" + "value" : "Siter ditt eget notat" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Siter ditt eget notat" + "value" : "Citeer uw eigen notitie" } }, "pl" : { @@ -68922,16 +68922,16 @@ "value" : "자기 참조" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Zelfreferentie" + "value" : "Selv-referanse" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Selv-referanse" + "value" : "Zelfreferentie" } }, "pl" : { @@ -69113,16 +69113,16 @@ "value" : "이름을 \"syuilo\"로 설정하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Stel je naam in op \"syuilo\"" + "value" : "Sett ditt navn til \"syuilo\"" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sett ditt navn til \"syuilo\"" + "value" : "Stel je naam in op \"syuilo\"" } }, "pl" : { @@ -69304,16 +69304,16 @@ "value" : "신의 복잡성" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "God Complex" + "value" : "Kompleks Gud" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kompleks Gud" + "value" : "God Complex" } }, "pl" : { @@ -69489,16 +69489,16 @@ "value" : "극도로 짧은 시간 안에 알림 테스트를 반복적으로 트리거하세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Trigger de notificatie-test herhaaldelijk binnen extreem korte tijd" + "value" : "Utløs varslingstesten gjentatte ganger i løpet av svært kort tid" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Utløs varslingstesten gjentatte ganger i løpet av svært kort tid" + "value" : "Trigger de notificatie-test herhaaldelijk binnen extreem korte tijd" } }, "pl" : { @@ -69674,16 +69674,16 @@ "value" : "테스트 오버플로우" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Overloop testen" + "value" : "Prøving av overflyt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Prøving av overflyt" + "value" : "Overloop testen" } }, "pl" : { @@ -69859,16 +69859,16 @@ "value" : "튜토리얼 완료" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tutorial voltooid" + "value" : "Opplæring fullført" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Opplæring fullført" + "value" : "Tutorial voltooid" } }, "pl" : { @@ -70044,16 +70044,16 @@ "value" : "Misskey 초급 과정 졸업장" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Misskey Elementary Cursus Diploma" + "value" : "Misskey Elementary Course Diploma" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Misskey Elementary Course Diploma" + "value" : "Misskey Elementary Cursus Diploma" } }, "pl" : { @@ -70229,16 +70229,16 @@ "value" : "업적 목록을 최소 3분 동안 봅니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bekijk je lijst met prestaties voor ten minste 3 minuten" + "value" : "Se listen over prestasjoner i minst 3 minutter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Se listen over prestasjoner i minst 3 minutter" + "value" : "Bekijk je lijst met prestaties voor ten minste 3 minuten" } }, "pl" : { @@ -70414,16 +70414,16 @@ "value" : "좋아요 업적" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Likes Prestaties" + "value" : "Liker Prestasjoner" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liker Prestasjoner" + "value" : "Likes Prestaties" } }, "pl" : { @@ -70599,16 +70599,16 @@ "value" : "귀하의 인스턴스 차트를 봅니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bekijk de grafieken van je instantie" + "value" : "Vis din instans sine karter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis din instans sine karter" + "value" : "Bekijk de grafieken van je instantie" } }, "pl" : { @@ -70784,16 +70784,16 @@ "value" : "분석가" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Analist" + "value" : "Analytiker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Analytiker" + "value" : "Analist" } }, "pl" : { @@ -70938,16 +70938,16 @@ "value" : "お気に入り" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Favoriete" + "value" : "Favoritt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Favoritt" + "value" : "Favoriete" } }, "pl" : { @@ -71110,16 +71110,16 @@ "value" : "팔로우" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgen" + "value" : "Følg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følg" + "value" : "Volgen" } }, "pl" : { @@ -71264,16 +71264,16 @@ "value" : "お気に入り" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Favorieten" + "value" : "Favoritter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Favoritter" + "value" : "Favorieten" } }, "pl" : { @@ -71436,16 +71436,16 @@ "value" : "추천" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Aanbevolen" + "value" : "Anbefalt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Anbefalt" + "value" : "Aanbevolen" } }, "pl" : { @@ -71626,16 +71626,16 @@ "value" : "팔로잉" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgt" + "value" : "Følger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følger" + "value" : "Volgt" } }, "pl" : { @@ -71780,16 +71780,16 @@ "value" : "所有しています" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Eigendom" + "value" : "Eid" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Eid" + "value" : "Eigendom" } }, "pl" : { @@ -71916,13 +71916,13 @@ "value" : "Unfavourite" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Unfavourite" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Unfavourite" @@ -72052,16 +72052,16 @@ "value" : "フォローを解除" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ontvolgen" + "value" : "Ikke følg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ikke følg" + "value" : "Ontvolgen" } }, "pl" : { @@ -72472,13 +72472,13 @@ "value" : "앱" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "App" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "App" @@ -72663,16 +72663,16 @@ "value" : "당신을 팔로우했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "volgt jou nu" + "value" : "fulgte deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "fulgte deg" + "value" : "volgt jou nu" } }, "pl" : { @@ -72847,16 +72847,16 @@ "value" : "당신의 팔로우 요청을 수락했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "heeft je volgverzoek geaccepteerd" + "value" : "aksepterte din forespørsel" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "aksepterte din forespørsel" + "value" : "heeft je volgverzoek geaccepteerd" } }, "pl" : { @@ -73038,16 +73038,16 @@ "value" : "당신을 언급했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "noemde je" + "value" : "nevnte deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "nevnte deg" + "value" : "noemde je" } }, "pl" : { @@ -73223,16 +73223,16 @@ "value" : "참여했던 설문조사가 종료되었습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Een poll waaraan u deelnam, is beëindigd" + "value" : "En avstemming du deltok i er avsluttet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "En avstemming du deltok i er avsluttet" + "value" : "Een poll waaraan u deelnam, is beëindigd" } }, "pl" : { @@ -73413,16 +73413,16 @@ "value" : "인용했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "geciteerd" + "value" : "sitert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "sitert" + "value" : "geciteerd" } }, "pl" : { @@ -73603,16 +73603,16 @@ "value" : "다시 게시했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "gepost" + "value" : "repostet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "repostet" + "value" : "gepost" } }, "pl" : { @@ -73788,16 +73788,16 @@ "value" : "당신을 팔로우 요청했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "aangevraagd om je te volgen" + "value" : "bedt om å følge deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "bedt om å følge deg" + "value" : "aangevraagd om je te volgen" } }, "pl" : { @@ -73943,13 +73943,13 @@ "value" : "renote" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "renote" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "renote" @@ -74103,16 +74103,16 @@ "value" : "답장" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beantwoorden" + "value" : "svar" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "svar" + "value" : "Beantwoorden" } }, "pl" : { @@ -74258,16 +74258,16 @@ "value" : "Unknwn" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ontbrekend" + "value" : "Uknuste" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Uknuste" + "value" : "Ontbrekend" } }, "pl" : { @@ -74418,16 +74418,16 @@ "value" : "이 게시물의 문제는 무엇인가요?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Wat is het probleem met dit bericht?" + "value" : "Hva er problemet med dette innlegget?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hva er problemet med dette innlegget?" + "value" : "Wat is het probleem met dit bericht?" } }, "pl" : { @@ -74572,16 +74572,16 @@ "value" : "ここに問題を入力してください" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voer het probleem hier in" + "value" : "Skriv inn problemet her" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv inn problemet her" + "value" : "Voer het probleem hier in" } }, "pl" : { @@ -74738,16 +74738,16 @@ "value" : "신고하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rapporteren" + "value" : "Rapporter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rapporter" + "value" : "Rapporteren" } }, "pl" : { @@ -74928,16 +74928,16 @@ "value" : "혼합" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gemengd" + "value" : "Blandet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Blandet" + "value" : "Gemengd" } }, "pl" : { @@ -75082,16 +75082,16 @@ "value" : "モデル" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Model" + "value" : "Modell" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Modell" + "value" : "Model" } }, "pl" : { @@ -75248,16 +75248,16 @@ "value" : "더보기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Meer" + "value" : "Mer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mer" + "value" : "Meer" } }, "pl" : { @@ -75439,16 +75439,16 @@ "value" : "더보기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Meer" + "value" : "Mer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Mer" + "value" : "Meer" } }, "pl" : { @@ -75629,16 +75629,16 @@ "value" : "음소거" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Dempen" + "value" : "Demp" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Demp" + "value" : "Dempen" } }, "pl" : { @@ -75783,16 +75783,16 @@ "value" : "このユーザーをミュートしてもよろしいですか?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Weet je zeker dat je deze gebruiker wilt muten?" + "value" : "Er du sikker på at du vil dempe denne brukeren?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Er du sikker på at du vil dempe denne brukeren?" + "value" : "Weet je zeker dat je deze gebruiker wilt muten?" } }, "pl" : { @@ -75913,16 +75913,16 @@ "value" : "ユーザーをミュート" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruiker dempen" + "value" : "Demp bruker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Demp bruker" + "value" : "Gebruiker dempen" } }, "pl" : { @@ -76161,16 +76161,16 @@ "value" : "下書きはありません" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Geen Concepten" + "value" : "Ingen utkast" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ingen utkast" + "value" : "Geen Concepten" } }, "pl" : { @@ -76291,16 +76291,16 @@ "value" : "利用可能なモデルがありません" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Geen modellen beschikbaar" + "value" : "Ingen modeller tilgjengelig" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ingen modeller tilgjengelig" + "value" : "Geen modellen beschikbaar" } }, "pl" : { @@ -76415,16 +76415,16 @@ "value" : "リレーが設定されていません" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Geen relais geconfigureerd" + "value" : "Ingen releer konfigurert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ingen releer konfigurert" + "value" : "Geen relais geconfigureerd" } }, "pl" : { @@ -76539,16 +76539,16 @@ "value" : "%@ はまだ完了していません。" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Nog niet klaar voor %@" + "value" : "Ikke ferdig enda for %@" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ikke ferdig enda for %@" + "value" : "Nog niet klaar voor %@" } }, "pl" : { @@ -76657,16 +76657,16 @@ "value" : "未設定" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Niet ingesteld" + "value" : "Ikke angitt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ikke angitt" + "value" : "Niet ingesteld" } }, "pl" : { @@ -76799,16 +76799,16 @@ "value" : "投稿を送信できませんでした" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bericht versturen mislukt" + "value" : "Kunne ikke sende innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke sende innlegg" + "value" : "Bericht versturen mislukt" } }, "pl" : { @@ -76935,16 +76935,16 @@ "value" : "投稿を送信しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bericht verzonden" + "value" : "Post sendt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post sendt" + "value" : "Bericht verzonden" } }, "pl" : { @@ -77101,16 +77101,16 @@ "value" : "로그인 만료, 다시 로그인 해주세요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Inloggen verlopen, gelieve opnieuw in te loggen" + "value" : "Innlogging utløpt, vennligst logg inn igjen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlogging utløpt, vennligst logg inn igjen" + "value" : "Inloggen verlopen, gelieve opnieuw in te loggen" } }, "pl" : { @@ -77261,16 +77261,16 @@ "value" : "画像の保存に失敗しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opslaan van afbeelding mislukt" + "value" : "Kunne ikke lagre bilde" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kunne ikke lagre bilde" + "value" : "Opslaan van afbeelding mislukt" } }, "pl" : { @@ -77397,16 +77397,16 @@ "value" : "画像をライブラリに保存しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Afbeelding opgeslagen in bibliotheek" + "value" : "Bilde lagret i biblioteket" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bilde lagret i biblioteket" + "value" : "Afbeelding opgeslagen in bibliotheek" } }, "pl" : { @@ -77563,16 +77563,16 @@ "value" : "모두" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Allemaal" + "value" : "Alle" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Alle" + "value" : "Allemaal" } }, "pl" : { @@ -77753,16 +77753,16 @@ "value" : "댓글" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opmerking" + "value" : "Kommentar" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kommentar" + "value" : "Opmerking" } }, "pl" : { @@ -77943,16 +77943,16 @@ "value" : "좋아요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "vind-ik-leuk" + "value" : "Lik" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lik" + "value" : "vind-ik-leuk" } }, "pl" : { @@ -78097,16 +78097,16 @@ "value" : "メンション" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vermelding" + "value" : "Nevn" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nevn" + "value" : "Vermelding" } }, "pl" : { @@ -78227,16 +78227,16 @@ "value" : "Notification" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Notificatie" + "value" : "Varsling" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Varsling" + "value" : "Notificatie" } }, "pl" : { @@ -78399,13 +78399,13 @@ "value" : "확인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Ok" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Ok" @@ -78583,13 +78583,13 @@ "value" : "확인" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Ok" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Ok" @@ -78731,16 +78731,16 @@ "value" : "デバイス上" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Op apparaat" + "value" : "På enhet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "På enhet" + "value" : "Op apparaat" } }, "pl" : { @@ -78861,16 +78861,16 @@ "value" : "ブラウダーで開く" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Openen in blader" + "value" : "Åpne i nettleser" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Åpne i nettleser" + "value" : "Openen in blader" } }, "pl" : { @@ -78985,16 +78985,16 @@ "value" : "OpenAI 対応" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "OpenAI Compatibel" + "value" : "OpenAI kompatibelt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "OpenAI kompatibelt" + "value" : "OpenAI Compatibel" } }, "pl" : { @@ -79115,16 +79115,16 @@ "value" : "翻訳と概要に使用されるOpenAIモデル" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "OpenAI-model gebruikt voor vertaling en samenvatting" + "value" : "OpenAI-modell brukt for oversettelse og sammendrag" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "OpenAI-modell brukt for oversettelse og sammendrag" + "value" : "OpenAI-model gebruikt voor vertaling en samenvatting" } }, "pl" : { @@ -79245,16 +79245,16 @@ "value" : "OPMLからインポート" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Importeren uit OPML" + "value" : "Importer fra OPML" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Importer fra OPML" + "value" : "Importeren uit OPML" } }, "pl" : { @@ -79381,16 +79381,16 @@ "value" : "OPMLからインポート" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Importeren uit OPML" + "value" : "Importer fra OPML" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Importer fra OPML" + "value" : "Importeren uit OPML" } }, "pl" : { @@ -79517,16 +79517,16 @@ "value" : "このページにアクセスするには再ログインが必要です" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "U moet opnieuw inloggen om toegang te krijgen tot deze pagina" + "value" : "Du må logge inn på nytt for å få tilgang til denne siden" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Du må logge inn på nytt for å få tilgang til denne siden" + "value" : "U moet opnieuw inloggen om toegang te krijgen tot deze pagina" } }, "pl" : { @@ -79647,16 +79647,16 @@ "value" : "アクセスが拒否されました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toestemming geweigerd" + "value" : "Tilgang nektet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tilgang nektet" + "value" : "Toestemming geweigerd" } }, "pl" : { @@ -79807,16 +79807,16 @@ "value" : "투표가 만료됨" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Poll verlopen" + "value" : "Avstemningen utløpt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Avstemningen utløpt" + "value" : "Poll verlopen" } }, "pl" : { @@ -79961,16 +79961,16 @@ "value" : "有効期限:" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verlopen op" + "value" : "Utløpt på" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Utløpt på" + "value" : "Verlopen op" } }, "pl" : { @@ -80127,16 +80127,16 @@ "value" : "투표" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Stemming" + "value" : "Stem" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Stem" + "value" : "Stemming" } }, "pl" : { @@ -80317,16 +80317,16 @@ "value" : "게시물" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Berichten" + "value" : "Innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlegg" + "value" : "Berichten" } }, "pl" : { @@ -80507,16 +80507,16 @@ "value" : "좋아요" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vind-ik-leuk" + "value" : "Liker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Liker" + "value" : "Vind-ik-leuk" } }, "pl" : { @@ -80697,16 +80697,16 @@ "value" : "미디어" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Medium" + "value" : "Medier" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Medier" + "value" : "Medium" } }, "pl" : { @@ -80887,16 +80887,16 @@ "value" : "게시물 및 회신" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Berichten en antwoorden" + "value" : "Innlegg og svar" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlegg og svar" + "value" : "Berichten en antwoorden" } }, "pl" : { @@ -81077,16 +81077,16 @@ "value" : "게시물" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Berichten" + "value" : "Innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlegg" + "value" : "Berichten" } }, "pl" : { @@ -81267,16 +81267,16 @@ "value" : "인용하기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Offerte" + "value" : "Sitat" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sitat" + "value" : "Offerte" } }, "pl" : { @@ -81457,16 +81457,16 @@ "value" : "반응 추가" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Reactie toevoegen" + "value" : "Legg til reaksjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til reaksjon" + "value" : "Reactie toevoegen" } }, "pl" : { @@ -81647,16 +81647,16 @@ "value" : "반응 제거" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Reactie verwijderen" + "value" : "Fjern reaksjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Fjern reaksjon" + "value" : "Reactie verwijderen" } }, "pl" : { @@ -81831,16 +81831,16 @@ "value" : "거부" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Afwijzen" + "value" : "Avvis" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Avvis" + "value" : "Afwijzen" } }, "pl" : { @@ -82021,16 +82021,16 @@ "value" : "차단됨" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Geblokkeerd" + "value" : "Blokkert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Blokkert" + "value" : "Geblokkeerd" } }, "pl" : { @@ -82211,16 +82211,16 @@ "value" : "팔로우" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgen" + "value" : "Følg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følg" + "value" : "Volgen" } }, "pl" : { @@ -82401,16 +82401,16 @@ "value" : "팔로잉" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgt" + "value" : "Følger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følger" + "value" : "Volgt" } }, "pl" : { @@ -82591,16 +82591,16 @@ "value" : "당신을 팔로우합니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgt jou" + "value" : "Følger deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følger deg" + "value" : "Volgt jou" } }, "pl" : { @@ -82781,16 +82781,16 @@ "value" : "요청됨" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Aangevraagd" + "value" : "Forespurt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Forespurt" + "value" : "Aangevraagd" } }, "pl" : { @@ -82971,16 +82971,16 @@ "value" : "답장" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beantwoorden" + "value" : "Svar" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Svar" + "value" : "Beantwoorden" } }, "pl" : { @@ -83155,16 +83155,16 @@ "value" : "%@에게 답장" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Antwoord op %@" + "value" : "Svar til %@" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Svar til %@" + "value" : "Antwoord op %@" } }, "pl" : { @@ -83345,16 +83345,16 @@ "value" : "보고서" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Rapporteren" + "value" : "Rapporter" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rapporter" + "value" : "Rapporteren" } }, "pl" : { @@ -83529,16 +83529,16 @@ "value" : "재시도" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opnieuw" + "value" : "Prøv igjen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Prøv igjen" + "value" : "Opnieuw" } }, "pl" : { @@ -83719,16 +83719,16 @@ "value" : "리트윗" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Retweet" + "value" : "Gjenkjenn" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gjenkjenn" + "value" : "Retweet" } }, "pl" : { @@ -83903,16 +83903,16 @@ "value" : "리트윗 제거" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verwijder retweet" + "value" : "Fjern innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Fjern innlegg" + "value" : "Verwijder retweet" } }, "pl" : { @@ -84093,16 +84093,16 @@ "value" : "추가" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toevoegen" + "value" : "Legg til" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til" + "value" : "Toevoegen" } }, "pl" : { @@ -84247,16 +84247,16 @@ "value" : "RSS ソースを検出しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gedetecteerde RSS-bron" + "value" : "Oppdaget RSS kilde" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oppdaget RSS kilde" + "value" : "Gedetecteerde RSS-bron" } }, "pl" : { @@ -84389,16 +84389,16 @@ "value" : "RssHub를 사용하려면 RssHub 호스트를 설정하거나 공개 RssHub 서버를 선택해야 합니다." } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "U moet de RssHub host instellen als u RssHub wilt gebruiken, of selecteer de publieke RssHub server" + "value" : "Du må angi RssHUB-vert hvis du vil bruke RsssHub, eller velge den offentlige RssHUB-serveren" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Du må angi RssHUB-vert hvis du vil bruke RsssHub, eller velge den offentlige RssHUB-serveren" + "value" : "U moet de RssHub host instellen als u RssHub wilt gebruiken, of selecteer de publieke RssHub server" } }, "pl" : { @@ -84531,16 +84531,16 @@ "value" : "ここにRssHubホストを入力してください" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voer hier de host van RssHub in" + "value" : "Vennligst skriv Rsshule-vert her" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vennligst skriv Rsshule-vert her" + "value" : "Voer hier de host van RssHub in" } }, "pl" : { @@ -84673,16 +84673,16 @@ "value" : "RssHub 호스트" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "RssHub host" + "value" : "RssHUB-vert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "RssHUB-vert" + "value" : "RssHub host" } }, "pl" : { @@ -84815,16 +84815,16 @@ "value" : "RSS ソース名" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "RSS bronnaam" + "value" : "RSS kilde navn" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "RSS kilde navn" + "value" : "RSS bronnaam" } }, "pl" : { @@ -84945,16 +84945,16 @@ "value" : "開く" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Openen in" + "value" : "Åpne i" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Åpne i" + "value" : "Openen in" } }, "pl" : { @@ -85111,13 +85111,13 @@ "value" : "앱" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "App" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "App" @@ -85265,16 +85265,16 @@ "value" : "ブラウザー" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "browser" + "value" : "Nettleser" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Nettleser" + "value" : "browser" } }, "pl" : { @@ -85413,16 +85413,16 @@ "value" : "검색된 RSS 소스" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Ontdekte Rss Bronnen" + "value" : "Oppdaget Rss kilder" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oppdaget Rss kilder" + "value" : "Ontdekte Rss Bronnen" } }, "pl" : { @@ -85555,13 +85555,13 @@ "value" : "RSS" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "RSS" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "RSS" @@ -85685,13 +85685,13 @@ "value" : "RSS URL" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "RSS URL" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "RSS URL" @@ -85821,16 +85821,16 @@ "value" : "ここにURLを入力してください" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voer de URL hier in" + "value" : "Skriv inn URL'en her" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv inn URL'en her" + "value" : "Voer de URL hier in" } }, "pl" : { @@ -85945,16 +85945,16 @@ "value" : "ドラフトを保存" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Concept opslaan" + "value" : "Lagre utkast" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lagre utkast" + "value" : "Concept opslaan" } }, "pl" : { @@ -86069,16 +86069,16 @@ "value" : "出発前に現在のコンテンツを下書きとして保存しますか?" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Sla je huidige inhoud op als een concept voordat je vertrekt?" + "value" : "Lagre gjeldende innhold som utkast før du drar?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lagre gjeldende innhold som utkast før du drar?" + "value" : "Sla je huidige inhoud op als een concept voordat je vertrekt?" } }, "pl" : { @@ -86199,16 +86199,16 @@ "value" : "保存が完了しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opslaan voltooid" + "value" : "Lagring fullført" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lagring fullført" + "value" : "Opslaan voltooid" } }, "pl" : { @@ -86329,16 +86329,16 @@ "value" : "データの保存に失敗しました" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gegevens opslaan mislukt" + "value" : "Klarte ikke å lagre data" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Klarte ikke å lagre data" + "value" : "Gegevens opslaan mislukt" } }, "pl" : { @@ -86459,16 +86459,16 @@ "value" : "スクリーンショットを保存" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Schermafdruk opslaan" + "value" : "Lagre skjermbilde" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lagre skjermbilde" + "value" : "Schermafdruk opslaan" } }, "pl" : { @@ -86631,16 +86631,16 @@ "value" : "검색" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Zoeken" + "value" : "Søk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Søk" + "value" : "Zoeken" } }, "pl" : { @@ -86821,16 +86821,16 @@ "value" : "게시물" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Statuses" + "value" : "Innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlegg" + "value" : "Statuses" } }, "pl" : { @@ -87011,16 +87011,16 @@ "value" : "검색" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Zoeken" + "value" : "Søk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Søk" + "value" : "Zoeken" } }, "pl" : { @@ -87201,16 +87201,16 @@ "value" : "사용자" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gebruikers" + "value" : "Brukere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Brukere" + "value" : "Gebruikers" } }, "pl" : { @@ -87355,16 +87355,16 @@ "value" : "AIプロバイダを選択" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Selecteer AI provider" + "value" : "Velg AI-leverandør" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Velg AI-leverandør" + "value" : "Selecteer AI provider" } }, "pl" : { @@ -87485,16 +87485,16 @@ "value" : "アイコンを選択" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Selecteer pictogram" + "value" : "Velg ikon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Velg ikon" + "value" : "Selecteer pictogram" } }, "pl" : { @@ -87609,16 +87609,16 @@ "value" : "モデルを選択" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Selecteer model" + "value" : "Velg modell" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Velg modell" + "value" : "Selecteer model" } }, "pl" : { @@ -87775,16 +87775,16 @@ "value" : "보내기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verzenden" + "value" : "Sende" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sende" + "value" : "Verzenden" } }, "pl" : { @@ -87965,16 +87965,16 @@ "value" : "메시지 보내기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verstuur bericht" + "value" : "Send melding" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Send melding" + "value" : "Verstuur bericht" } }, "pl" : { @@ -88126,16 +88126,16 @@ "value" : "表示" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Weergeven" + "value" : "Vis" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis" + "value" : "Weergeven" } }, "pl" : { @@ -88292,16 +88292,16 @@ "value" : "서버 URL" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Server URL" + "value" : "URL til server" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "URL til server" + "value" : "Server URL" } }, "pl" : { @@ -88440,16 +88440,16 @@ "value" : "サーバー URL は '/' で終わり、OpenAI 互換の v1/chat/completions API をサポートする必要があります。" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Server-URL moet eindigen met '/' en de OpenAI-compatibele v1/chat/aanvullingen API ondersteunen." + "value" : "Server-URL må avsluttes med '/' og støtte OpenAI-kompatibelt v1/chat/completions API." } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Server-URL må avsluttes med '/' og støtte OpenAI-kompatibelt v1/chat/completions API." + "value" : "Server-URL moet eindigen met '/' en de OpenAI-compatibele v1/chat/aanvullingen API ondersteunen." } }, "pl" : { @@ -88571,16 +88571,16 @@ "value" : "RSS ソースを管理" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Uw RSS-bronnen beheren" + "value" : "Rediger RSS-kildene dine" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger RSS-kildene dine" + "value" : "Uw RSS-bronnen beheren" } }, "pl" : { @@ -88701,16 +88701,16 @@ "value" : "RSS管理" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "RSS Management" + "value" : "RSS administrasjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "RSS administrasjon" + "value" : "RSS Management" } }, "pl" : { @@ -88837,16 +88837,16 @@ "value" : "データをエクスポート" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gegevens exporteren" + "value" : "Eksporter data" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Eksporter data" + "value" : "Gegevens exporteren" } }, "pl" : { @@ -88967,16 +88967,16 @@ "value" : "データベースと設定を含むすべてのデータをエクスポート" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Exporteer alle gegevens inclusief database en instellingen" + "value" : "Eksporter alle data inkludert database og innstillinger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Eksporter alle data inkludert database og innstillinger" + "value" : "Exporteer alle gegevens inclusief database en instellingen" } }, "pl" : { @@ -89097,16 +89097,16 @@ "value" : "データのインポート" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gegevens importeren" + "value" : "Importer data" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Importer data" + "value" : "Gegevens importeren" } }, "pl" : { @@ -89227,16 +89227,16 @@ "value" : "ファイルからデータをインポート (既存のデータとマージ、重複を置き換えます)" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gegevens importeren uit bestand (samengevoegd met bestaande gegevens, vervangt duplicaten)" + "value" : "Importer data fra fil (sammenslåing med eksisterende data, erstatter duplikater)" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Importer data fra fil (sammenslåing med eksisterende data, erstatter duplikater)" + "value" : "Gegevens importeren uit bestand (samengevoegd met bestaande gegevens, vervangt duplicaten)" } }, "pl" : { @@ -89393,16 +89393,16 @@ "value" : "설정" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Instellingen" + "value" : "Innstillinger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innstillinger" + "value" : "Instellingen" } }, "pl" : { @@ -89583,16 +89583,16 @@ "value" : "공유" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Delen" + "value" : "Del" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Del" + "value" : "Delen" } }, "pl" : { @@ -89737,16 +89737,16 @@ "value" : "リンクを共有" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Link delen" + "value" : "Del kobling" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Del kobling" + "value" : "Link delen" } }, "pl" : { @@ -89873,16 +89873,16 @@ "value" : "スクリーンショットを共有" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Schermafdruk delen" + "value" : "Del skjermbilde" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Del skjermbilde" + "value" : "Schermafdruk delen" } }, "pl" : { @@ -90009,16 +90009,16 @@ "value" : "Fixvxでシェア" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Delen via Fixvx" + "value" : "Del via Fixvx" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Del via Fixvx" + "value" : "Delen via Fixvx" } }, "pl" : { @@ -90145,16 +90145,16 @@ "value" : "FxEmbedで共有" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Delen via FxEmbed" + "value" : "Del via FxEmbed" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Del via FxEmbed" + "value" : "Delen via FxEmbed" } }, "pl" : { @@ -90312,16 +90312,16 @@ "value" : "미디어 표시" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Media tonen" + "value" : "Vis media" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis media" + "value" : "Media tonen" } }, "pl" : { @@ -90484,16 +90484,16 @@ "value" : "소셜" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Sociaal" + "value" : "Sosial" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sosial" + "value" : "Sociaal" } }, "pl" : { @@ -90626,16 +90626,16 @@ "value" : "ステータス詳細" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Status detail" + "value" : "Post detaljer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Post detaljer" + "value" : "Status detail" } }, "pl" : { @@ -90792,16 +90792,16 @@ "value" : "공유" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Delen" + "value" : "Del" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Del" + "value" : "Delen" } }, "pl" : { @@ -90952,16 +90952,16 @@ "value" : "サマリー投稿" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Samenvatting bericht" + "value" : "Sammendrag post" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Sammendrag post" + "value" : "Samenvatting bericht" } }, "pl" : { @@ -91088,16 +91088,16 @@ "value" : "投稿を翻訳" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bericht vertalen" + "value" : "Oversett innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oversett innlegg" + "value" : "Bericht vertalen" } }, "pl" : { @@ -91254,16 +91254,16 @@ "value" : "팔로워" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgers" + "value" : "Følgere" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følgere" + "value" : "Volgers" } }, "pl" : { @@ -91408,16 +91408,16 @@ "value" : "フォロワーだけがこの投稿を見ることができます" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Alleen volgers kunnen dit bericht zien" + "value" : "Bare tilhengere kan se denne posten" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bare tilhengere kan se denne posten" + "value" : "Alleen volgers kunnen dit bericht zien" } }, "pl" : { @@ -91574,16 +91574,16 @@ "value" : "홈" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Startpagina" + "value" : "Hjem" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hjem" + "value" : "Startpagina" } }, "pl" : { @@ -91728,16 +91728,16 @@ "value" : "このインスタンス上のユーザーのみがこの投稿を見ることができます" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Alleen gebruikers op dit exemplaar kunnen dit bericht zien" + "value" : "Bare brukere i denne forekomsten kan se dette innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Bare brukere i denne forekomsten kan se dette innlegget" + "value" : "Alleen gebruikers op dit exemplaar kunnen dit bericht zien" } }, "pl" : { @@ -91894,16 +91894,16 @@ "value" : "공개" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Openbaar" + "value" : "Offentlig" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Offentlig" + "value" : "Openbaar" } }, "pl" : { @@ -92048,16 +92048,16 @@ "value" : "誰でもこの投稿を見ることができます。" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Iedereen kan dit bericht zien en opnieuw plaatsen" + "value" : "Alle kan se og poste dette innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Alle kan se og poste dette innlegget" + "value" : "Iedereen kan dit bericht zien en opnieuw plaatsen" } }, "pl" : { @@ -92214,16 +92214,16 @@ "value" : "명시된 사람만" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opgegeven" + "value" : "Spesifisert" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Spesifisert" + "value" : "Opgegeven" } }, "pl" : { @@ -92368,16 +92368,16 @@ "value" : "メンションされたユーザーのみがこの投稿を見ることができます" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Alleen vermelde gebruikers kunnen dit bericht zien" + "value" : "Kun nevnte brukere kan se dette innlegget" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kun nevnte brukere kan se dette innlegget" + "value" : "Alleen vermelde gebruikers kunnen dit bericht zien" } }, "pl" : { @@ -92498,16 +92498,16 @@ "value" : "確認する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bevestigen" + "value" : "Slett databasemellomlager?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett databasemellomlager?" + "value" : "Bevestigen" } }, "pl" : { @@ -92628,16 +92628,16 @@ "value" : "%1$lld ユーザーと %2$lld ステータスが削除されます" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "%1$lld gebruikers en %2$lld statussen worden verwijderd" + "value" : "Slett database cache, %1$lld brukere og %2$lld innlegg vil bli slettet" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett database cache, %1$lld brukere og %2$lld innlegg vil bli slettet" + "value" : "%1$lld gebruikers en %2$lld statussen worden verwijderd" } }, "pl" : { @@ -92794,16 +92794,16 @@ "value" : "이미지 캐시 지우기" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Afbeeldingencache legen" + "value" : "Tøm bildebuffer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tøm bildebuffer" + "value" : "Afbeeldingencache legen" } }, "pl" : { @@ -92948,16 +92948,16 @@ "value" : "確認する" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bevestigen" + "value" : "Slett bilde-hurtiglager?" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett bilde-hurtiglager?" + "value" : "Bevestigen" } }, "pl" : { @@ -93114,16 +93114,16 @@ "value" : "Flare의 저장소 관리" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Beheer Flare's opslag" + "value" : "Behandle flammetall lagring" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Behandle flammetall lagring" + "value" : "Beheer Flare's opslag" } }, "pl" : { @@ -93304,16 +93304,16 @@ "value" : "저장소" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opslagruimte" + "value" : "Lagring" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Lagring" + "value" : "Opslagruimte" } }, "pl" : { @@ -93488,16 +93488,16 @@ "value" : "앱 로깅" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "App logboek" + "value" : "Logg app" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Logg app" + "value" : "App logboek" } }, "pl" : { @@ -93636,16 +93636,16 @@ "value" : "候補" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Suggesties" + "value" : "Forslag" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Forslag" + "value" : "Suggesties" } }, "pl" : { @@ -93766,16 +93766,16 @@ "value" : "AIで長いテキストをまとめます" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vat lange tekst samen met AI" + "value" : "oppsummerer lang tekst med AI" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "oppsummerer lang tekst med AI" + "value" : "Vat lange tekst samen met AI" } }, "pl" : { @@ -93896,16 +93896,16 @@ "value" : "この記事を要約" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Dit artikel samenvatten" + "value" : "oppsummerer denne artikkelen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "oppsummerer denne artikkelen" + "value" : "Dit artikel samenvatten" } }, "pl" : { @@ -94026,16 +94026,16 @@ "value" : "概要のプロンプト表示" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Samenvatting Prompt" + "value" : "Ledetekst i sammendrag" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ledetekst i sammendrag" + "value" : "Samenvatting Prompt" } }, "pl" : { @@ -94186,16 +94186,16 @@ "value" : "시스템" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Systeem" + "value" : "Systemadministrasjon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Systemadministrasjon" + "value" : "Systeem" } }, "pl" : { @@ -94340,16 +94340,16 @@ "value" : "フレアの許可または言語を更新" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toestemming of taal van Vlam bijwerken" + "value" : "Oppdatere flammets tillatelse eller språk" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oppdatere flammets tillatelse eller språk" + "value" : "Toestemming of taal van Vlam bijwerken" } }, "pl" : { @@ -94470,16 +94470,16 @@ "value" : "システム設定" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Systeem instellingen" + "value" : "System innstillinger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "System innstillinger" + "value" : "Systeem instellingen" } }, "pl" : { @@ -94600,16 +94600,16 @@ "value" : "グループを追加" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Groep toevoegen" + "value" : "Legg til gruppe" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til gruppe" + "value" : "Groep toevoegen" } }, "pl" : { @@ -94730,16 +94730,16 @@ "value" : "タブを追加" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tabblad toevoegen" + "value" : "Legg til fane" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Legg til fane" + "value" : "Tabblad toevoegen" } }, "pl" : { @@ -94896,16 +94896,16 @@ "value" : "삭제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Verwijderen" + "value" : "Slett" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Slett" + "value" : "Verwijderen" } }, "pl" : { @@ -95086,16 +95086,16 @@ "value" : "편집" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bewerken" + "value" : "Rediger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger" + "value" : "Bewerken" } }, "pl" : { @@ -95240,16 +95240,16 @@ "value" : "グループを編集" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Groep bewerken" + "value" : "Rediger gruppe" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Rediger gruppe" + "value" : "Groep bewerken" } }, "pl" : { @@ -95370,13 +95370,13 @@ "value" : "Tab icon" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Tab icon" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Tab icon" @@ -95506,16 +95506,16 @@ "value" : "タブのタイトル" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tabblad titel" + "value" : "Tittel på fane" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tittel på fane" + "value" : "Tabblad titel" } }, "pl" : { @@ -95642,16 +95642,16 @@ "value" : "ここにタブのタイトルを入力してください" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Voer de tab titel hier in" + "value" : "Skriv inn fanetittel her" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Skriv inn fanetittel her" + "value" : "Voer de tab titel hier in" } }, "pl" : { @@ -95772,16 +95772,16 @@ "value" : "ユーザーのアバターを表示" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Toon gebruikersafbeelding" + "value" : "Vis brukerens profilbilde" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis brukerens profilbilde" + "value" : "Toon gebruikersafbeelding" } }, "pl" : { @@ -95938,16 +95938,16 @@ "value" : "혼합된 타임라인은 모든 탭의 타임라인 결과를 하나의 탭으로 혼합합니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Gemengde tijdlijn mengt alle resultaten van de tabbladen in één tabblad" + "value" : "Blandet tidslinje vil blande alle faners tidslinjen resulterer i en fane" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Blandet tidslinje vil blande alle faners tidslinjen resulterer i en fane" + "value" : "Gemengde tijdlijn mengt alle resultaten van de tabbladen in één tabblad" } }, "pl" : { @@ -96092,16 +96092,16 @@ "value" : "混合タイムラインタブを有効にする" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Inschakelen gemengde tijdlijn tabblad" + "value" : "Aktiver blandet tidslinjefanel" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Aktiver blandet tidslinjefanel" + "value" : "Inschakelen gemengde tijdlijn tabblad" } }, "pl" : { @@ -96222,16 +96222,16 @@ "value" : "グループ" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Groeperen" + "value" : "Gruppe" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gruppe" + "value" : "Groeperen" } }, "pl" : { @@ -96352,16 +96352,16 @@ "value" : "このグループにはタブがありません" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Geen tabbladen in deze groep" + "value" : "Ingen faner i denne gruppen" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ingen faner i denne gruppen" + "value" : "Geen tabbladen in deze groep" } }, "pl" : { @@ -96482,16 +96482,16 @@ "value" : "グループ名" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Groep Naam" + "value" : "Gruppens navn" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Gruppens navn" + "value" : "Groep Naam" } }, "pl" : { @@ -96545,6 +96545,7 @@ } }, "tab_settings_section_main_tabs" : { + "extractionState" : "stale", "localizations" : { "ar" : { "stringUnit" : { @@ -96618,16 +96619,16 @@ "value" : "メインタブ" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Belangrijkste tabbladen" + "value" : "Hovedfaner" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Hovedfaner" + "value" : "Belangrijkste tabbladen" } }, "pl" : { @@ -96784,16 +96785,16 @@ "value" : "탭 설정" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Tabblad instellingen" + "value" : "Fane innstillinger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Fane innstillinger" + "value" : "Tabblad instellingen" } }, "pl" : { @@ -96932,13 +96933,13 @@ "value" : "Tabs" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", "value" : "Tabs" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", "value" : "Tabs" @@ -97098,16 +97099,16 @@ "value" : "테마" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Thema" + "value" : "Tema" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tema" + "value" : "Thema" } }, "pl" : { @@ -97252,16 +97253,16 @@ "value" : "翻訳プロンプトの翻訳" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Prompt vertalen" + "value" : "Oversett prompt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oversett prompt" + "value" : "Prompt vertalen" } }, "pl" : { @@ -97382,16 +97383,16 @@ "value" : "テキストをAIで翻訳" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vertaal tekst met AI" + "value" : "Oversett tekst med AI" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Oversett tekst med AI" + "value" : "Vertaal tekst met AI" } }, "pl" : { @@ -97548,16 +97549,16 @@ "value" : "차단 해제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Deblokkeer" + "value" : "Avblokker" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Avblokker" + "value" : "Deblokkeer" } }, "pl" : { @@ -97738,16 +97739,16 @@ "value" : "좋아요 취소" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Anders dan" + "value" : "Ulikt" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Ulikt" + "value" : "Anders dan" } }, "pl" : { @@ -97922,16 +97923,16 @@ "value" : "음소거 해제" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Deblokkeer" + "value" : "Udemp" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Udemp" + "value" : "Deblokkeer" } }, "pl" : { @@ -98112,16 +98113,16 @@ "value" : "팔로워" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volger" + "value" : "Følger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følger" + "value" : "Volger" } }, "pl" : { @@ -98302,16 +98303,16 @@ "value" : "팔로잉" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Volgt" + "value" : "Følger" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Følger" + "value" : "Volgt" } }, "pl" : { @@ -98451,16 +98452,16 @@ "value" : "保存した下書きの表示と管理" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Bekijk en beheer opgeslagen concepten" + "value" : "Vis og administrer lagrede utkast" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Vis og administrer lagrede utkast" + "value" : "Bekijk en beheer opgeslagen concepten" } }, "pl" : { @@ -98618,16 +98619,16 @@ "value" : "당신의 상태에 좋아요를 눌렀습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Vind je status leuk" + "value" : "Likte ditt innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Likte ditt innlegg" + "value" : "Vind je status leuk" } }, "pl" : { @@ -98808,16 +98809,16 @@ "value" : "댓글" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Opmerkingen" + "value" : "Kommentarer" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Kommentarer" + "value" : "Opmerkingen" } }, "pl" : { @@ -98962,16 +98963,16 @@ "value" : "リポスト" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "Herposten" + "value" : "Tilbakestilling" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Tilbakestilling" + "value" : "Herposten" } }, "pl" : { @@ -99128,16 +99129,16 @@ "value" : "상태" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "status" + "value" : "Innlegg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "Innlegg" + "value" : "status" } }, "pl" : { @@ -99319,16 +99320,16 @@ "value" : "당신을 언급했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "vermeldt je" + "value" : "nevner deg" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "nevner deg" + "value" : "vermeldt je" } }, "pl" : { @@ -99504,16 +99505,16 @@ "value" : "리트윗했습니다" } }, - "nl" : { + "nb" : { "stringUnit" : { "state" : "translated", - "value" : "geretweet" + "value" : "retweeted" } }, - "no" : { + "nl" : { "stringUnit" : { "state" : "translated", - "value" : "retweeted" + "value" : "geretweet" } }, "pl" : { diff --git a/iosApp/flare/UI/Screen/DiscoverScreen.swift b/iosApp/flare/UI/Screen/DiscoverScreen.swift index d873c5568..db7f1b54c 100644 --- a/iosApp/flare/UI/Screen/DiscoverScreen.swift +++ b/iosApp/flare/UI/Screen/DiscoverScreen.swift @@ -54,6 +54,17 @@ struct DiscoverScreen: View { AvatarView(data: selectedAccount.avatar) .frame(width: 24, height: 24) Text(selectedAccount.handle.canonical) + Image("fa-chevron-down") + .font(.footnote) + .foregroundStyle(.secondary) + .scaledToFit() + .frame(width: 8, height: 8) + .padding(8) + .background( + Circle() + .fill(Color.secondary.opacity(0.2)) + ) + .scaleEffect(0.66) } } } diff --git a/iosApp/flare/UI/Screen/TabSettingsScreen.swift b/iosApp/flare/UI/Screen/TabSettingsScreen.swift index 0b7ebea41..859d3b08e 100644 --- a/iosApp/flare/UI/Screen/TabSettingsScreen.swift +++ b/iosApp/flare/UI/Screen/TabSettingsScreen.swift @@ -1,7 +1,5 @@ import SwiftUI import KotlinSharedUI -import SwiftUIBackports - struct TabSettingsScreen: View { @StateObject private var presenter = KotlinPresenter(presenter: SettingsPresenter()) @Environment(\.dismiss) private var dismiss @@ -270,89 +268,19 @@ struct AddTabSheet: View { let onDelete: (TabItem) -> Void let onAdd: (TabItem) -> Void @State private var showAddRssSource = false - @State private var selectedIndex = 0 @State private var importOpmlUrl: URL? = nil + @State private var expandedSections: Set = ["rss"] var body: some View { - VStack { - ScrollView(.horizontal) { - HStack { - Label { - Text("rss_title") - } icon: { - Image("fa-square-rss") - .resizable() - .scaledToFit() - .frame(width: 20, height: 20) - } - .onTapGesture { - withAnimation { - selectedIndex = 0 - } - } - .padding(.horizontal) - .padding(.vertical, 8) - .foregroundStyle(selectedIndex == 0 ? Color.white : .primary) - .backport - .glassEffect(selectedIndex == 0 ? .tinted(.accentColor) : .regular, in: .capsule, fallbackBackground: selectedIndex == 0 ? Color.accentColor : Color(.systemBackground)) - - StateView(state: presenter.state.accountTabs) { accountTabs in - let tabs = accountTabs.cast(AllTabsPresenterStateAccountTabs.self) - ForEach(0.. Binding { + Binding( + get: { expandedSections.contains(key) }, + set: { isExpanded in + if isExpanded { + expandedSections.insert(key) + } else { + expandedSections.remove(key) + } + } + ) + } } struct AccountTabListView: View { let accountTabs: AllTabsPresenterStateAccountTabs - @State private var selectedIndex: Int = 0 let selectedTabs: [TabItem] + @Binding var expandedSections: Set let onDelete: (TabItem) -> Void let onAdd: (TabItem) -> Void var body: some View { - if !accountTabs.extraTabs.isEmpty { - Picker(selection: $selectedIndex) { - Text("tab_settings_section_main_tabs").tag(0) - ForEach(0.. Binding { + Binding( + get: { expandedSections.contains(key) }, + set: { isExpanded in + if isExpanded { + expandedSections.insert(key) + } else { + expandedSections.remove(key) + } + } + ) + } + + private func title(at index: Int) -> LocalizedStringKey { + let tabItem = accountTabs.extraTabs[index] + switch onEnum(of: tabItem) { + case .antenna: + return "antenna_title" + case .feed: + return "bluesky_feeds_title" + case .list: + return "all_lists_title" + case .channel: + return "channels_title" + } + } +} + +private struct AddTabRow: View { + let tabItem: TabItem + let isSelected: Bool + let onDelete: (TabItem) -> Void + let onAdd: (TabItem) -> Void + + var body: some View { + HStack { + Label { + TabTitle(title: tabItem.metaData.title) + } icon: { + TabIcon(icon: tabItem.metaData.icon, accountType: tabItem.account) + } + Spacer() + if isSelected { + Button { + onDelete(tabItem) + } label: { + Image("fa-minus") + .foregroundColor(.red) + } + .buttonStyle(.plain) + } else { + Button { + onAdd(tabItem) + } label: { + Image("fa-plus") + .foregroundColor(.accentColor) + } + .buttonStyle(.plain) } } } From edd52e065f6e4540dc2646e01e468fa8e47ce65b Mon Sep 17 00:00:00 2001 From: Tlaster Date: Fri, 27 Mar 2026 12:46:43 +0900 Subject: [PATCH 4/6] update desktop tab add ui --- .../flare/ui/screen/home/AddTabDialog.kt | 348 ++++++++++-------- 1 file changed, 189 insertions(+), 159 deletions(-) diff --git a/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/AddTabDialog.kt b/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/AddTabDialog.kt index 1b98db145..5efa6b795 100644 --- a/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/AddTabDialog.kt +++ b/desktopApp/src/main/kotlin/dev/dimension/flare/ui/screen/home/AddTabDialog.kt @@ -4,25 +4,24 @@ import androidx.compose.foundation.clickable import androidx.compose.foundation.layout.Arrangement import androidx.compose.foundation.layout.Box import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.Row import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.heightIn +import androidx.compose.foundation.layout.padding +import androidx.compose.foundation.layout.width import androidx.compose.foundation.lazy.LazyColumn import androidx.compose.foundation.lazy.itemsIndexed -import androidx.compose.foundation.pager.HorizontalPager -import androidx.compose.foundation.pager.rememberPagerState -import androidx.compose.foundation.shape.CircleShape +import androidx.compose.material.ExperimentalMaterialApi import androidx.compose.runtime.Composable import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.remember -import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.runtime.setValue import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier -import androidx.compose.ui.draw.clip import androidx.compose.ui.text.style.TextOverflow import androidx.compose.ui.unit.dp import compose.icons.FontAwesomeIcons @@ -55,15 +54,17 @@ import dev.dimension.flare.ui.presenter.list.PinnableTimelineTabPresenter import dev.dimension.flare.ui.screen.settings.AllTabsPresenter import io.github.composefluent.FluentTheme import io.github.composefluent.component.AccentButton +import io.github.composefluent.component.ButtonDefaults import io.github.composefluent.component.CardExpanderItem import io.github.composefluent.component.ContentDialog import io.github.composefluent.component.LiteFilter import io.github.composefluent.component.PillButton +import io.github.composefluent.component.SubtleButton import io.github.composefluent.component.Text import kotlinx.collections.immutable.ImmutableList -import kotlinx.coroutines.launch import org.jetbrains.compose.resources.stringResource +@OptIn(ExperimentalMaterialApi::class) @Composable internal fun AddTabDialog( visible: Boolean, @@ -105,189 +106,218 @@ internal fun AddTabDialog( verticalArrangement = Arrangement.spacedBy(8.dp), ) { allTabs.accountTabs.onSuccess { tabs -> - val pagerState = - rememberPagerState { - tabs.size + 1 - } - val scope = rememberCoroutineScope() - LiteFilter { - PillButton( - selected = pagerState.currentPage == 0, - onSelectedChanged = { - if (it) { - scope.launch { - pagerState.animateScrollToPage(0) - } - } - }, - content = { - Text(text = stringResource(Res.string.rss_title)) - }, - ) - tabs.forEachIndexed { index, tab -> - PillButton( - modifier = Modifier.clip(CircleShape), - selected = pagerState.currentPage == index + 1, - onSelectedChanged = { - scope.launch { - pagerState.animateScrollToPage(index + 1) - } - }, - content = { - AvatarComponent( - tab.profile.avatar, - size = 24.dp, - ) - RichText( - text = tab.profile.name, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - Text( - text = tab.profile.handle.canonical, - style = FluentTheme.typography.caption, - color = - if (pagerState.currentPage == index + 1) { - FluentTheme.colors.text.onAccent.secondary - } else { - FluentTheme.colors.text.text.tertiary - }, - maxLines = 1, - overflow = TextOverflow.Ellipsis, - ) - }, - ) - } - } - HorizontalPager( - state = pagerState, - modifier = Modifier.fillMaxHeight(), + var selectedPage by remember(tabs) { mutableStateOf(0) } + Row( + modifier = + Modifier + .fillMaxWidth() + .fillMaxHeight(), + horizontalArrangement = Arrangement.spacedBy(8.dp), verticalAlignment = Alignment.Top, ) { - if (it == 0) { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(2.dp), - ) { - itemsIndexed( - allTabs.rssTabs, - ) { index, it -> - TabItem( - it, - modifier = - Modifier - .listCard( - index = index, - totalCount = allTabs.rssTabs.size, - ), + LazyColumn( + modifier = Modifier.width(140.dp), + verticalArrangement = Arrangement.spacedBy(2.dp), + ) { + item { + SubtleButton( + buttonColors = + if (selectedPage == 0) { + ButtonDefaults.accentButtonColors() + } else { + ButtonDefaults.subtleButtonColors() + }, + onClick = { + selectedPage = 0 + }, + modifier = Modifier.fillMaxWidth(), + ) { + Text( + text = stringResource(Res.string.rss_title), + modifier = Modifier.fillMaxWidth(), ) } - if (allTabs.rssTabs.isNotEmpty()) { - item { - Spacer(modifier = Modifier.height(12.dp)) - } - } - item { - Box( - contentAlignment = Alignment.Center, - modifier = Modifier.fillMaxWidth(), + } + itemsIndexed(tabs) { index, tab -> + SubtleButton( + buttonColors = + if (selectedPage == index + 1) { + ButtonDefaults.accentButtonColors() + } else { + ButtonDefaults.subtleButtonColors() + }, + onClick = { + selectedPage = index + 1 + }, + modifier = Modifier.fillMaxWidth(), + ) { + Column( + modifier = + Modifier + .fillMaxWidth() + .padding(vertical = 8.dp), + horizontalAlignment = Alignment.Start, + verticalArrangement = Arrangement.spacedBy(4.dp), ) { - AccentButton( - onClick = toAddRssSource, + Row( + horizontalArrangement = Arrangement.spacedBy(4.dp), + verticalAlignment = Alignment.CenterVertically, ) { - FAIcon( - FontAwesomeIcons.Solid.Plus, - contentDescription = stringResource(Res.string.add_rss_source), + AvatarComponent( + tab.profile.avatar, + size = 24.dp, + ) + RichText( + text = tab.profile.name, + maxLines = 1, + overflow = TextOverflow.Ellipsis, ) - Text(stringResource(Res.string.add_rss_source)) } + Text( + text = tab.profile.handle.normalizedHost, + style = FluentTheme.typography.caption, + maxLines = 1, + overflow = TextOverflow.Ellipsis, + ) } } } - } else { - Column( - horizontalAlignment = Alignment.CenterHorizontally, - verticalArrangement = Arrangement.spacedBy(8.dp), - modifier = Modifier.fillMaxWidth(), - ) { - val tab = tabs[it - 1] - var selectedIndex by remember { mutableStateOf(0) } - if (tab.extraTabs.any()) { - val items = - listOf( - stringResource(Res.string.tab_settings_default), - ) + - tab.extraTabs - .map { - when (it) { - is PinnableTimelineTabPresenter.State.Tab.Feed -> - Res.string.tab_settings_feed - - is PinnableTimelineTabPresenter.State.Tab.List -> - Res.string.tab_settings_list - - is PinnableTimelineTabPresenter.State.Tab.Antenna -> - Res.string.antenna_title - - is PinnableTimelineTabPresenter.State.Tab.Channel -> - Res.string.channel_title - } - }.map { stringResource(it) } - LiteFilter( - modifier = Modifier.fillMaxWidth(), - ) { - items.forEachIndexed { index, text -> - PillButton( - selected = selectedIndex == index, - onSelectedChanged = { selectedIndex = index }, - ) { - Text(text = text) - } + } + Box( + modifier = + Modifier + .weight(1f) + .fillMaxHeight(), + ) { + if (selectedPage == 0) { + LazyColumn( + verticalArrangement = Arrangement.spacedBy(2.dp), + ) { + itemsIndexed( + allTabs.rssTabs, + ) { index, it -> + TabItem( + it, + modifier = + Modifier + .listCard( + index = index, + totalCount = allTabs.rssTabs.size, + ), + ) + } + if (allTabs.rssTabs.isNotEmpty()) { + item { + Spacer(modifier = Modifier.height(12.dp)) } } - } - when (selectedIndex) { - 0 -> { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(2.dp), + item { + Box( + contentAlignment = Alignment.Center, + modifier = Modifier.fillMaxWidth(), ) { - itemsIndexed(tab.tabs) { index, it -> - TabItem( - it, - modifier = - Modifier - .listCard( - index = index, - totalCount = tab.tabs.size, - ), + AccentButton( + onClick = toAddRssSource, + ) { + FAIcon( + FontAwesomeIcons.Solid.Plus, + contentDescription = stringResource(Res.string.add_rss_source), ) + Text(stringResource(Res.string.add_rss_source)) } } } + } + } else { + Column( + horizontalAlignment = Alignment.CenterHorizontally, + verticalArrangement = Arrangement.spacedBy(2.dp), + modifier = Modifier.fillMaxWidth(), + ) { + val tab = tabs[selectedPage - 1] + var selectedIndex by remember(tab.profile.key) { + mutableStateOf( + 0, + ) + } + if (tab.extraTabs.any()) { + val items = + listOf( + stringResource(Res.string.tab_settings_default), + ) + + tab.extraTabs + .map { + when (it) { + is PinnableTimelineTabPresenter.State.Tab.Feed -> + Res.string.tab_settings_feed + + is PinnableTimelineTabPresenter.State.Tab.List -> + Res.string.tab_settings_list - else -> { - LazyColumn( - verticalArrangement = Arrangement.spacedBy(2.dp), + is PinnableTimelineTabPresenter.State.Tab.Antenna -> + Res.string.antenna_title + + is PinnableTimelineTabPresenter.State.Tab.Channel -> + Res.string.channel_title + } + }.map { stringResource(it) } + LiteFilter( + modifier = Modifier.fillMaxWidth(), ) { - val data = - tab.extraTabs.elementAtOrNull(selectedIndex - 1)?.data - if (data != null) { - itemsIndexed(data) { index, totalCount, item -> + items.forEachIndexed { index, text -> + PillButton( + selected = selectedIndex == index, + onSelectedChanged = { selectedIndex = index }, + ) { + Text(text = text) + } + } + } + } + when (selectedIndex) { + 0 -> { + LazyColumn( + verticalArrangement = Arrangement.spacedBy(2.dp), + ) { + itemsIndexed(tab.tabs) { index, it -> TabItem( - remember(item) { - item.toTabItem( - accountKey = tab.profile.key, - ) - }, + it, modifier = Modifier .listCard( index = index, - totalCount = totalCount, + totalCount = tab.tabs.size, ), ) } } } + + else -> { + LazyColumn( + verticalArrangement = Arrangement.spacedBy(2.dp), + ) { + val data = + tab.extraTabs.elementAtOrNull(selectedIndex - 1)?.data + if (data != null) { + itemsIndexed(data) { index, totalCount, item -> + TabItem( + remember(item) { + item.toTabItem( + accountKey = tab.profile.key, + ) + }, + modifier = + Modifier + .listCard( + index = index, + totalCount = totalCount, + ), + ) + } + } + } + } } } } From 52e375c306fcbf413be763171e0b659130162c82 Mon Sep 17 00:00:00 2001 From: Tlaster Date: Fri, 27 Mar 2026 13:25:15 +0900 Subject: [PATCH 5/6] update ios notification ux --- iosApp/flare/Localizable.xcstrings | 3 + iosApp/flare/UI/Screen/DiscoverScreen.swift | 12 ++- .../flare/UI/Screen/HomeTimelineScreen.swift | 10 ++- .../flare/UI/Screen/NotificationScreen.swift | 79 ++++++++++++++++- iosApp/flare/UI/Screen/SearchScreen.swift | 88 ++++++++++--------- 5 files changed, 142 insertions(+), 50 deletions(-) diff --git a/iosApp/flare/Localizable.xcstrings b/iosApp/flare/Localizable.xcstrings index b1f988f28..dd66eb8de 100644 --- a/iosApp/flare/Localizable.xcstrings +++ b/iosApp/flare/Localizable.xcstrings @@ -76098,6 +76098,9 @@ } } } + }, + "New from %@" : { + }, "No Drafts" : { "localizations" : { diff --git a/iosApp/flare/UI/Screen/DiscoverScreen.swift b/iosApp/flare/UI/Screen/DiscoverScreen.swift index db7f1b54c..23a57f95d 100644 --- a/iosApp/flare/UI/Screen/DiscoverScreen.swift +++ b/iosApp/flare/UI/Screen/DiscoverScreen.swift @@ -37,10 +37,14 @@ struct DiscoverScreen: View { Menu { ForEach(0.. 1 { ToolbarItem { - NotificationAccountsBar( + NotificationAccountsMenu( items: presenter.state.notifications, selectedAccount: presenter.state.selectedAccount, onSelect: { presenter.state.setAccount(profile: $0) } @@ -142,3 +142,80 @@ struct NotificationAccountsBar: View { .scrollIndicators(.hidden) } } + +struct NotificationAccountsMenu: View { + let items: [NotificationAccountItem] + let selectedAccount: UiProfile? + let onSelect: (UiProfile) -> Void + + private var unreadItems: [NotificationAccountItem] { + items.filter { $0.badge > 0 } + } + + private var unreadSummary: String? { + guard !unreadItems.isEmpty else { + return nil + } + + let visible = unreadItems.prefix(2).map { $0.profile.handle.canonical } + let remaining = unreadItems.count - visible.count + if remaining > 0 { + return visible.joined(separator: " · ") + " +\(remaining)" + } else { + return visible.joined(separator: " · ") + } + } + + var body: some View { + Menu { + ForEach(items, id: \.stableKey) { item in + Toggle(isOn: Binding(get: { + selectedAccount?.key == item.profile.key + }, set: { value in + if value { + onSelect(item.profile) + } + })) { + Label { + Text(item.profile.handle.canonical) + } icon: { + AvatarView(data: item.profile.avatar) + .overlay(alignment: .bottomTrailing) { + } + } + if item.badge > 0 { + Text("\(item.badge)") + } + } + } + } label: { + if let selectedAccount { + HStack(spacing: 8) { + AvatarView(data: selectedAccount.avatar) + .frame(width: 24, height: 24) + VStack(alignment: .leading, spacing: 2) { + Text(selectedAccount.handle.canonical) + .lineLimit(1) + if let unreadSummary { + Text("New from \(unreadSummary)") + .font(.caption2) + .foregroundStyle(.secondary) + .lineLimit(1) + } + } + Image("fa-chevron-down") + .font(.footnote) + .foregroundStyle(.secondary) + .scaledToFit() + .frame(width: 8, height: 8) + .padding(8) + .background( + Circle() + .fill(Color.secondary.opacity(0.2)) + ) + .scaleEffect(0.66) + } + } + } + } +} diff --git a/iosApp/flare/UI/Screen/SearchScreen.swift b/iosApp/flare/UI/Screen/SearchScreen.swift index 716a67364..9f212c25c 100644 --- a/iosApp/flare/UI/Screen/SearchScreen.swift +++ b/iosApp/flare/UI/Screen/SearchScreen.swift @@ -13,7 +13,6 @@ struct SearchScreen: View { var body: some View { List { - accountSection if case .success(let usersState) = onEnum(of: searchPresenter.state.users) { Section { ScrollView(.horizontal) { @@ -65,6 +64,52 @@ struct SearchScreen: View { } .background(Color(.systemGroupedBackground)) .navigationTitle("search_title") + .toolbar { + if case .success(let data) = onEnum(of: searchPresenter.state.accounts) { + let accounts = data.data + if accounts.count > 1 { + ToolbarItem(placement: .primaryAction) { + Menu { + ForEach(0.. 1 { - Section { - ScrollView(.horizontal) { - LazyHStack(spacing: 8) { - ForEach(0.. Date: Fri, 27 Mar 2026 13:33:18 +0900 Subject: [PATCH 6/6] update ios local history ux --- .../flare/UI/Screen/LocalHistoryScreen.swift | 59 ++++++++++--------- 1 file changed, 30 insertions(+), 29 deletions(-) diff --git a/iosApp/flare/UI/Screen/LocalHistoryScreen.swift b/iosApp/flare/UI/Screen/LocalHistoryScreen.swift index 1ece0e2bc..ad304cc91 100644 --- a/iosApp/flare/UI/Screen/LocalHistoryScreen.swift +++ b/iosApp/flare/UI/Screen/LocalHistoryScreen.swift @@ -6,42 +6,43 @@ struct LocalHistoryScreen: View { @State private var searchText = "" @State private var selection: HistorySelection = .status var body: some View { - VStack { - Picker("local_history_title", selection: $selection) { - Text("local_history_status").tag(HistorySelection.status) - Text("local_history_user").tag(HistorySelection.user) - } - .pickerStyle(.segmented) - .padding(.horizontal) - .padding(.vertical, 8) + List { if selection == .status { - List { - if searchText.isEmpty { - TimelinePagingView(data: presenter.state.history) - .listRowSeparator(.hidden) - .listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0)) - .padding(.horizontal) - .listRowBackground(Color.clear) - } else if !presenter.state.data.isError { - TimelinePagingView(data: presenter.state.data) - .listRowSeparator(.hidden) - .listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0)) - .padding(.horizontal) - .listRowBackground(Color.clear) - } + if searchText.isEmpty { + TimelinePagingView(data: presenter.state.history) + .listRowSeparator(.hidden) + .listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0)) + .padding(.horizontal) + .listRowBackground(Color.clear) + } else if !presenter.state.data.isError { + TimelinePagingView(data: presenter.state.data) + .listRowSeparator(.hidden) + .listRowInsets(.init(top: 0, leading: 0, bottom: 0, trailing: 0)) + .padding(.horizontal) + .listRowBackground(Color.clear) + } + } else { + if searchText.isEmpty { + UserPagingView(data: presenter.state.userHistory) + } else if !presenter.state.searchUser.isError { + UserPagingView(data: presenter.state.searchUser) } + } + } + .if(selection == .status, transform: { view in + view .scrollContentBackground(.hidden) .listRowSpacing(2) .listStyle(.plain) .background(Color(.systemGroupedBackground)) - } else { - List { - if searchText.isEmpty { - UserPagingView(data: presenter.state.userHistory) - } else if !presenter.state.searchUser.isError { - UserPagingView(data: presenter.state.searchUser) - } + }) + .toolbar { + ToolbarItem(placement: .primaryAction) { + Picker("local_history_title", selection: $selection) { + Text("local_history_status").tag(HistorySelection.status) + Text("local_history_user").tag(HistorySelection.user) } + .pickerStyle(.menu) } } .detectScrolling()