Skip to content

Commit

Permalink
feat: Add project dashboard page #915 - set stats on translation crea…
Browse files Browse the repository at this point in the history
…te/update
  • Loading branch information
JanCizmar committed Apr 21, 2022
1 parent e72f614 commit 6e300a4
Show file tree
Hide file tree
Showing 5 changed files with 35 additions and 8 deletions.
@@ -1,13 +1,13 @@
package io.tolgee.jobs.migration.translationStats

import io.tolgee.util.WordCounter
import io.tolgee.util.TranslationStatsUtil
import org.springframework.batch.item.ItemProcessor

class TranslationProcessor : ItemProcessor<StatsMigrationTranslationView, TranslationStats> {
override fun process(item: StatsMigrationTranslationView): TranslationStats {
return TranslationStats(
id = item.id, wordCount = item.text?.let { WordCounter.countWords(it, item.languageTag) } ?: 0,
characterCount = item.text?.length ?: 0
id = item.id, wordCount = TranslationStatsUtil.getWordCount(item.text, item.languageTag),
characterCount = TranslationStatsUtil.getCharacterCount(item.text)
)
}
}
Expand Up @@ -9,13 +9,16 @@ import io.tolgee.model.Language
import io.tolgee.model.StandardAuditModel
import io.tolgee.model.enums.TranslationState
import io.tolgee.model.key.Key
import io.tolgee.util.TranslationStatsUtil
import org.hibernate.annotations.ColumnDefault
import javax.persistence.Column
import javax.persistence.Entity
import javax.persistence.EntityListeners
import javax.persistence.Enumerated
import javax.persistence.FetchType
import javax.persistence.ManyToOne
import javax.persistence.OneToMany
import javax.persistence.PrePersist
import javax.persistence.PreUpdate
import javax.persistence.Table
import javax.persistence.UniqueConstraint
import javax.validation.constraints.NotNull
Expand All @@ -31,18 +34,19 @@ import javax.validation.constraints.NotNull
)

@ActivityLoggedEntity
@EntityListeners(Translation.Companion.UpdateStatsListener::class)
@ActivityEntityDescribingPaths(paths = ["key", "language"])
class Translation(
@Column(columnDefinition = "text")
@ActivityLoggedProp
@ActivityDescribingProp
var text: String? = null
) : StandardAuditModel() {
@ManyToOne(optional = false, fetch = FetchType.LAZY)
@ManyToOne(optional = false)
@field:NotNull
lateinit var key: Key

@ManyToOne(fetch = FetchType.LAZY)
@ManyToOne
lateinit var language: Language

@Enumerated
Expand Down Expand Up @@ -75,4 +79,15 @@ class Translation(
this.key = key
this.language = language
}

companion object {
class UpdateStatsListener {
@PrePersist
@PreUpdate
fun preRemove(translation: Translation) {
translation.characterCount = TranslationStatsUtil.getCharacterCount(translation.text)
translation.wordCount = TranslationStatsUtil.getWordCount(translation.text, translation.language.tag)
}
}
}
}
@@ -0,0 +1,11 @@
package io.tolgee.util

object TranslationStatsUtil {
fun getWordCount(text: String?, languageTag: String): Int {
return text?.let { WordCounter.countWords(it, languageTag) } ?: 0
}

fun getCharacterCount(text: String?): Int {
return text?.length ?: 0
}
}
2 changes: 1 addition & 1 deletion backend/data/src/main/kotlin/io/tolgee/util/WordCounter.kt
Expand Up @@ -14,7 +14,7 @@ object WordCounter {
var end: Int = iterator.next()
while (end != BreakIterator.DONE) {
val word = text.substring(start, end)
if (!word.matches("[\\p{P} \\t\\n\\r]".toRegex())) {
if (!word.matches("""[\p{P} \t\n\r~!@#$%^&*()_+{}\[\]:;,.<>/?-]""".toRegex())) {
words.add(word)
}
start = end
Expand Down
Expand Up @@ -15,9 +15,10 @@ internal class WordCounterTest {
}

@Test
fun `counts chinese correctly`() {
fun `counts words correctly`() {
assertThat(WordCounter.countWords("你好,這是一個繁體中文文本。", "zh-Hant")).isEqualTo(6)
assertThat(WordCounter.countWords("你好,这是一个简体中文文本。", "zh-Hans")).isEqualTo(7)
assertThat(WordCounter.countWords("Hello, I am fred. (Super friend!)", "en-US")).isEqualTo(6)
assertThat(WordCounter.countWords("Hello, I am fred. <html>yep!</html>", "en-US")).isEqualTo(7)
}
}

0 comments on commit 6e300a4

Please sign in to comment.