2017-06-12 5 views
0

Je dois afficher dans Android "il y a 1 minute" et "il y a 2 minutes" en utilisant pluriels. Le problème est que j'ai une carte des unités de temps avec un suffixe.Obtenir le pluriel et le célibataire de l'unité Chrono Time

val suffixes = mapOf(
     ChronoUnit.WEEKS to context.getString(R.string.time_units_week), 
     ChronoUnit.DAYS to context.getString(R.string.time_units_day), 
     ChronoUnit.HOURS to context.getString(R.string.time_units_hour), 
     ChronoUnit.MINUTES to context.getString(R.string.time_units_minute), 
     ChronoUnit.SECONDS to context.getString(R.string.time_units_second) 
) 

Et puis je l'utilise comme celui-ci

fun timeLabel(now: ZonedDateTime): String = temporalUnits 
     .map { Pair(it, targetTime.until(now, it)) } 
     .find { it.second > 0 } 
     ?.let { "${it.second} ${suffixes[it.first]}" } 

Comment puis-je convertir que je peux passer la valeur de temps à la carte?

+0

En anglais seulement? Je serais surpris si les formes sont intégrées, mais l'ajout ou la suppression du pluriel s fonctionnerait pour tous les cinq mots (pas pour tous les mots anglais, mais je suppose que vous n'avez pas besoin de cela). Ou vous pouvez utiliser deux cartes, une pour les formes singulières et une pour le pluriel. –

Répondre

0

Je l'ai trouvé, vous pouvez simplement fournir la ressource elle-même

private val suffixes = mapOf(
     ChronoUnit.WEEKS to R.plurals.time_unit_week, 
     ChronoUnit.DAYS to R.plurals.time_unit_day, 
     ChronoUnit.HOURS to R.plurals.time_unit_hour, 
     ChronoUnit.MINUTES to R.plurals.time_unit_minute, 
     ChronoUnit.SECONDS to R.plurals.time_unit_second 
) 

fun timeLabel(now: ZonedDateTime): String = temporalUnits 
     .map { Pair(it, targetTime.until(now, it)) } 
     .find { it.second > 0 } 
     ?.let { 
      val pluralResources = suffixes[it.first]!! 
      resources.getQuantityString(pluralResources, it.second.toInt(), it.second.toInt()) 
     } 
     ?: context.getString(R.string.time_unit_now)