// attributeDisplay provides a function to format profile attributes for display in the GUI // Example: Raw Distance is formatted as a distance in kilometers, and we may need to convert it to metric package attributeDisplay //TODO: Deal with singular/multiple values and how that changes an attribute value's units // For example: 1 variant, 2 variants import "seekia/resources/worldLocations" import "seekia/resources/worldLanguages" import "seekia/resources/currencies" import "seekia/internal/convertCurrencies" import "seekia/internal/globalSettings" import "seekia/internal/helpers" import "seekia/internal/network/appNetworkType/getAppNetworkType" import "seekia/internal/translation" import "strings" import "errors" // This function will format the values into the user's currently selected language or measurement system // This function also supports calculated attributes //Outputs: // -string: Attribute Title (translated) // -bool: Attribute is numerical // -func(string)(string, error): Function to convert attribute value to a displayable, translated value // -Inputs: // -string: Raw attribute value // -Outputs: // -string: Formatted attribute value // -error // -string: Units of the attribute value (translated) // -string: Translated text to show if data is unavailable ("No Response"/"Unknown") // -Example: Height is missing = "No Response", Identity Score is missing = "Unknown" // - If it is impossible for the data to be unavailable, we return "". Example: IsMyContact // -error func GetProfileAttributeDisplayInfo(attributeName string)(string, bool, func(string)(string, error), string, string, error){ passValueFunction := func(input string)(string, error){ return input, nil } formatPercentageFunction := func(input string)(string, error){ valueFloat64, err := helpers.ConvertStringToFloat64(input) if (err != nil){ return "", errors.New("formatPercentageFunction called with non-numeric " + attributeName + " value: " + input) } if (valueFloat64 < 0 || valueFloat64 > 100){ return "", errors.New("formatPercentageFunction called with invalid " + attributeName + " percentage value: " + input) } result := input + "%" return result, nil } roundNumberFunction_Float64 := func(input float64)(string, error){ // We check to see if we need to round the number // We need this for readability // We also convert the number to show numeric units (Example: 5500000 -> 5.5 million) if (input < 1000){ numberIsInteger := helpers.CheckIfFloat64IsInteger(input) if (numberIsInteger == true){ valueRounded := helpers.ConvertFloat64ToStringRounded(input, 0) return valueRounded, nil } valueRounded := helpers.ConvertFloat64ToStringRounded(input, 2) return valueRounded, nil } translatedNumber, err := helpers.ConvertFloat64ToRoundedStringWithTranslatedUnits(input) if (err != nil) { return "", err } return translatedNumber, nil } roundNumberFunction := func(input string)(string, error){ valueFloat64, err := helpers.ConvertStringToFloat64(input) if (err != nil){ return "", errors.New("roundNumberFunction called with non-numeric " + attributeName + " value: " + input) } result, err := roundNumberFunction_Float64(valueFloat64) if (err != nil) { return "", err } return result, nil } translateValueFunction := func(input string)(string, error){ result := translation.TranslateTextFromEnglishToMyLanguage(input) return result, nil } noResponseTranslated := translation.TranslateTextFromEnglishToMyLanguage("No Response") unknownTranslated := translation.TranslateTextFromEnglishToMyLanguage("Unknown") switch attributeName { case "ProfileVersion":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Profile Version") return titleTranslated, true, passValueFunction, "", "", nil } case "NetworkType":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Network Type") return titleTranslated, true, passValueFunction, "", "", nil } case "IdentityKey":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Identity Key") return titleTranslated, false, passValueFunction, "", "", nil } case "IdentityHash":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Identity Hash") return titleTranslated, false, passValueFunction, "", "", nil } case "ProfileType":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Profile Type") return titleTranslated, false, translateValueFunction, "", "", nil } case "CreationTime":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Creation Time") return titleTranslated, true, passValueFunction, "", "", nil } case "Disabled":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Disabled") // This attribute will either have the value "Yes" or it won't exist return titleTranslated, false, translateValueFunction, "", "", nil } case "DeviceIdentifier":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Device Identifier") return titleTranslated, false, passValueFunction, "", "", nil } case "NaclKey":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Nacl Key") return titleTranslated, false, passValueFunction, "", "", nil } case "KyberKey":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Kyber Key") return titleTranslated, false, passValueFunction, "", "", nil } case "ChatKeysLatestUpdateTime":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Chat Keys Latest Update Time") return titleTranslated, true, passValueFunction, "", "", nil } case "Username", "Description", "Hobbies", "Job", "Beliefs":{ // These are attributes which are not numerical and do not need their value translated // These attributes also have a title which is identical to their name // They are also all user-supplied, so they have a possible No Response value. titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(attributeName) return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "Photos", "Avatar", "Language", "Questionnaire", "Tags":{ // These are attributes which should not be displayed as strings in the GUI // They must be displayed in a custom way // These attributes also have a title which is identical to their name // They are also all user-supplied, so they have a possible No Response value. // Photos: a list of base64 webp images, separated by "+" // Avatar: an integer which references an emoji (see /resources/imageFiles/emojis.go) titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(attributeName) return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "CatsRating":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Cats Rating") return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil } case "DogsRating":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Dogs Rating") return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil } case "PetsRating":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Pets Rating") return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil } case "GenderIdentity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Gender Identity") translateGenderFunction := func(input string)(string, error){ if (input == "Man" || input == "Woman"){ result := translation.TranslateTextFromEnglishToMyLanguage(input) return result, nil } return input, nil } return titleTranslated, false, translateGenderFunction, "", noResponseTranslated, nil } case "FruitRating", "VegetablesRating", "NutsRating", "GrainsRating", "DairyRating", "SeafoodRating", "BeefRating", "PorkRating", "PoultryRating", "EggsRating", "BeansRating":{ foodName := strings.TrimSuffix(attributeName, "Rating") attributeTitle := foodName + " Rating" titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(attributeTitle) return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil } case "AlcoholFrequency":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alcohol Frequency") return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil } case "TobaccoFrequency":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Tobacco Frequency") return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil } case "CannabisFrequency":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Cannabis Frequency") return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil } case "Fame":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Fame") return titleTranslated, true, passValueFunction, "/10", noResponseTranslated, nil } case "Wealth":{ // This attribute should not be displayed to the user, use WealthInGold instead. titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Wealth") return titleTranslated, true, passValueFunction, "", noResponseTranslated, nil } case "WealthCurrency":{ // This attribute should not be displayed to the user, use WealthInGold to display wealth in a user's currency instead. titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Wealth Currency") return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "WealthIsLowerBound":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Wealth Is Lower Bound") // Value is either "Yes" or "No" return titleTranslated, false, translateValueFunction, "", noResponseTranslated, nil } case "WealthInGold":{ // We use this attribute to display a user's Wealth // We have to convert it to the user's currency titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Wealth") getAppCurrency := func()(string, error){ exists, appCurrencyCode, err := globalSettings.GetSetting("Currency") if (err != nil) { return "", err } if (exists == false){ return "USD", nil } return appCurrencyCode, nil } appCurrencyCode, err := getAppCurrency() if (err != nil) { return "", false, nil, "", "", err } _, appCurrencySymbol, err := currencies.GetCurrencyInfoFromCurrencyCode(appCurrencyCode) if (err != nil) { return "", false, nil, "", "", err } appNetworkType, err := getAppNetworkType.GetAppNetworkType() if (err != nil){ return "", false, nil, "", "", err } formatValueFunction := func(profileWealthInGold string)(string, error){ wealthInGoldFloat64, err := helpers.ConvertStringToFloat64(profileWealthInGold) if (err != nil) { return "", err } _, convertedProfileWealth, err := convertCurrencies.ConvertKilogramsOfGoldToAnyCurrency(appNetworkType, wealthInGoldFloat64, appCurrencyCode) if (err != nil) { return "", err } convertedResult, err := roundNumberFunction_Float64(convertedProfileWealth) if (err != nil) { return "", err } resultWithSymbol := appCurrencySymbol + convertedResult return resultWithSymbol, nil } currencyCodePadded := " " + appCurrencyCode return titleTranslated, true, formatValueFunction, currencyCodePadded, noResponseTranslated, nil } case "HasGenitalHerpes":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Has Genital Herpes") return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "HasHIV":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Has HIV") return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "HairColor":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Color") return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "HairTexture":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Texture") formatHairTextureValuesFunction := func(input string)(string, error){ //TODO: Translate if (input == "1"){ result := "1/6 - Straight" return result, nil } if (input == "2"){ result := "2/6 - Slightly Wavy" return result, nil } if (input == "3"){ result := "3/6 - Wavy" return result, nil } if (input == "4"){ result := "4/6 - Big Curls" return result, nil } if (input == "5"){ result := "5/6 - Small Curls" return result, nil } if (input == "6"){ result := "6/6 - Very Tight Curls" return result, nil } return "", errors.New("HairTexture formatValuesFunction called with invalid input: " + input) } return titleTranslated, true, formatHairTextureValuesFunction, "", noResponseTranslated, nil } case "EyeColor":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Eye Color") return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "SkinColor":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Skin Color") return titleTranslated, true, passValueFunction, "", noResponseTranslated, nil } case "BodyMuscle":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Body Muscle") return titleTranslated, true, passValueFunction, "/4", noResponseTranslated, nil } case "BodyFat":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Body Fat") return titleTranslated, true, passValueFunction, "/4", noResponseTranslated, nil } case "Height":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Height") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("centimeters") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, roundNumberFunction, unitsWithPadding, noResponseTranslated, nil } case "Sex":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Sex") return titleTranslated, false, translateValueFunction, "", noResponseTranslated, nil } case "Age":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Age") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Years Old") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, noResponseTranslated, nil } case "IsSameSex":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is Same Sex") return titleTranslated, false, translateValueFunction, "", unknownTranslated, nil } case "OffspringProbabilityOfAnyMonogenicDisease":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Probability Of Any Monogenic Disease") return titleTranslated, true, formatPercentageFunction, "", unknownTranslated, nil } case "TotalPolygenicDiseaseRiskScore":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Total Polygenic Disease Risk Score") return titleTranslated, true, passValueFunction, "/100", noResponseTranslated, nil } case "OffspringTotalPolygenicDiseaseRiskScore":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Total Polygenic Disease Risk Score") return titleTranslated, true, passValueFunction, "/100", unknownTranslated, nil } case "23andMe_AncestryComposition":{ // There is no way to display this as text, we use the gui instead titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Ancestry Composition") return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "23andMe_NeanderthalVariants":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Neanderthal Variants") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Variants") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, noResponseTranslated, nil } case "23andMe_OffspringNeanderthalVariants":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring 23andMe Neanderthal Variants") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Variants") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil } case "23andMe_MaternalHaplogroup":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Maternal Haplogroup") return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "23andMe_PaternalHaplogroup":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Paternal Haplogroup") return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } case "IsMyContact":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is My Contact") return titleTranslated, false, translateValueFunction, "", "", nil } case "IsLiked":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is Liked") return titleTranslated, false, translateValueFunction, "", "", nil } case "IsIgnored":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is Ignored") return titleTranslated, false, translateValueFunction, "", "", nil } case "HasRejectedMe":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Has Rejected Me") return titleTranslated, false, translateValueFunction, "", "", nil } case "IHaveMessaged":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("I Have Messaged") return titleTranslated, false, translateValueFunction, "", "", nil } case "HasMessagedMe":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Has Messaged Me") return titleTranslated, false, translateValueFunction, "", "", nil } case "SearchTermsCount":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Search Terms Count") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Terms") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, "", nil } case "Sexuality":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Sexuality") return titleTranslated, false, translateValueFunction, "", noResponseTranslated, nil } case "PrimaryLocationCountry", "SecondaryLocationCountry":{ getTitleTranslated := func()string{ if (attributeName == "PrimaryLocationCountry"){ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Primary Country") return titleTranslated } titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Secondary Country") return titleTranslated } titleTranslated := getTitleTranslated() formatValueFunction := func(inputValue string)(string, error){ inputCountryIdentifier, err := helpers.ConvertStringToInt(inputValue) if (err != nil) { return "", err } countryObject, err := worldLocations.GetCountryObjectFromCountryIdentifier(inputCountryIdentifier) if (err != nil) { return "", err } countryPrimaryName := countryObject.NamesList[0] countryPrimaryNameTranslated := translation.TranslateTextFromEnglishToMyLanguage(countryPrimaryName) return countryPrimaryNameTranslated, nil } return titleTranslated, false, formatValueFunction, "", noResponseTranslated, nil } case "PrimaryLocationLatitude":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Primary Location Latitude") return titleTranslated, true, roundNumberFunction, "°", noResponseTranslated, nil } case "PrimaryLocationLongitude":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Primary Location Longitude") return titleTranslated, true, roundNumberFunction, "°", noResponseTranslated, nil } case "SecondaryLocationLatitude":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Secondary Location Latitude") return titleTranslated, true, roundNumberFunction, "°", noResponseTranslated, nil } case "SecondaryLocationLongitude":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Secondary Location Longitude") return titleTranslated, true, roundNumberFunction, "°", noResponseTranslated, nil } case "Distance":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Distance") getMetricOrImperial := func()(string, error){ exists, metricOrImperial, err := globalSettings.GetSetting("MetricOrImperial") if (err != nil) { return "", err } if (exists == false){ return "Metric", nil } if (metricOrImperial != "Metric" && metricOrImperial != "Imperial"){ return "", errors.New("Global settings contains invalid metricOrImperial: " + metricOrImperial) } return metricOrImperial, nil } metricOrImperial, err := getMetricOrImperial() if (err != nil) { return "", false, nil, "", "", err } if (metricOrImperial == "Metric"){ unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Kilometers") unitsWithPadding := " " + unitsTranslated return "Distance", true, roundNumberFunction, unitsWithPadding, unknownTranslated, nil } // We convert to imperial formatValueFunction := func(inputValue string)(string, error){ distanceKilometersFloat64, err := helpers.ConvertStringToFloat64(inputValue) if (err != nil){ return "", errors.New("formatValueFunction called with invalid distance: " + inputValue) } distanceMiles, err := helpers.ConvertKilometersToMiles(distanceKilometersFloat64) if (err != nil) { return "", err } distanceMilesRounded, err := roundNumberFunction_Float64(distanceMiles) if (err != nil) { return "", err } return distanceMilesRounded, nil } unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Miles") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, formatValueFunction, unitsWithPadding, unknownTranslated, nil } case "ProfileLanguage":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Profile Language") formatValueFunction := func(inputValue string)(string, error){ languageInt, err := helpers.ConvertStringToInt(inputValue) if (err != nil){ return "", errors.New("Database corrupt: Contains invalid profile language identifier: " + inputValue) } languageObject, err := worldLanguages.GetLanguageObjectFromLanguageIdentifier(languageInt) if (err != nil){ return "", errors.New("Database corrupt: Contains invalid profile language identifier: " + inputValue) } languagePrimaryName := languageObject.NamesList[0] languageNameTranslated := translation.TranslateTextFromEnglishToMyLanguage(languagePrimaryName) return languageNameTranslated, nil } return titleTranslated, true, formatValueFunction, "", noResponseTranslated, nil } case "SeekiaVersion":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Seekia Version") return titleTranslated, false, passValueFunction, "", "", nil } case "IdentityScore":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Identity Score") return titleTranslated, true, passValueFunction, "", unknownTranslated, nil } case "Controversy":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Controversy") return titleTranslated, true, passValueFunction, "", unknownTranslated, nil } case "BanAdvocates":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Ban Advocates") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Advocates") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil } case "NumberOfReviews":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Number Of Reviews") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Reviews") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil } case "MatchScore":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Match Score") return titleTranslated, true, passValueFunction, "", unknownTranslated, nil } case "RacialSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Racial Similarity") return titleTranslated, true, passValueFunction, "", unknownTranslated, nil } case "EyeColorSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Eye Color Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "EyeColorGenesSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Eye Color Genes Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "HairColorSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Color Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "HairColorGenesSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Color Genes Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "SkinColorSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Skin Color Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "SkinColorGenesSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Skin Color Genes Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "HairTextureSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Texture Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "HairTextureGenesSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Texture Genes Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "FacialStructureGenesSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Facial Structure Genes Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "EyeColorGenesSimilarity_NumberOfSimilarAlleles":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Eye Color Genes Similarity - Number Of Similar Alleles") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil } case "SkinColorGenesSimilarity_NumberOfSimilarAlleles":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Skin Color Genes Similarity - Number Of Similar Alleles") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil } case "HairColorGenesSimilarity_NumberOfSimilarAlleles":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Color Genes Similarity - Number Of Similar Alleles") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil } case "HairTextureGenesSimilarity_NumberOfSimilarAlleles":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Hair Texture Genes Similarity - Number Of Similar Alleles") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil } case "FacialStructureGenesSimilarity_NumberOfSimilarAlleles":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Facial Structure Genes Similarity - Number Of Similar Alleles") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Alleles") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, unknownTranslated, nil } case "23andMe_AncestralSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Ancestral Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "23andMe_MaternalHaplogroupSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Maternal Haplogroup Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "23andMe_PaternalHaplogroupSimilarity":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("23andMe Paternal Haplogroup Similarity") return titleTranslated, true, passValueFunction, "%", unknownTranslated, nil } case "OffspringProbabilityOfAnyMonogenicDisease_NumberOfDiseasesTested":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Probability Of Any Monogenic Disease - Number Of Diseases Tested") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Diseases") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, "", nil } case "TotalPolygenicDiseaseRiskScore_NumberOfDiseasesTested":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Total Polygenic Disease Risk Score - Number Of Diseases Tested") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Diseases") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, "", nil } case "OffspringTotalPolygenicDiseaseRiskScore_NumberOfDiseasesTested":{ titleTranslated := translation.TranslateTextFromEnglishToMyLanguage("Offspring Total Polygenic Disease Risk Score - Number Of Diseases Tested") unitsTranslated := translation.TranslateTextFromEnglishToMyLanguage("Diseases") unitsWithPadding := " " + unitsTranslated return titleTranslated, true, passValueFunction, unitsWithPadding, "", nil } } attributeHasMonogenicDiseasePrefix := strings.HasPrefix(attributeName, "MonogenicDisease_") if (attributeHasMonogenicDiseasePrefix == true){ attributeNameWithoutPrefix := strings.TrimPrefix(attributeName, "MonogenicDisease_") hasSuffix := strings.HasSuffix(attributeNameWithoutPrefix, "_ProbabilityOfPassingAVariant") if (hasSuffix == true){ monogenicDiseaseNameWithUnderscores := strings.TrimSuffix(attributeNameWithoutPrefix, "_ProbabilityOfPassingAVariant") monogenicDiseaseName := strings.ReplaceAll(monogenicDiseaseNameWithUnderscores, "_", " ") title := monogenicDiseaseName + " Probability Of Passing A Variant" titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(title) return titleTranslated, true, formatPercentageFunction, "", noResponseTranslated, nil } hasSuffix = strings.HasSuffix(attributeNameWithoutPrefix, "_NumberOfVariantsTested") if (hasSuffix == true){ monogenicDiseaseNameWithUnderscores := strings.TrimSuffix(attributeNameWithoutPrefix, "_NumberOfVariantsTested") monogenicDiseaseName := strings.ReplaceAll(monogenicDiseaseNameWithUnderscores, "_", " ") title := monogenicDiseaseName + " Number Of Variants Tested" titleTranslated := translation.TranslateTextFromEnglishToMyLanguage(title) return titleTranslated, true, passValueFunction, "Variants", noResponseTranslated, nil } return "", false, nil, "", "", errors.New("GetProfileAttributeDisplayInfo called with unknown attributeName: " + attributeName) } hasLocusValuePrefix := strings.HasPrefix(attributeName, "LocusValue_rs") if (hasLocusValuePrefix == true){ locusRSID := strings.TrimPrefix(attributeName, "LocusValue_") locusTranslated := translation.TranslateTextFromEnglishToMyLanguage("Locus") valueTranslated := translation.TranslateTextFromEnglishToMyLanguage("Value") titleTranslated := locusTranslated + " " + locusRSID + " " + valueTranslated return titleTranslated, false, passValueFunction, "", noResponseTranslated, nil } hasLocusIsPhasedPrefix := strings.HasPrefix(attributeName, "LocusIsPhased_rs") if (hasLocusIsPhasedPrefix == true){ locusRSID := strings.TrimPrefix(attributeName, "LocusIsPhased_") locusTranslated := translation.TranslateTextFromEnglishToMyLanguage("Locus") isPhasedTranslated := translation.TranslateTextFromEnglishToMyLanguage("Is Phased") titleTranslated := locusTranslated + " " + locusRSID + " " + isPhasedTranslated return titleTranslated, false, translateValueFunction, "", noResponseTranslated, nil } return "", false, nil, "", "", errors.New("GetProfileAttributeDisplayInfo called with unknown attributeName: " + attributeName) }